質問

ちょっとみんな。私は2つのベクトル間の角度を計算していますが、時々Math.Acos()は、コサインの入力が範囲外(-1> input && input> 1)が範囲外(-1>入力> 1)を返します。それは正確にどういう意味ですか?誰かが何が起こっているのかを説明できるでしょうか?どんな助けも感謝します!

これが私の方法です:

 public double AngleBetween(vector b)
    {
        var dotProd = this.Dot(b);
        var lenProd = this.Len*b.Len;
        var divOperation = dotProd/lenProd;

        //  http://msdn.microsoft.com/en-us/library/system.math.acos.aspx
        return Math.Acos(divOperation) * (180.0 / Math.PI);
    }

これが私の実装です DotLen:

public double Dot(vector b)
    {
        // x's and y's are lattitudes and longitudes (respectively)
        return ( this.From.x*b.From.x + this.From.y*b.From.y);
    }

    public double Len{
        get
        {
             // geo is of type SqlGeography (MS SQL 2008 Spatial Type) with an SRID of 4326
             return geo.STLength().Value;
        }
    }
役に立ちましたか?

解決

あなたはそのためのベクトルを持っています divOperation <-1または> 1であることが判明しましたか?その後、実装を確認する必要があると思います DotLen.

他のヒント

角度のcosは常に-1から+1の間であるため、その範囲外の値の逆関数(ACOS)を計算する方法はありません。または、NANをACOS関数に渡したことを意味します。

この場合、それは後者だと思います - あなたの長さの1つはおそらくゼロです。

ナンは「数ではない」という意味です. 。数学的には、範囲の外側にある数字のアークコシンを服用することはできません[-1、1](またはできるかもしれませんが、結果は複雑です - 私は覚えていません)。まったく数ではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top