2015-01-07 70 views
-1

我认为这是一个非常直接的答案,但我无法找到它。我的几何课对此太遥远了。问题是: 给定A点和B点(Ax Ax 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]中心点(如何找到[AB]段(By-Ay/Bx-Ax)和[CD]段(Ax-Bx/By-Ay)之一的斜率)。但后来我被困在如何得到我的两点。我以为我可以从斜率计算角度,然后用三角函数来获得坐标,但它听起来像一个相当沉重,丑陋和不必要的计算... 它感觉如此接近,但我仍然不能得到它。

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

我不认为这是依赖于语言的,但如果你一定要知道,我正在做的事情处理的小型原型,并很可能会得到它的JavaScript版本。

感谢您的任何帮助。

回答

0

这里的基本诀窍是,在图2D中,垂直于向量(x,y)是仅仅±(-y,X)。 (一个通过计算cross product在3D的(0,0,1)向量,并投影到2d得到这个。)所以,你需要做的是:

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

  2. 获得从A到B的载体,其为B - A =(X,Y)=(BX - 斧,由 - AY)。

  3. 获取垂直矢量:(-y,X)。

  4. 正常化它。让length = sqrt(y*y + x*x),然后norm = (-y/length, x/length)

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

无需斜率或触发功能。