2013-03-13 87 views
1

进入C++我一直在研究如何让两个球体相互作用。我发现的很多东西都非常复杂,或者是实际的数学公式。是否还有更简单的方法来创建一个函数来识别球体的任何一侧何时与另一个球体接触?我并没有要求你做我的工作,但我真的很感谢一些干净的视觉,伪代码或代码片断,这可以帮助我更好地理解。或者,也许有一些我没有找到的链接?C++检查两个球体相交/ Collidiing

谢谢!

回答

0

这篇文章对两个球体如何相互作用有很好的解释Sphere - sphere collision detection -> reaction。请注意,您可能必须处理复杂的数学问题才能解决此问题。希望通过阅读这些解释,你可以更好地理解数学应该做什么。我发现过去最好在钻研数学之前试着想象并理解如何解决一般的问题。

+0

您已经给出明显是3D问题的2D解决方案。我很想让你失望,但我宁愿让你编辑你的文章。 – 2013-03-18 02:02:59

+0

对不起。没有意识到OP在谈论领域。 – bvogelzang 2013-03-18 18:16:17

1

检查球体中心之间的距离是否小于它们的半径之和。

class Sphere { 
public: 
    double centerX, centerY, centerZ, radius; 
    // .... 
}; 

double distanceBetween(const Sphere& a, const Sphere& b) { 
    return sqrt(pow(a.centerX - b.centerX, 2) + pow(a.centerY - b.centerY, 2) + pow(a.centerZ - b.centerZ, 2)); 
} 

bool areColliding(const Sphere& a, const Sphere& b) { 
    return distanceBetween(a, b) < (a.radius + b.radius); 
}