计算平分段坐标

时间:2015-01-07 21:53:59

标签: geometry

我认为对此有一个非常直接的答案,但我无法找到它。我的几何课程距离太远了。问题是: 给定2点A和B(坐标Ax Ay Bx和By),我想找到点C和D的坐标,以便[AB]和[CD]段在它们的中心相交,[CD]的长度为d(一个变量)。 我想找到从Ax,Ay,Bx,By和d给出Cx,Cy,Dx和Dy的等式。 这是问题的一个小模式:

enter image description here

和预期结果的图像:

enter image description here

我已经知道如何找到[AB]的中心点(Ax + Bx / 2,Ay + By / 2),如何找到[AB]段的斜率(By-Ay / Bx-Ax)然后是[CD]段之一(Ax-Bx / By-Ay)。但后来我陷入了如何获得我的两点。我以为我可以从坡度计算角度,然后用一些三角法来得到坐标,但听起来像是一个非常沉重,丑陋和不必要的计算...... 它感觉如此接近,但我仍然无法得到它。

我还发现了this post,这几乎是完美的,但无法定义长度:它必须与第一段相同。

我不认为这是依赖于语言的,但是如果你必须知道,我正在处理一个迷你原型,并且可能会在以后的javascript中使用它。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这里的基本技巧是,在2d中,向量(x,y)的垂线仅为±(-y,x)。 (通过在3d中使用(0,0,1)向量计算cross product并投影到2d来获得此结果。)所以你需要做的是:

  1. 获得A和B之间的中点(你已经完成了)。

  2. 从A到B得到向量,即B - A =(x,y)=(bx - ax,by - ay)。

  3. 获取垂直向量:( - y,x)。

  4. 将其标准化。设length = sqrt(y*y + x*x),然后norm = (-y/length, x/length)

  5. 将标准化垂线乘以所需距离±d/2(因为您希望C和D之间的距离为d),并添加到中心点。

  6. 不需要斜坡或触发功能。