0

Vector3 クラス内に get_angle 関数を作成しましたが、問題があります。

Y 角度は問題ありません。

返されるピッチ角 (X) は、ベース ベクトルがその上にある場合 (および反対の場合)、目的の位置をわずかに上回ります。

ズレる量は身長差による。

Angle get_angle(const Vector3f& v) const { 
    return Angle(
        math::rad_to_deg(atan2(get_distance(v), v.z - z)) - 90.0f, 
        math::rad_to_deg(atan2(v.y - y, v.x - x)), 
        0.0f); 
}

ここで悪いのはおそらく私の数学です。

4

2 に答える 2

0

正確に何を計算しようとしていますか?あなたの「Angle」クラスは何を表していますか? 私はあなたがしたいことを推測します:

  1. 2 つのベクトル間の角度、つまり単一のスカラー値を計算します。式は、ここで として見つけることができますcos(theta) == dot(*this, v) / (norm() * v.norm())https://math.stackexchange.com/questions/974178/how-to-calculate-the-angle-between-2-vectors-in-3d-space-given-a-preset-function

  2. または、両方のベクトルを球面座標 (ファイ、シータ) に変換し、ファイとシータごとにデルタを計算します。つまり、2 つの角度を計算します。デカルト座標から球座標への変換式は、https: //en.wikipedia.org/wiki/Spherical_coordinate_system#Cartesian_coordinatesにあります。

于 2016-09-01T21:40:39.070 に答える