我正在寻求帮助来解决以下情况。我有一条由两点 P1 和 P2 定义的线段。我有一条从 P3 开始并在 P4 处与线段 P1P2 相交的射线。我想计算 P5,使其始终是距 P1P2 的给定长度 l 垂直距离。
这是我当前的方法:当光线 P3 与 P1P2 相交时(作为条件,因此甚至不使用 P4),然后我计算 P1'P2',其中 P1' 和 P2' 通过垂直向量平移到 P3(如下所示) ),我发现射线 P3 与 P1'P2' 相交。
不过,这对我来说似乎是一种奇怪的方式。首先,我必须找到 P1、P2 和 P3 的方向,并使用它来获得正确的垂直向量,然后然后我必须再次与 P1'P2' 进行线相交才能找到 P5。所有这一切只是为了使 P5 始终距线段 P1P2 特定的距离 l。
似乎应该有一种更直接的方法来解决这个问题,而计算机需要执行的数学更少,但我没有足够强大的数学背景来解决这个问题。由于我使用的是向量,这使得在我已有的工具之外思考变得更加困难(线相交也是高中数学)。
该用例用于碰撞检测。我已经用水平斜率绘制了 P1P2,但情况并不一定总是如此。如果有人告诉我我当前的解决方案是正确的,我会感到非常惊讶,我希望有人能指出我更好的方法。
PS,我的数学符号知识也不强。如果有人要求查看我的作品,我必须使用 C# 向您展示。
你可以用三角函数解决这个问题,但如果我正确理解你的问题,你实际上不需要它。您正在处理点,所以假设 P3 是
x3, y3
,P4 是 x4, y4
,依此类推。您正在尝试求解 x5
和 y5
。正确吗?
y5
很容易,因为它只是 y4
减去一些距离 L(大写,因为小写 l 不明确)。
y5 = y4 - L
现在对于
x5
,您需要从 x4
向后移动一段距离 D,就像从 y4
向后移动距离 L 一样。该距离 D 将是沿 x 轴的距离与 L 沿 y 轴的距离成比例。按比例向后移动将使您保持在从 P3 到 P4 的那条线上。
x5 = x4 - D
D = (ratio of L to total movement on y axis) * (total movement on x axis)
为了获得 D,我们需要 L 与沿 y 轴的总运动的比率:
R = L/(y4 - y3)
现在我们有了比率,我们将其乘以 x 轴上的总移动:
D = L/(y4 - y3) * (x4 - x3)
将 D 代入上面的方程中
x5
并进行一些重新排列:
x5 = x4 - L(x4 - x3)/(y4 - y3)
因此,您已经有了新点 P5 的已知数字坐标:
x5 = x4 - L(x4 - x3)/(y4 - y3)
y5 = y4 - L