二维空间中三角形碰撞的检测
给定二维坐标平面上的顶点,如何以编程方式检测两个三角形是否相互接触?这包括接触点或边缘,以及一个三角形是否完全位于另一个三角形内部。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
给定二维坐标平面上的顶点,如何以编程方式检测两个三角形是否相互接触?这包括接触点或边缘,以及一个三角形是否完全位于另一个三角形内部。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
您可以通过找到一条边(在构成两个三角形的总共 6 条边中)充当分隔线来证明这两个三角形不会发生碰撞,其中一个三角形的所有顶点都位于一侧,而三角形的所有顶点都位于一侧。另一个三角形位于另一边。如果你能找到这样的边,那么这意味着三角形不相交,否则三角形就会发生碰撞。
这是三角形碰撞函数的 Matlab 实现。您可以在此处找到
sameside
函数的理论:http:// /www.blackpawn.com/texts/pointinpoly/default.htmlYou can prove that the two triangles do not collide by finding an edge (out of the total 6 edges that make up the two triangles) that acts as a separating line where all the vertices of one triangle lie on one side and the vertices of the other triangle lie on the other side. If you can find such an edge then it means that the triangles do not intersect otherwise the triangles are colliding.
Here is a Matlab implementation of the triangle collision function. You can find the theory of the
sameside
function here: http://www.blackpawn.com/texts/pointinpoly/default.html总之,哈桑的回答是最快的。
https://jsfiddle.net/eyal/gxw3632c/
这是javascript中最快的代码:
我写的上面的小提琴测试了几种不同的技术并比较了速度。所有技术都基于三种不同工具的某种组合:
这些就是工具。现在要确定三角形是否相交,我测试了 3 种方法:
In short, Hassan's answer is fastest.
https://jsfiddle.net/eyal/gxw3632c/
This is the fastest code in javascript:
I wrote the above fiddle to test a few different techniques and compare the speed. All the techniques are based on some combination of three different tools:
Those are the tools. Now to find out if triangles intersect, there are 3 ways that I tested:
使用线 线交集
https://www.topcoder.com/community/data-science/data-science-tutorials/geometry-concepts-line-intersection-and-its-applications/#line_line_intersection
还要考虑某些顶点可能接触另一个三角形的一条边的可能性。
http://www.blackpawn.com/texts/pointinpoly/default.html
或者查看此链接并向下滚动
http://compsci.ca/v3/viewtopic .php?t=6034
Use Line Line intersection
https://www.topcoder.com/community/data-science/data-science-tutorials/geometry-concepts-line-intersection-and-its-applications/#line_line_intersection
Also consider the possibility that some vertex might be touching one of the sides of the other triangle.
http://www.blackpawn.com/texts/pointinpoly/default.html
Or look at this link and scroll down
http://compsci.ca/v3/viewtopic.php?t=6034