寻找区域内反射光束交点的算法

标签 algorithm computational-geometry intersection

我目前正在从事与超声检测相关的项目。引用下图:

enter image description here

我用黑盒子作为探头,有 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) )

交点是通过找到 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

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

关于寻找区域内反射光束交点的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27630656/

相关文章:

c - 查找封闭的不规则三角3D曲面与笛卡尔矩形3D网格的交点

c++ - 3D 空间中的射线/矩形相交

algorithm - 查找不同图像之间相似性的最准确算法是什么

algorithm - 除以疯狂的大整数的最快算法是什么?

algorithm - 最低公共(public)祖先实现 - 有什么区别?

algorithm - 空间利用算法或网格创建算法

algorithm - 像素化几何图元

arrays - 从只有 3 个有效移动的数组制作最大长度升序子数组

algorithm - 自适应隐式曲面多边形化

javascript - javascript中数组交集的最简单代码