public void Translate(Vector3D translationVector) { for (int i = 0; i < this.vertices.Count; i++) { this.vertices[i] += translationVector; } }
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); }
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; } }
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; }
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; } }
public Circle(Vector3D center, double radius) : base(center) { this.Radius = radius; }
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; }
public static double GetAngleDegrees(Vector3D a, Vector3D b) { return Math.Acos(Vector3D.DotProduct(a, b) / a.Magnitude * b.Magnitude); }
public Cylinder(Vector3D top, Vector3D bottom, double radius) : base(top, bottom) { this.Radius = radius; }
public Triangle(Vector3D a, Vector3D b, Vector3D c) : base(a, b, c) { }