public static void RotateOverStreight(Polyhedron ph, Point3d a, Point3d b, double phi) { double m = b.X - a.X; double n = b.Y - a.Y; double p = b.Z - a.Z; double s = Math.Sqrt(m * m + n * n); double d = Math.Sqrt(m * m + n * n + p * p); AffineMatrix m0; if (Math.Abs(s) < 1e-6) { AffineMatrix m1 = AffineMatrix.CreateTranslationMatrix(-a.X, -a.Y, -a.Z); AffineMatrix m4 = AffineMatrix.CreateZaxisRotationMatrix(phi); AffineMatrix m7 = AffineMatrix.CreateTranslationMatrix(a.X, a.Y, a.Z); m0 = m7 * m4 * m1; } else { AffineMatrix m1 = AffineMatrix.CreateTranslationMatrix(-a.X, -a.Y, -a.Z); AffineMatrix m2 = AffineMatrix.CreateZaxisRotationMatrix(n / s, m / s); AffineMatrix m3 = AffineMatrix.CreateXaxisRotationMatrix(p / d, s / d); AffineMatrix m4 = AffineMatrix.CreateZaxisRotationMatrix(phi); AffineMatrix m5 = AffineMatrix.CreateXaxisRotationMatrix(p / d, -s / d); AffineMatrix m6 = AffineMatrix.CreateZaxisRotationMatrix(n / s, -m / s); AffineMatrix m7 = AffineMatrix.CreateTranslationMatrix(a.X, a.Y, a.Z); m0 = m7 * m6 * m5 * m4 * m3 * m2 * m1; } Execute(ph, m0); }
public static void RotateOverCenter(Polyhedron ph, char axis, double phi) { Point3d p = ph.Center.Clone() as Point3d; AffineMatrix m1 = AffineMatrix.CreateTranslationMatrix(-p.X, -p.Y, -p.Z); AffineMatrix m2; switch (axis) { case 'x': case 'X': m2 = AffineMatrix.CreateXaxisRotationMatrix(phi); break; case 'y': case 'Y': m2 = AffineMatrix.CreateYaxisRotationMatrix(phi); break; case 'z': case 'Z': m2 = AffineMatrix.CreateZaxisRotationMatrix(phi); break; default: throw new Exception("Wrong char in rotation over center!"); } AffineMatrix m3 = AffineMatrix.CreateTranslationMatrix(p.X, p.Y, p.Z); AffineMatrix m = m3 * m2 * m1; Execute(ph, m); }
public static void ScaleOverCenter(Polyhedron ph, double a) { Point3d p = ph.Center.Clone() as Point3d; AffineMatrix m1 = AffineMatrix.CreateTranslationMatrix(-p.X, -p.Y, -p.Z); AffineMatrix m2 = AffineMatrix.CreateScaleMatrix(a, a, a); AffineMatrix m3 = AffineMatrix.CreateTranslationMatrix(p.X, p.Y, p.Z); AffineMatrix m = m3 * m2 * m1; Execute(ph, m); }
public static void Translate(Polyhedron ph, Point3d a) { AffineMatrix m = AffineMatrix.CreateTranslationMatrix(a.X, a.Y, a.Z); Execute(ph, m); }