private void UpdateCenterAxis() { Vector3d Diagonal = new Vector3d(XMax - XMin, YMax - YMin, ZMax - ZMin); Vector3d Opposite1, Opposite2; double max = MaxSize - 0.5; if (max < Diagonal.X) { // x-axis Opposite1 = new Vector3d(0, YMin + ((YMax - YMin) / 2.0), 0); Opposite2 = new Vector3d(0, 0, ZMin + ((ZMax - ZMin) / 2.0)); } else if (max < Diagonal.Y) { // y-axis Opposite1 = new Vector3d(XMin + ((XMax - XMin) / 2.0), 0, 0); Opposite2 = new Vector3d(0, 0, ZMin + ((ZMax - ZMin) / 2.0)); } else { // z-axis Opposite1 = new Vector3d(XMin + ((XMax - XMin) / 2.0), 0, 0); Opposite2 = new Vector3d(0, YMin + ((YMax - YMin) / 2.0), 0); } CenterAxis = new StraightLine(Opposite1, Opposite2 - Opposite1); }
public static double DistanceToStraightLine(this Vector3d p, StraightLine line) { return(Vector3d.Cross(p - line.Point, line.Direction).Length / line.Direction.Length); }