public static Matrix3D ProjectOnPlane(Matrix3D projectToWorld, Plane3D plane) { var matrix3D = projectToWorld; var num1 = plane.A * matrix3D.M11 + plane.B * matrix3D.M12 + plane.C * matrix3D.M13 - plane.D * matrix3D.M14; var num2 = plane.A * matrix3D.M21 + plane.B * matrix3D.M22 + plane.C * matrix3D.M23 - plane.D * matrix3D.M24; var num3 = plane.A * matrix3D.M31 + plane.B * matrix3D.M32 + plane.C * matrix3D.M33 - plane.D * matrix3D.M34; var num4 = plane.A * matrix3D.OffsetX + plane.B * matrix3D.OffsetY + plane.C * matrix3D.OffsetZ - plane.D * matrix3D.M44; if (num3 == 0.0) { throw new InvalidOperationException(); } var num5 = -1.0 / num3; return(new Matrix3D(1.0, 0.0, num1 * num5, 0.0, 0.0, 1.0, num2 * num5, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, num4 * num5, 1.0) * projectToWorld); }
public static Point3D IntersectLineToPlane( Point3D linePoint1, Point3D linePoint2, Plane3D plane) { var point = Subtract(linePoint2, linePoint1); var num1 = plane.D - plane.A * linePoint1.X - plane.B * linePoint1.Y - plane.C * linePoint1.Z; var num2 = plane.A * point.X + plane.B * point.Y + plane.C * point.Z; if (num2 == 0.0) { throw new InvalidOperationException(); } var scalar = num1 / num2; return(Add(linePoint1, Multiply(point, scalar))); }