Exemplo n.º 1
0
        public Coordinate Rotate(Coordinate coord)
        {
            // http://content.gpwiki.org/index.php/OpenGL:Tutorials:Using_Quaternions_to_represent_rotation
            var q    = new Quaternion(coord.Normalise(), 0);
            var temp = q * Conjugate();

            return((this * temp).Vector);
        }
Exemplo n.º 2
0
 public Vector(Coordinate normal, decimal distance)
     : base(0, 0, 0)
 {
     Normal = normal.Normalise();
     Distance = distance;
     var temp = Normal * Distance;
     X = temp.X;
     Y = temp.Y;
     Z = temp.Z;
 }
Exemplo n.º 3
0
        public Plane(Coordinate norm, decimal distanceFromOrigin)
        {
            Normal             = norm.Normalise();
            DistanceFromOrigin = distanceFromOrigin;
            PointOnPlane       = Normal * DistanceFromOrigin;

            A = Normal.X;
            B = Normal.Y;
            C = Normal.Z;
            D = -DistanceFromOrigin;
        }
Exemplo n.º 4
0
        public Plane(Coordinate norm, Coordinate pointOnPlane)
        {
            Normal             = norm.Normalise();
            DistanceFromOrigin = Normal.Dot(pointOnPlane);
            PointOnPlane       = pointOnPlane;

            A = Normal.X;
            B = Normal.Y;
            C = Normal.Z;
            D = -DistanceFromOrigin;
        }
Exemplo n.º 5
0
        public Plane(Coordinate norm, decimal distanceFromOrigin)
        {
            Normal = norm.Normalise();
            DistanceFromOrigin = distanceFromOrigin;
            PointOnPlane = Normal * DistanceFromOrigin;

            A = Normal.X;
            B = Normal.Y;
            C = Normal.Z;
            D = -DistanceFromOrigin;
        }
Exemplo n.º 6
0
        public Plane(Coordinate norm, Coordinate pointOnPlane)
        {
            Normal = norm.Normalise();
            DistanceFromOrigin = Normal.Dot(pointOnPlane);
            PointOnPlane = pointOnPlane;

            A = Normal.X;
            B = Normal.Y;
            C = Normal.Z;
            D = -DistanceFromOrigin;
        }
Exemplo n.º 7
0
        public Vector(Coordinate normal, decimal distance)
            : base(0, 0, 0)
        {
            Normal   = normal.Normalise();
            Distance = distance;
            var temp = Normal * Distance;

            X = temp.X;
            Y = temp.Y;
            Z = temp.Z;
        }
Exemplo n.º 8
0
        public static Matrix Rotation(Coordinate axis, decimal angle)
        {
            var cos = DMath.Cos(-angle);
            var sin = DMath.Sin(-angle);
            var t   = 1m - cos;

            axis = axis.Normalise();

            return(new Matrix(t * axis.X * axis.X + cos, t * axis.X * axis.Y - sin * axis.Z, t * axis.X * axis.Z + sin * axis.Y, 0,
                              t * axis.X * axis.Y + sin * axis.Z, t * axis.Y * axis.Y + cos, t * axis.Y * axis.Z - sin * axis.X, 0,
                              t * axis.X * axis.Z - sin * axis.Y, t * axis.Y * axis.Z + sin * axis.X, t * axis.Z * axis.Z + cos, 0,
                              0, 0, 0, 1));
        }
Exemplo n.º 9
0
        public static Color Tint(Coordinate sun, Coordinate normal, Color c)
        {
            var tintvar = (double)sun.Normalise().Dot(normal.Normalise());
            // tint variation = 128
            var diff = (int)(64 * (tintvar + 1));

            return Color.FromArgb(c.A, Math.Max(0, c.R - diff), Math.Max(0, c.G - diff), Math.Max(0, c.B - diff));
        }
Exemplo n.º 10
0
 public static Quaternion AxisAngle(Coordinate axis, decimal angle)
 {
     return(axis.VectorMagnitude() == 0
                ? Identity
                : new Quaternion(axis.Normalise() * DMath.Sin(angle / 2), DMath.Cos(angle / 2)).Normalise());
 }
Exemplo n.º 11
0
        public static Matrix Rotation(Coordinate axis, decimal angle)
        {
            var cos = DMath.Cos(-angle);
            var sin = DMath.Sin(-angle);
            var t = 1m - cos;
            axis = axis.Normalise();

            return new Matrix(t * axis.X * axis.X + cos, t * axis.X * axis.Y - sin * axis.Z, t * axis.X * axis.Z + sin * axis.Y, 0,
                              t * axis.X * axis.Y + sin * axis.Z, t * axis.Y * axis.Y + cos, t * axis.Y * axis.Z - sin * axis.X, 0,
                              t * axis.X * axis.Z - sin * axis.Y, t * axis.Y * axis.Z + sin * axis.X, t * axis.Z * axis.Z + cos, 0,
                              0, 0, 0, 1);
        }
Exemplo n.º 12
0
 public Coordinate Rotate(Coordinate coord)
 {
     // http://content.gpwiki.org/index.php/OpenGL:Tutorials:Using_Quaternions_to_represent_rotation
     var q = new Quaternion(coord.Normalise(), 0);
     var temp = q * Conjugate();
     return (this * temp).Vector;
 }
Exemplo n.º 13
0
 public static Quaternion AxisAngle(Coordinate axis, decimal angle)
 {
     return axis.VectorMagnitude() == 0
                ? Identity
                : new Quaternion(axis.Normalise() * DMath.Sin(angle / 2), DMath.Cos(angle / 2)).Normalise();
 }