使用斜坡从另一个位置获取新位置x距离

时间:2013-05-25 21:49:57

标签: math plot lua

打扰一下,如果我说错了标题,我对数学不太好,也不知道正确的术语,但我认为有人会正确编辑它。

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

类似于这个严重完成的MS绘画示例,其中2个黑点位于最右侧,我的位置在左侧,然后绿点是我想要的。

Plotted dots

2 个答案:

答案 0 :(得分: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(...)是平方根函数。如果你想要直线上的一个点距离(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)

+符号的第一个点是(X2,Y2)方向距(X1,Y1)的距离d-符号的第二个点是距离(X1,Y1)的距离d,但是远离(X2,Y2)的距离。如果您想要的案例总是如图所示,那么答案始终是使用-符号取第二个点。

答案 1 :(得分: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)