Ejemplo n.º 1
0
        public Rotation(double Angle, Point3D Axis)
		{
            Axis.Normalize();
            mQ0 = Math.Cos(Angle / 2.0);
            Axis.Scale(Math.Sin(Angle / 2.0));
            mQX = Axis.X;
            mQY = Axis.Y;
            mQZ = Axis.Z;
            Normalize();
		}
Ejemplo n.º 2
0
        private Point2D coordsInFundDomain(Point3D p)
        {
            //want baricentric coords (u,v) st. B + u*(A-B) + v*(C-B) = p'
            //where p' is p projected to X=1.0 plane.
            p.Scale(1.0 / p.X);

            Point3D A = domainCorner(0);
            Point3D B = domainCorner(1);
            Point3D C = domainCorner(2);

            Point2D v0 = new Point2D(A.Y - B.Y, A.Z - B.Z);
            Point2D v1 = new Point2D(C.Y - B.Y, C.Z - B.Z);
            Point2D v2 = new Point2D(p.Y - B.Y, p.Z - B.Z);

            double dot00 = Point2D.Dot(v0, v0);
            double dot01 = Point2D.Dot(v0, v1);
            double dot02 = Point2D.Dot(v0, v2);
            double dot11 = Point2D.Dot(v1, v1);
            double dot12 = Point2D.Dot(v1, v2);

            double invDenom = 1.0 / (dot00 * dot11 - dot01 * dot01);
            return new Point2D( (dot11 * dot02 - dot01 * dot12) * invDenom,
                                (dot00 * dot12 - dot01 * dot02) * invDenom);
        }