找到距交线给定垂直距离的两条线的交点

问题描述 投票:0回答:1

我正在寻求帮助来解决以下情况。我有一条由两点 P1 和 P2 定义的线段。我有一条从 P3 开始并在 P4 处与线段 P1P2 相交的射线。我想计算 P5,使其始终是距 P1P2 的给定长度 l 垂直距离。

Problem

这是我当前的方法:当光线 P3 与 P1P2 相交时(作为条件,因此甚至不使用 P4),然后我计算 P1'P2',其中 P1' 和 P2' 通过垂直向量平移到 P3(如下所示) ),我发现射线 P3 与 P1'P2' 相交。

Wonky solution with translated parallel line

不过,这对我来说似乎是一种奇怪的方式。首先,我必须找到 P1、P2 和 P3 的方向,并使用它来获得正确的垂直向量,然后然后我必须再次与 P1'P2' 进行线相交才能找到 P5。所有这一切只是为了使 P5 始终距线段 P1P2 特定的距离 l。

似乎应该有一种更直接的方法来解决这个问题,而计算机需要执行的数学更少,但我没有足够强大的数学背景来解决这个问题。由于我使用的是向量,这使得在我已有的工具之外思考变得更加困难(线相交也是高中数学)。

该用例用于碰撞检测。我已经用水平斜率绘制了 P1P2,但情况并不一定总是如此。如果有人告诉我我当前的解决方案是正确的,我会感到非常惊讶,我希望有人能指出我更好的方法。

PS,我的数学符号知识也不强。如果有人要求查看我的作品,我必须使用 C# 向您展示。

vector 2d collision-detection trigonometry line-intersection
1个回答
0
投票

你可以用三角函数解决这个问题,但如果我正确理解你的问题,你实际上不需要它。您正在处理点,所以假设 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
© www.soinside.com 2019 - 2024. All rights reserved.