我认为对此有一个非常直接的答案,但我无法找到它。我的几何课程距离太远了。问题是: 给定2点A和B(坐标Ax Ay Bx和By),我想找到点C和D的坐标,以便[AB]和[CD]段在它们的中心相交,[CD]的长度为d(一个变量)。 我想找到从Ax,Ay,Bx,By和d给出Cx,Cy,Dx和Dy的等式。 这是问题的一个小模式:
和预期结果的图像:
我已经知道如何找到[AB]的中心点(Ax + Bx / 2,Ay + By / 2),如何找到[AB]段的斜率(By-Ay / Bx-Ax)然后是[CD]段之一(Ax-Bx / By-Ay)。但后来我陷入了如何获得我的两点。我以为我可以从坡度计算角度,然后用一些三角法来得到坐标,但听起来像是一个非常沉重,丑陋和不必要的计算...... 它感觉如此接近,但我仍然无法得到它。
我还发现了this post,这几乎是完美的,但无法定义长度:它必须与第一段相同。
我不认为这是依赖于语言的,但是如果你必须知道,我正在处理一个迷你原型,并且可能会在以后的javascript中使用它。
感谢您的帮助。
答案 0 :(得分:0)
这里的基本技巧是,在2d中,向量(x,y)的垂线仅为±(-y,x)。 (通过在3d中使用(0,0,1)向量计算cross product并投影到2d来获得此结果。)所以你需要做的是:
获得A和B之间的中点(你已经完成了)。
从A到B得到向量,即B - A =(x,y)=(bx - ax,by - ay)。
获取垂直向量:( - y,x)。
将其标准化。设length = sqrt(y*y + x*x)
,然后norm = (-y/length, x/length)
。
将标准化垂线乘以所需距离±d/2
(因为您希望C和D之间的距离为d
),并添加到中心点。
不需要斜坡或触发功能。