因此,我正在研究2D物理引擎,但是有一个问题。我很难概念化如何计算此值:
取两个正方形:它们移动,碰撞,并基于两个速度+它们的形状以某个矢量移动。
我有两个表示这两个形状的矢量列表(二维双列表),一个如何获得法向矢量?
根据质心的位置,命中矢量为(s1为第一个形状,s2为第二个形状)s2- s1。
现在,我知道法线矢量是垂直于边缘的矢量,并且我知道可以将直线的垂直矢量获得90度,但是什么边缘呢?
我在几个地方读过,它是一个角撞到的边缘。您如何确定?
对您而言,如何以数学或编程方式确定什么优势对我而言毫无意义。
谁能指出我在理解上做错了什么?很抱歉没有提供代码来解释这一点,因为我在为它编写代码时遇到了问题。
最佳答案
图1:在2D中,法向矢量垂直于切线:
图2:在3D中,法向矢量垂直于切平面
图3:对于正方形,如果您不在拐角处,则法线向量很容易;它仅垂直于正方形的侧面(在上图中,对于沿着正方形右侧的任何点,n = 1 i + 0 j)。
但是,在拐角处会变得更加困难,因为切线的定义不明确(就导数而言,切线在拐角处是不连续的,因此垂直线是不明确的)。
即使法线矢量未在角点处定义,也直接在其左侧和右侧定义。因此,可以将这两个法线(n1和n2)的平均值用作拐角处的法线。
为减少技术难度,法线向量将位于从正方形中心到碰撞角的方向。
编辑:在下面的聊天中回答OP的其他问题:“如何仅通过知道相交的顶点来计算两个多边形s1和s2之间的一般碰撞的法向矢量。”
通常,您可以像这样计算范数(N
是总顶点,m
是碰撞内的顶点):
vcenter =(∑N vi)/ N
vcollision =(∑m vi)/米
n = vcollision-vcenter
图1-vcollision只是一个顶点。
图2-vcollision是两个顶点的平均值。
图3-通用多边形相交的vcollision。