以编程方式查找梯形包含的点的坐标

时间:2013-03-04 04:06:44

标签: math language-agnostic

如果我有一个由四个点(x1,y1),(x2,y2),(x3,y3),(x4,y4)定义的梯形(选为(255,0),(255, 235),(200,35)和(200,235)为了示例),我在 n 中任意划分 m 像这样的部分(原谅粗略的绘图):

plane

我怎样才能找到(x,y)的坐标?

我试过在线条的斜坡上鬼混,但我的数学技巧太生疏了,无法弄明白。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

根据你的例子,具体情况很简单。

首先,x位置很容易。由于垂直方向始终与y轴平行,因此x只是x宽度除以截面数:

x = x1+((x2-x1)/a*xa)

其中:

  • x =结果坐标
  • x1,x2 =梯形的边缘
  • a =各节数
  • xa =部分术语中的x坐标

注意:我选择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)是屏幕的左上角。