如果我有一个由四个点定义的梯形 (x1, y1), (x2, y2), (x3, y3), (x4, y4) (选为 (255, 0), (255, 235), (200, 35) 和 (200, 235) 以作为示例),我将它任意划分为n除以m部分,如下所示(请原谅粗图):
我怎样才能找到(x,y)的坐标?
我试过用线条的斜率来玩弄,但我的数学技能太生疏了,无法弄清楚。有任何想法吗?
如果我有一个由四个点定义的梯形 (x1, y1), (x2, y2), (x3, y3), (x4, y4) (选为 (255, 0), (255, 235), (200, 35) 和 (200, 235) 以作为示例),我将它任意划分为n除以m部分,如下所示(请原谅粗图):
我怎样才能找到(x,y)的坐标?
我试过用线条的斜率来玩弄,但我的数学技能太生疏了,无法弄清楚。有任何想法吗?
对于根据您的示例的特定情况,它非常简单。
首先,x 位置很容易。由于垂直线总是平行于 y 轴,因此 x 只是 x 宽度除以部分数:
x = x1+((x2-x1)/a*xa)
在哪里:
注意:我选择a
避免与斜率符号混淆:m
。
对于 y,它有点复杂。我们首先需要找到位于梯形顶线和底线的坐标。为此,我们使用标准线方程:
y = mx+c
找到 m 很简单。这只是 Dy/Dx:
m = (y2-y1)/(x2-x1)
为了得到 c,我们只需将 x、y 和 m 代入公式:
c = y-mx
一旦我们得到它,将前面找到的 x 的值代入公式以获得 y 坐标。这样做两次以获得顶部和底部线上的点:
1 A 2
x------------x--------------x
| | |
| xC |
| | |
x------------x--------------x
3 B 4
一起(伪代码):
coordinateFromSection (x1 y1 x2 y2 x3 y3 x4 y4 gridX gridY sectionX sectionY) {
xC = x1+((x2-x1)/gridX*sectionX)
// top line:
m = (y2-y1)/(x2-x1)
c = y1-(m*x1)
yA = m*xC + c
// bottom line:
m = (y4-y3)/(x4-x3)
c = y3-(m*x3)
yB = m*xC + c
// Find yC by dividing line AB by gridY
yC = yA+((yB-yA)/gridY*sectionY)
return (xC yC)
}
上面的所有计算都假设 (0,0) 是屏幕的左上角。