0

对不起,如果我把标题写错了,我的数学不太好,也不知道正确的术语,但我想有人会正确编辑它。

我正在 Lua 中创建一个脚本,我有一个目标位置和我的位置。我找到了它的斜率,所以现在我有 X1、X2、Y1、Y2 和 M(斜率)。我不知道添加一个距离为 x 的新点的数学。

有点像这个做得不好的 MS 油漆示例,其中 2 个黑点是最右边的目标,我的位置在左边,然后绿点就是我想要的。

绘制的点

4

2 回答 2

2

我会假设

  1. 左边的黑点是(X1,Y1)
  2. 右边的黑点是(X2,Y2)
  3. 斜率 M = (Y2 - Y1)/(X2 - X1)
这意味着(X1,Y1)和(X2,Y2)之间的直线是所有点(X,Y),其中

Y = Y1 + M (X-X1)

定义 (X1, Y1) 和 (X2, Y2) 之间的距离 D,由下式给出

D = Math.sqrt((X2 - X1)² + (Y2 – Y1)²)

哪里Math.sqrt(...)是平方根函数。如果您希望该直线上的某个点d与 (X1, Y1) 有一定距离,则有两个这样的点,一个在 (X1, Y1) 的左侧,一个在 (X1, Y1) 的右侧。这两个点的坐标是

(X1 + (X2 - X1) d/D, Y1 + (Y2 - Y1) d/D)

(X1 - (X2 - X1) d/D, Y1 - (Y2 - Y1) d/D)

带有+符号的第一个点是d在 (X2, Y2) 方向上距 (X1, Y1) 一定距离的点。-带有符号的第二个点是距d(X1, Y1) 一定距离但方向远离 (X2, Y2) 的点。如果你想要的情况总是如图所示,那么答案总是用-符号取第二点。

于 2013-05-25T23:02:27.820 回答
1

你必须结合两个公式。

1. (y3-y2)^2 + (x3-x2)^2 = d
2. (y2-y1)/(x2-x1) = (y3-y2)/(x3-x2)

这是您问题的haskell代码。它可能有用。

foo x1 y1 x2 y2 d =
    [(x3,y3) |
    x3 <- [-100..100], y3 <- [-100..100],
    (y3-y2)^2 + (x3-x2)^2 == d,
    (y2-y1)/(x2-x1) == (y3-y2)/(x3-x2)]

ps:100是一个范围。你可以改变它。这个函数返回两对。像(-1,1),(11,9)。因为我没有指定方式。

另一种解决方案:(我结合公式)

let k = d / sqrt((y2-y1)^2 + (x2-x1)^2)

x3 = x2 + k * (x2-x1)   other   x3 = x2 - k * (x2-x1)
y3 = y2 + k * (y2-y1)   other   y3 = y2 - k * (y2-y1)
于 2013-05-25T22:13:54.243 回答