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

Finding the new relative position of a point against the line after moved together

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

用户绘制线 A1-B1 和点 M1。现在用户将线 A1-B1 移动到新位置 A2-B2,同时点 M1 也应随线移动(如刚体)。如何计算M2点的新位置?

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

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

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

我的猜测:我认为找到中心和旋转角度是最好的选择之一,但我再次不知道是否有一个 shotcut 函数可以找到它们.

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

A1B1[=108开始=].

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

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

现在取M1 - A1 并根据 C1C'1[=108 进行测量=]:

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

现在很容易证明:

M1 = A1 + j C1 + kC'1

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

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

M2 = A2 + j C2 + kC'2

我假设点是具有 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}
    }