0

如果我有一个由四个点定义的梯形 (x1, y1), (x2, y2), (x3, y3), (x4, y4) (选为 (255, 0), (255, 235), (200, 35) 和 (200, 235) 以作为示例),我将它任意划分为n除以m部分,如下所示(请原谅粗图):

飞机

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

我试过用线条的斜率来玩弄,但我的数学技能太生疏了,无法弄清楚。有任何想法吗?

4

1 回答 1

3

对于根据您的示例的特定情况,它非常简单。

首先,x 位置很容易。由于垂直线总是平行于 y 轴,因此 x 只是 x 宽度除以部分数:

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

在哪里:

  • x = 结果坐标
  • x1,x2 = 梯形的边
  • a = 部分数
  • xa = x 截面坐标

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

于 2013-03-04T04:51:15.610 回答