求解区域内反射光束的算法

时间:2014-12-24 02:27:02

标签: algorithm computational-geometry intersection

我目前正致力于超声波检测相关计划。参考下图:

enter image description here

我有黑盒作为探头,有2条黑线作为光束向外辐射,击中底面并反射交叉(黑点标记的交点)与三角形的边界(蓝线勾勒出来) )。

据我所知,给定所有参数(例如每条线的方程和光束角度),我可以使用简单的三角函数求解黑点的位置。

然而,我的问题是,是否有更好/更先进的方法来解决这个问题? (例如,使用某种形式的绕组数算法,类似于多边形问题中的点)。 我假设所有参数(光束的角度,探头的准确位置和方向以及三角形)都是已知的。

1 个答案:

答案 0 :(得分:3)

我不认为你可以在这里使用很多不同寻常的东西。交点的计算相当简单。

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) )

通过查找两个点相同的t1t2的值来计算交点。通过设置两个y值相等,我们可以快速看到t1t2必须相等:

y1 + t1 * (y2 - y1) = y1 + t2 * (y2 - y1)
t1 * (y2 - y1) = t2 * (y2 - y1)
t1 = t2

了解这一点,我们可以将t1替换为t2,将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

您可以尝试改善这一点。例如,您可以根据比较坐标确定某些配置不相交,而不进行完整计算。但由于计算本身如此简单,似乎不值得。