我一直在研究自己的物理引擎,只是为了加工。为了计算,我需要碰撞的两个盒子的法线。我想出了这段代码
PVector calcNormal(Box A, Box B) {
PVector n = new PVector(B.pos.x-A.pos.x,B.pos.y-A.pos.y);
PVector normal = new PVector(0,0);
float a_extent = (A.max.x - A.min.x) / 2;
float b_extent = (B.max.x - B.min.x) / 2;
float x_overlap = a_extent + b_extent - abs( n.x );
if(x_overlap > 0) {
a_extent = (A.max.y - A.min.y) / 2;
b_extent = (B.max.y - B.min.y) / 2;
float y_overlap = a_extent + b_extent - abs( n.y );
if(y_overlap > 0)
{
if(x_overlap > y_overlap)
{
if(n.x < 0) {
normal.set( -1, 0 );
}
else {
normal.set( 1, 0 );
}
}
else
{
if(n.y < 0) {
normal.set( 0, -1 );
}
else{
normal.set( 0, 1 );
}
}
}
}
return normal;
}
我在一个名为制作你自己的自定义2d物理引擎的网站上找到了它。但在实施之后,它不起作用。它给了我一个奇怪的法向量,它与我期望的正常对应。例如,当右侧接触左侧时,它返回(0,-1)的法线。我的代码是正确的还是我做了一些不正确的事情?