使用斜率从另一位置获得距离x的新位置

不好意思如果我的标题用词不当,我不太懂数学,也不知道正确的术语,但我想有人会修改它。

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

就像这个糟糕的MS Paint示例一样,两个黑点是远右侧的目标,我的位置在左侧,绿点是我想要的。

Plotted dots

点赞
用户1376108
用户1376108

你需要结合两个公式。

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)]

注: 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-25 22:13:54
用户2110762
用户2110762

我将假设

  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(...) 是求平方根的函数。如果你想要一个距离 (X1, Y1) d 的点在那条直线上,那么就有两个这样的点,一个在 (X1, Y1) 左侧,另一个在 (X1, Y1) 右侧。这两个点的坐标是

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

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

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

2013-05-25 23:02:27