Roo*_*kie 7 c++ math geometry intersection collision-detection
如何测试三角形和正方形是否相互交叉?
当我们知道它是方形而不是矩形时,有没有什么方法可以优化它?此外,方形是轴对齐的,这样可以提高性能吗?
或者我应该将正方形分成三角形,并进行两次三角形 - 三角形相交检查?
编辑:澄清:我正试图检查这两个形状是否以任何方式相互重叠.所以三角形可以在正方形内,正方形可以在三角形内部,并且它也应该返回true.
通过获取三角形的顶点并为每条边建立直线方程,以一致的顺序(围绕三角形顺时针或逆时针),将矩形(或正方形)与三角形的每条边进行比较。
如果矩形的任意边完全位于三角形之外,则它不会相交。
将矩形的边缘与三角形相对,再次进行测试。
通过知道矩形是轴对齐的,可能会提高性能,因为您可以计算出哪个角最有可能位于三角形内,并仅测试该角,而不是测试所有四个角。
这是否是胜利取决于实施。有时,盲目检查四个坐标可能比实际计算最佳坐标更快。
根据矩形检查三角形应该更容易,因为当矩形轴对齐时,直线方程是针对 x 或 y 的简单测试。
这是分离轴测试的通用形式 - 找到将两个对象分开的直线或平面,从而证明它们不能相交。如果您想要更高的性能,您可以找到两个对象最接近的特征来计算出最合适的线/平面来使用,而不是尝试所有它们。