У меня проблема с моим кодом, из-за которой перемещающиеся агенты внезапно исчезают.Это происходит потому, что их позиции внезапно становятся 1. # INF000 по осям x и y.Я провел небольшое исследование, и кто-то сказал, что это может произойти с acos, если значение больше или меньше 1 и -1 соответственно, но потом сказал, что это может произойти, если значения тоже были близки.Я добавил оператор if, чтобы проверить, получаю ли я когда-либо acos, равный 1 или -1, и он оценивается в 1 за несколько циклов кадра, прежде чем они исчезнут, однако я не совсем понимаю проблему, чтобы иметь возможность ее исправить.,Кто-нибудь может пролить свет на этот вопрос?
D3DXVECTOR3 D3DXVECTOR3Helper::RotToTarget2DPlane(D3DXVECTOR3 position, D3DXVECTOR3 target)//XY PLANE
{
//Create std::vector to target
D3DXVECTOR3 vectorToTarget = target - position;
D3DXVec3Normalize(&vectorToTarget, &vectorToTarget);
//creates a displacement std::vector of relative 0, 0, 0
D3DXVECTOR3 neutralDirectionalVector = D3DXVECTOR3(1, 0, 0);//set this to whatever direction your models are loaded facing
//Create the angle between them
if(D3DXVec3Dot(&vectorToTarget, &neutralDirectionalVector) >= 1.0f ||D3DXVec3Dot(&vectorToTarget, &neutralDirectionalVector) <= -1.0f)
{
float i = D3DXVec3Dot(&vectorToTarget, &neutralDirectionalVector);
float j = 0; //ADDED THIS IF STATEMENT
}
float angle = acos(D3DXVec3Dot(&vectorToTarget, &neutralDirectionalVector));
if (target.y > position.y)
{
return D3DXVECTOR3(0, 0, angle);
}
else
{
return D3DXVECTOR3(0, 0, -angle);
}
}//end VecRotateToTarget2DPlane()