我正在研究一个问题,需要随机生成凸多面体,并将凸多面体放在任意点的立方体/圆柱容器中,而不需要重叠。我使用three.js获得图形输出。
一个演示。
在放置多面体时,如何检查它是否与其他多面体相交?
所涉及的凸多面体是简单的四面体或六面体,是用THREE.ConvexGeometry构造的。因为我需要一个精确的检查,包围框是不够的,我只是使用它来确保两个多面体不相交。
我做了很多研究,发现了很多复杂的理论和方法,我需要的是得到一个布尔结果,来判断两个凸多面体之间是否存在相交。分离轴定理 in 3D已经足够好了,但是Three.js似乎无法做到这一点。有人能告诉我如何用简单的方式做这样的检查吗?或者解释一下如何在3D中使用SAT进行检查?
发布于 2015-04-26 14:58:50
你可以看看http://www.realtimerendering.com/intersections.html。尽管这个网站是从2011年开始的,但是在过去的几年里,交汇算法并没有改变。从演示中可以看出,一旦多面体被放置在立方体中,它们就不会移动。因此,SAT算法并不是最好的解决方案,因为它用于移动多面体。
发布于 2015-04-26 16:10:00
算法是一种强大的算法,它允许测量距离和检查凸多面体之间的交点。不过,我仍然认为在简单多面体上使用比较好,否则在支持函数中的计算可能需要一些时间。一个可能的缺点是,您需要有能够度量一个点与另一个点/段/三角形之间的距离的函数,我不知道在three.js中是否有。
算法
https://stackoverflow.com/questions/29874791
复制相似问题