打扰一下,如果我说错了标题,我对数学不太好,也不知道正确的术语,但我认为有人会正确编辑它。
我在Lua中创建一个脚本,我有一个目标位置和我的位置。我找到它的斜率所以此刻我有X1,X2,Y1,Y2和M(斜率)。 我不知道用x距离添加一个新点的数学。
类似于这个严重完成的MS绘画示例,其中2个黑点位于最右侧,我的位置在左侧,然后绿点是我想要的。
答案 0 :(得分:2)
我将假设
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)