我环顾四周但却没有找到我正在寻找的东西。起初,我认为这将是一个简单的问题。直到我尝试实现它并意识到有很多情况,我找不到通用的解决方案。
说,我有两个AABB。如果他们的轮廓相交,我想得到他们所有的交点。 最大点数 4 ,最小非零点数 1 。
我的AABB由min
和max
点组成,这些点始终会自动排序,以便min
始终具有最低 xy值和{{1始终具有最高 xy值。
下图显示了一些AABB。蓝线表示它们的交点。请注意,如果AABB的一侧与另一侧重叠,则有点像沿着重叠的线段具有无限量的交叉点;在那些情况下,我想忽略它们并说:“那里没有交叉点。”
有人对算法有所了解吗? 我意识到我没有发布任何代码,我很确定这是不赞成的,但我已经考虑过这个问题了。至于为什么我想这样做..我duno',我只是好奇是否可以干净利落地做到这一点。
哦,是的,我的AABB有这样的方法应该是有用的:
max
我可以做一个丑陋的黑客攻击,只做分段&lt; - &gt;线段检查但是,我duno'..它感觉有点',嗯,丑陋和不优雅。我很确定我可以使用Vector<2> getSize () const;
Point<2> getCenter () const;
//0=Quadrant-1, 1=Quadrant-2, 2=Quadrant-3, 3=Quadrant-4, else, error
Point<2> getCorner (int index) const;
//0=right, 1=up, 2=left, 3=down, else, error
LineSegment2D getSide (int index) const;
和min
点来做一些诡计来快速完成这项工作。