コード例 #1
0
        public static Vertex3D GetRotatedAxis(float angle, Vertex3D axis, Vertex3D temp)
        {
            var u = axis.Clone().Normalize();

            var sinAngle         = MathF.Sin((float)(System.Math.PI / 180.0) * angle);
            var cosAngle         = MathF.Cos((float)(System.Math.PI / 180.0) * angle);
            var oneMinusCosAngle = 1.0f - cosAngle;

            var rotMatrixRow0 = new Vertex3D();
            var rotMatrixRow1 = new Vertex3D();
            var rotMatrixRow2 = new Vertex3D();

            rotMatrixRow0.X = u.X * u.X + cosAngle * (1.0f - u.X * u.X);
            rotMatrixRow0.Y = u.X * u.Y * oneMinusCosAngle - sinAngle * u.Z;
            rotMatrixRow0.Z = u.X * u.Z * oneMinusCosAngle + sinAngle * u.Y;

            rotMatrixRow1.X = u.X * u.Y * oneMinusCosAngle + sinAngle * u.Z;
            rotMatrixRow1.Y = u.Y * u.Y + cosAngle * (1.0f - u.Y * u.Y);
            rotMatrixRow1.Z = u.Y * u.Z * oneMinusCosAngle - sinAngle * u.X;

            rotMatrixRow2.X = u.X * u.Z * oneMinusCosAngle - sinAngle * u.Y;
            rotMatrixRow2.Y = u.Y * u.Z * oneMinusCosAngle + sinAngle * u.X;
            rotMatrixRow2.Z = u.Z * u.Z + cosAngle * (1.0f - u.Z * u.Z);

            return(new Vertex3D(temp.Dot(rotMatrixRow0), temp.Dot(rotMatrixRow1), temp.Dot(rotMatrixRow2)));
        }
コード例 #2
0
        private static bool FlatWithAccuracy3(Vertex3D v1, Vertex3D v2, Vertex3D vMid, float accuracy)
        {
            // compute the square of double the signed area of the triangle (v1, vMid, v2)
            var cross  = vMid.Clone().Sub(v1).Cross(v2.Clone().Sub(v1));
            var areaSq = cross.LengthSq();

            return(areaSq < accuracy);
        }
コード例 #3
0
 internal CatmullCurve3D(Vertex3D v0, Vertex3D v1, Vertex3D v2, Vertex3D v3)
 {
     var(dt0, dt1, dt2) = Clamp(
         MathF.Sqrt(v1.Clone().Sub(v0).Length()),
         MathF.Sqrt(v2.Clone().Sub(v1).Length()),
         MathF.Sqrt(v3.Clone().Sub(v2).Length())
         );
     _c.X = InitNonuniformCatmullCoeffs(v0.X, v1.X, v2.X, v3.X, dt0, dt1, dt2);
     _c.Y = InitNonuniformCatmullCoeffs(v0.Y, v1.Y, v2.Y, v3.Y, dt0, dt1, dt2);
     _c.Z = InitNonuniformCatmullCoeffs(v0.Z, v1.Z, v2.Z, v3.Z, dt0, dt1, dt2);
 }