Math 求圆柱体和三角形之间的法线

Math 求圆柱体和三角形之间的法线,math,geometry,collision,Math,Geometry,Collision,在我正在开发的游戏中,我有一个相当初级的物理引擎,在移动的、圆柱形的角色和由三角形组成的静态网格之间。角色的预期行为是在曲面上滑动,在大多数情况下,效果很好。但引擎并没有区分正面碰撞和侧面碰撞 我不完全确定我能提供哪些信息会有所帮助。我在寻找一个数学解决方案,无论如何,一种确定任意圆柱体和三角形之间“接触角”的方法。我的直觉告诉我,我需要找到三角形和圆柱体之间的接触点,然后用三角形的正则法线确定该点是在三角形内,还是沿着三角形的一条边,用接触点和圆柱体上某点之间的角度确定,我不确定是哪个。,但我

在我正在开发的游戏中,我有一个相当初级的物理引擎,在移动的、圆柱形的角色和由三角形组成的静态网格之间。角色的预期行为是在曲面上滑动,在大多数情况下,效果很好。但引擎并没有区分正面碰撞和侧面碰撞

我不完全确定我能提供哪些信息会有所帮助。我在寻找一个数学解决方案,无论如何,一种确定任意圆柱体和三角形之间“接触角”的方法。我的直觉告诉我,我需要找到三角形和圆柱体之间的接触点,然后用三角形的正则法线确定该点是在三角形内,还是沿着三角形的一条边,用接触点和圆柱体上某点之间的角度确定,我不确定是哪个。,但我相信有更好的解决办法

根据要求,这里有几个例子。在第一幅图中,圆柱体朝三角形向下移动。在本例中,三角形是垂直的,简化为直线。我使用公式Vf=V-N*dotV,N将速度向量投影到三角形的平面上。这是此类碰撞的预期行为

在此图像中,圆柱体的轴与三角形的法线平行。在当前的实现中,Vf仍然使用三角形的自然法线确定,这将导致圆柱体开始垂直移动。在预期行为下,N将垂直于三角形的碰撞边

但这只是碰撞的两个极端。会有很多中间人,所以我需要一个更随意的解决方案

这是我尝试的一个更加3D的例子。很抱歉我的观点不好。此三角形中最底部的顶点更靠近“摄影机”。圆柱体和三角形之间的碰撞点由红色X标记。在预期行为下,如果圆柱体直接远离摄影机,它将沿着三角形边缘的长度向左滑动。不会产生垂直运动,因为接触点是沿着气缸的,呃,管段,而不是盖子

在当前行为下,将使用三角形的法线。气缸将被向上推,就像在三角形表面滑动一样,同时几乎不会阻止运动进入三角形


我知道这是一个困难的请求,因此我感谢您为改进我的问题而提出的建议。

您正在寻找的可能是边缘碰撞检测器。在刚体碰撞系统中,通常有两种类型的碰撞:与具有规则曲面法线的物体碰撞的曲面碰撞,如您所指出的,通过处理速度与曲面法线的比较,可以轻松计算反应法线,以及a物体撞击B物体边缘的边缘碰撞,无论是长方体还是长方体,三角形或其他任何东西。在这种情况下,问题更加复杂,因为,很明显,边不是曲面,所以你根本无法计算它是法线。通常,它是以某种方式近似的-例如,您可以假设,对于三角形网格,边法线是两个边三角形法线之间的平均值。还有其他处理方法,这里讨论了一些:

通常,有一个边缘处理阈值,如果在该值的半径内发生碰撞,则将其视为边缘碰撞,并进行不同的处理

请参见此处的示例:


通过谷歌搜索“内部边缘碰撞”和学习刚体碰撞/动力学,将有助于您自己理解和解决此问题。

如果您可以将其表述为数学问题,例如,找到一种使用顶点坐标、半径和位置等指定三角形和圆柱体的方法。你可以在数学堆栈上询问。我已经插入了图像,请检查正确性。我还不理解这个问题。圆柱体是三维的,三角形是二维的,它们是如何碰撞的?在您的示例中,问题简化为二维,圆柱体显示为一个圆。你能举一个更一般情况的例子吗。我理解绘制三维图片可能很困难:-