所以我目前正在嘗試創建一些方法,當模擬車輛位置、方向和物件位置時,將確定物件是否位于該車輛方向的右側或左側。這是我到目前為止所實作的(注意我在二維坐標系統中):
這是使用該方法的代碼塊
void Class::leftOrRight()
{
// Clearing both _lhsCones and _rhsCones vectors
_rhsCones.clear();
_lhsCones.clear();
for (int i =0; i < _cones.size(); i )
{
if (dotAngleFromYaw(_x, _y, _cones[i].x(), _cones[i].y(), _yaw) > 0)
{
_lhsCones.push_back(_cones[i]);
}
else
{
_rhsCones.push_back(_cones[i]);
}
}
return;
}
這是計算角度的代碼塊
double Class::dotAngleFromYaw(double xCar, double yCar, double xCone, double yCone, double yawCar)
{
double iOne = cos(yawCar);
double jOne = sin(yawCar);
double iTwo = xCone - xCar;
double jTwo = yCone - yCar;
//ensure to normalise the vector two
double magTwo = std::sqrt(std::pow(iTwo, 2) std::pow(jTwo, 2));
iTwo = iTwo / magTwo;
jTwo = jTwo / magTwo;
double theta = acos((iOne * iTwo) (jOne * jTwo)); // in radians
return theta;
}
我的問題是 dotAngleFromYaw(0,0,0,1,0) = pi/2 和 dotAngleFromYaw(0,0,0,-1,0) = pi/2 因此 if 陳述句無法對錐體。
任何幫助都會很棒
uj5u.com熱心網友回復:
請注意,點積不提供有關左/右位置的資訊。
點積的符號表示位置是向前還是向后。
要獲得左側/右側,您需要檢查
uj5u.com熱心網友回復:
如果角度無關緊要,而您只想知道“左還是右”,我會采用另一種方法。設定一個在其表面上具有xCar
和yCar
的平面。設定它時,如何定義平面的法線(即其面向的一側)由您決定。
之后,您可以應用點積來確定指示它在哪一側的“標志”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472575.html
上一篇:如何允許用戶輸入一個或兩個輸入?
下一篇:頂點未在opengl中讀取