如果我有一个由四个点(x1,y1),(x2,y2),(x3,y3),(x4,y4)定义的梯形(选为(255,0),(255, 235),(200,35)和(200,235)为了示例),我在 n 中任意划分 m 像这样的部分(原谅粗略的绘图):
我怎样才能找到(x,y)的坐标?
我试过在线条的斜坡上鬼混,但我的数学技巧太生疏了,无法弄明白。有什么想法吗?
答案 0 :(得分:3)
根据你的例子,具体情况很简单。
首先,x位置很容易。由于垂直方向始终与y轴平行,因此x只是x宽度除以截面数:
x = x1+((x2-x1)/a*xa)
其中:
注意:我选择a
以避免与斜率符号混淆:m
。
因为它有点复杂。我们首先需要找到位于梯形顶部和底部线上的坐标。我们使用标准线方程:
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)是屏幕的左上角。