Ejemplo n.º 1
0
 public void Translate(Vector3D translationVector)
 {
     for (int i = 0; i < this.vertices.Count; i++)
     {
         this.vertices[i] += translationVector;
     }
 }
Ejemplo n.º 2
0
        public static Vector3D CrossProduct(Vector3D a, Vector3D b)
        {
            double crossX = a.Y * b.Z - a.Z * b.Y;
            double crossY = a.Z * b.X - a.X * b.Z;
            double crossZ = a.X * b.Y - a.Y * b.X;

            return new Vector3D(crossX, crossY, crossZ);
        }
Ejemplo n.º 3
0
        public static double DotProduct(Vector3D a, Vector3D b)
        {
            double result = 0;
            for (int d = 0; d < 3; d++)
            {
                result += a[d] * b[d];
            }

            return result;
        }
Ejemplo n.º 4
0
        public Vector3D GetNormal()
        {
            Vector3D center = this.GetCenter();
            Vector3D A = new Vector3D(center.X + this.Radius, center.Y, center.Z),
                B = new Vector3D(center.X, center.Y + this.Radius, center.Z);

            Vector3D normal = Vector3D.CrossProduct(center - A, center - B);
            normal.Normalize();
            return normal;
        }
Ejemplo n.º 5
0
        public void Scale(Vector3D scaleCenter, double scaleFactor)
        {
            for (int i = 0; i < this.vertices.Count; i++)
            {
                Vector3D centeredCurrent = this.vertices[i] - scaleCenter;

                Vector3D scaledCenteredCurrent = centeredCurrent * scaleFactor;

                this.vertices[i] = scaledCenteredCurrent + scaleCenter;
            }
        }
Ejemplo n.º 6
0
        public virtual Vector3D GetCenter()
        {
            Vector3D verticesSum = new Vector3D(0, 0, 0);

            for (int i = 0; i < this.vertices.Count; i++)
            {
                verticesSum += this.vertices[i];
            }

            return verticesSum / this.vertices.Count;
        }
Ejemplo n.º 7
0
        public Vector3D GetNormal()
        {
            // use the logic from triangle
            // get 3 points on the circle and use the formula from the Triangle class
            Vector3D firstPointOnCircle = new Vector3D(this.Center.X + this.Radius, this.Center.Y, this.Center.Z);
            Vector3D secondPointOnCircle = new Vector3D(this.Center.X - this.Radius, this.Center.Y, this.Center.Z);
            Vector3D thirdPointOnCircle = new Vector3D(this.Center.X, this.Center.Y - this.Radius, this.Center.Z);

            Vector3D normal = Vector3D.CrossProduct(secondPointOnCircle - firstPointOnCircle, thirdPointOnCircle - firstPointOnCircle);
            normal.Normalize();
            return normal;
        }
Ejemplo n.º 8
0
        public void RotateInXY(Vector3D rotCenter, double angleDegrees)
        {
            for (int i = 0; i < this.vertices.Count; i++)
            {
                Vector3D centeredCurrent = this.vertices[i] - rotCenter;

                double angleRads = angleDegrees * Math.PI / 180.0;

                Vector3D rotatedCenteredCurrent = new Vector3D(
                    centeredCurrent.X * Math.Cos(angleRads) - centeredCurrent.Y * Math.Sin(angleRads),
                    centeredCurrent.X * Math.Sin(angleRads) + centeredCurrent.Y * Math.Cos(angleRads),
                    centeredCurrent.Z);

                this.vertices[i] = rotatedCenteredCurrent + rotCenter;
            }
        }
Ejemplo n.º 9
0
 public Vertex(Vector3D location)
     : base(location)
 {
 }
Ejemplo n.º 10
0
 public Cylinder(Vector3D top, Vector3D bottom, double radius)
     : base(top, bottom)
 {
     this.Radius = radius;
 }
Ejemplo n.º 11
0
 public static double GetAngleDegrees(Vector3D a, Vector3D b)
 {
     return Math.Acos(Vector3D.DotProduct(a, b) / a.Magnitude * b.Magnitude);
 }
Ejemplo n.º 12
0
 public Triangle(Vector3D a, Vector3D b, Vector3D c)
     : base(a, b, c)
 {
 }
Ejemplo n.º 13
0
 public LineSegment(Vector3D a, Vector3D b)
     : base(a, b)
 {
     this.length = (this.A - this.B).Magnitude;
 }
Ejemplo n.º 14
0
 public new void Scale(Vector3D scaleCenter, double scaleFactor)
 {
 }
Ejemplo n.º 15
0
 public Cylinder(Vector3D bottom, Vector3D top, double radius)
     : base(bottom, top)
 {
     this.radius = radius;
 }
Ejemplo n.º 16
0
 public Circle(Vector3D center, double radius)
     : base(center)
 {
     this.radius = radius;
 }
Ejemplo n.º 17
0
 public Circle(Vector3D location, double radius)
     : base(location)
 {
     this.Radius = radius;
 }
Ejemplo n.º 18
0
 public Cylinder(double radius, Vector3D bottomCenter, Vector3D topCenter)
     : base(bottomCenter, topCenter)
 {
     this.Radius = radius;
     this.height = this.CalculateCylinderHeight();
 }
Ejemplo n.º 19
0
 public Circle(double radius, Vector3D center)
     : base(center)
 {
     this.Radius = radius;
 }
Ejemplo n.º 20
0
 public Cylinder(Vector3D bottomCenter,Vector3D topCenter,double radius)
     : base(topCenter,bottomCenter)
 {
     this.Radius = radius;
 }