public IntFactor GetCosineAngle(Int3 dest, out int edgeIndex)
        {
            Int3 vInt  = this.v1 - this.v0;
            Int3 vInt2 = this.v2 - this.v0;
            Int3 vInt3 = dest - this.v0;

            vInt3.NormalizeTo(1000);
            vInt.NormalizeTo(1000);
            vInt2.NormalizeTo(1000);
            long      num    = Int3.DotXZLong(ref vInt3, ref vInt);
            long      num2   = Int3.DotXZLong(ref vInt3, ref vInt2);
            IntFactor result = default(IntFactor);

            result.denominator = 1000000L;
            if (num > num2)
            {
                edgeIndex        = this.vi;
                result.numerator = num;
            }
            else
            {
                edgeIndex        = (this.vi + 2) % 3;
                result.numerator = num2;
            }
            return(result);
        }
Beispiel #2
0
        public VFactor GetCosineAngle(Int3 dest, out int edgeIndex)
        {
            Int3 rhs  = v1 - v0;
            Int3 num2 = v2 - v0;
            Int3 lhs  = dest - v0;

            lhs.NormalizeTo(1000);
            rhs.NormalizeTo(1000);
            num2.NormalizeTo(1000);
            long    num4   = Int3.DotXZLong(ref lhs, ref rhs);
            long    num5   = Int3.DotXZLong(ref lhs, ref num2);
            VFactor factor = new VFactor();

            factor.den = 0xf4240L;
            if (num4 > num5)
            {
                edgeIndex  = vi;
                factor.nom = num4;
                return(factor);
            }
            edgeIndex  = (vi + 2) % 3;
            factor.nom = num5;
            return(factor);
        }