一起移动后,找到点对线的新相对位置

时间:2021-01-19 18:10:18

标签: math mathematical-optimization

我正在开发一个绘图应用程序。我将主要问题概括为一个小场景:

用户绘制线 A1-B1 以及点 M1。现在用户将线 A1-B1 移动到新位置 A2-B2,而点 M1 也应该随线移动(就像刚体一样)。如何计算 M2 点的新位置?

enter image description here

我知道对线或圆的结合进行复杂的计算是可能的,最后确定新点是在线的右侧还是左侧 (this question) 等。但是因为我想在任何步骤上重新计算实时拖动,我想应该有一个所有建模软件都使用的快捷方式和轻量级解决方案。真的有比线或圆连词更快捷的公式吗?

为了再次总结这个问题,我正在寻找给定 A1、B1、A2、B2、M1 的光函数并寻找 M2 位置(x 和 y 的两个单独公式)

M2 = f(A1,B1,A2,B2,M1)

我的猜测:我认为找到中心和旋转角度是最好的选择之一,但我不知道是否有快捷功能可以找到它们。

编辑:我更喜欢在在线网站中实现它,所以如果有一个现成的 javascript 库,它会有所帮助,但我现在只是在寻找数学逻辑。

2 个答案:

答案 0 :(得分:1)

A1B1开始。

D = B1 - A1
C1 = D/|D|

C1逆时针旋转90度得到C'1
C1 = (cx, cy)
C'1 = (-cy, cx)

现在取 M1 - A1 并根据 C1 进行测量C'1

j = (M1 - A) · C1
k = (M1 - A) · C'1

现在很容易证明:

M1 = A1 + j C1 + k C'1

所以 j 和 k 告诉你 M1 在哪里,给定 A1B 1.

当你得到A2B2时,用它们来构造C2,旋转它得到C'2,然后你会得到:

M2 = A2 + j C2 + k C'2

答案 1 :(得分:0)

我假设点是具有 x 和 y 值的对象。像这样:

A1 = {x: 100, y:100}

这是一个轻量级的解决方案:

function reposition(A1,A2,B1,B2,M1)
    {
 //Getting the Angle Between Lines
    var angle = Math.atan2(B2.y-B1.y, B2.x-B1.x)-Math.atan2(A2.y-A1.y, A2.x-A1.x);
 //Rotating the point
    var xdif = M1.x-A1.x; //point.x-origin.x
    var ydif = M1.y-A1.y; //point.y-origin.y
 //Returning M2
    return {x:B1.x + Math.cos(angle) * xdif - Math.sin(angle) * ydif, y: B1.y + Math.sin(angle) * xdif + Math.cos(angle) * ydif}
    }
相关问题