public static void Main()
Console.WriteLine("Mascheroni Construction of a Regular Pentagon");
Point3d A = new Point3d(0, 0, 0);
Point3d B = new Point3d(5, 0, 0);
Circle3d C1 = new Circle3d(A, A.DistanceTo(B), new Vector3d(0, 0, 1));
Circle3d C2 = new Circle3d(B, A.DistanceTo(B), new Vector3d(0, 0, 1));
Segment3d segment = (Segment3d)C1.IntersectionWith(C2);
Circle3d C3 = new Circle3d(C, C.DistanceTo(D), new Vector3d(0, 0, 1));
segment = (Segment3d)C3.IntersectionWith(C1);
segment = (Segment3d)C3.IntersectionWith(C2);
Circle3d C4 = new Circle3d(A, A.DistanceTo(F), new Vector3d(0, 0, 1));
Circle3d C5 = new Circle3d(B, B.DistanceTo(E), new Vector3d(0, 0, 1));
segment = (Segment3d)C4.IntersectionWith(C5);
Point3d G = new Point3d();
Point3d H = new Point3d();
if (segment.P1.DistanceTo(D) < segment.P2.DistanceTo(D))
Circle3d C6 = new Circle3d(G, G.DistanceTo(C), new Vector3d(0, 0, 1));
segment = (Segment3d)C6.IntersectionWith(C3);
Point3d I = new Point3d();
Point3d J = new Point3d();
if (segment.P1.DistanceTo(A) < segment.P1.DistanceTo(B))
Circle3d C7 = new Circle3d(H, H.DistanceTo(C), new Vector3d(0, 0, 1));
segment = (Segment3d)C7.IntersectionWith(C3);
Point3d K = new Point3d();
Point3d L = new Point3d();
if (segment.P1.DistanceTo(I) < segment.P1.DistanceTo(J))
double angle1 = new Vector3d(D, I).AngleToDeg(new Vector3d(D, J));
double angle2 = new Vector3d(I, D).AngleToDeg(new Vector3d(I, K));
double angle3 = new Vector3d(K, I).AngleToDeg(new Vector3d(K, L));
double angle4 = new Vector3d(L, K).AngleToDeg(new Vector3d(L, J));
double angle5 = new Vector3d(J, L).AngleToDeg(new Vector3d(J, D));
if (Math.Abs(angle1 - 108.0) < tolerance &&
Math.Abs(angle2 - 108.0) < tolerance &&
Math.Abs(angle3 - 108.0) < tolerance &&
Math.Abs(angle4 - 108.0) < tolerance &&
Math.Abs(angle5 - 108.0) < tolerance)
Console.WriteLine("Your construction is correct!");
Console.WriteLine(D.ToString());
Console.WriteLine(I.ToString());
Console.WriteLine(K.ToString());
Console.WriteLine(L.ToString());
Console.WriteLine(J.ToString());