我目前正在研究超声波测试相关的程序。参照下图:寻找区域内反射光束交点的算法
我有黑盒作为探针,用2条黑线作为束照射向外,击中底面和反射相交(由黑点来标记交点)与三角形的边界(由蓝线勾画)。
我明白,给定的所有参数(例如每线的方程和光束角),我可以解决使用简单三角学中的黑点的位置。
不过,我的问题是有解决这种问题的一个更好的/先进的方法是什么? (例如,使用某种形式的绕线数算法,类似于多边形问题中的点)。 我假设所有参数(梁的角度,探测器的准确位置和方向以及三角形)是已知的。
我目前正在研究超声波测试相关的程序。参照下图:寻找区域内反射光束交点的算法
我有黑盒作为探针,用2条黑线作为束照射向外,击中底面和反射相交(由黑点来标记交点)与三角形的边界(由蓝线勾画)。
我明白,给定的所有参数(例如每线的方程和光束角),我可以解决使用简单三角学中的黑点的位置。
不过,我的问题是有解决这种问题的一个更好的/先进的方法是什么? (例如,使用某种形式的绕线数算法,类似于多边形问题中的点)。 我假设所有参数(梁的角度,探测器的准确位置和方向以及三角形)是已知的。
我不认为有太多的与众不同,你可以在这里使用。交点的计算相当简单。
x方向从左到右,y从底部到顶部,假设我们底部的水平线在y1
和顶部在y2
,并且我们有两个线段,其中x坐标用于开始/结束指示的两个段的点:
x4 x2
y2 -------------------
\ /
\/
\/
/\
/\
/ \
/ \
y1 -------------------
x1 x3
两条线段的参数化形式则是:
(x1 + t1 * (x2 - x1), y1 + t1 * (y2 - y1))
(x3 + t2 * (x4 - x3), y1 + t2 * (y2 - y1))
交点通过找到的t1
和的值计算这两点是相同的。从设置两个y的值相等,我们可以很快看到t1
和t2
必须相等:
y1 + t1 * (y2 - y1) = y1 + t2 * (y2 - y1)
t1 * (y2 - y1) = t2 * (y2 - y1)
t1 = t2
知道了这一点,我们可以为t2
替代t1
,设置x的值相等,并求解方程t1
:
x1 + t1 * (x2 - x1) = x3 + t1 * (x4 - x3)
t1 * ((x2 - x1) - (x4 - x3)) = x3 - x1
t1 = (x3 - x1)/((x2 - x1) - (x4 - x3))
一旦计算t1
,你知道段相交如果它的值是0.0和1.0之间。如果是,则交点(xt, yt)
通过将其代入段方程中的一个而获得。整个事情然后变成(伪代码):
t1 = (x3 - x1)/((x2 - x1) - (x4 - x3))
if t1 >= 0.0 and t1 <= 1.0
xi = x1 + t1 * (x2 - x1)
yi = y1 + t1 * (y2 - y1)
else
no intersection
你可以尝试改善这一点。例如,您可以决定某些配置仅基于比较坐标而不相交,而不进行完整计算。但由于计算本身非常简单,所以看起来似乎不值得。
我的想法,但我真的不明白,为什么是两行相同的T?它不应该是t_1和t_2吗? –
@JohnTan是的,我相信结果是正确的,但我得出它的方式并不干净。我更新了答案。我希望这更有意义。 –
谢谢。这非常有帮助。只是好奇,这是在计算机图形中计算直线交点的标准方式吗?我不会想到使用参数化方程来解决这个问题。 –