Console.WriteLine("Rytz's construction example")
Dim circle As Circle3d = New Circle3d(New Point3d(2, 3, -1), 5, New Vector3d(1, 1, 1))
Dim plane As Plane3d = New Plane3d(New Point3d(-1, -5, 0), New Vector3d(3, 0, 1))
Dim d1 As Point3d = circle.ParametricForm(0)
Dim d2 As Point3d = circle.ParametricForm(Math.PI / 2)
Dim C As Point3d = circle.Center.ProjectionTo(plane)
Dim P As Point3d = d1.ProjectionTo(plane)
Dim Q As Point3d = d2.ProjectionTo(plane)
Dim r As Rotation = New Rotation(plane.Normal, Math.PI / 2)
Dim P_prime As Point3d = P.Rotate(r, C)
Dim D As Point3d = (P_prime + Q) / 2
Dim radius As Double = D.DistanceTo(C)
Dim circle_DC As Circle3d = New Circle3d(D, radius, plane.Normal)
Dim line As Line3d = New Line3d(P_prime, Q)
Dim AB As Segment3d = CType(line.IntersectionWith(circle_DC), Segment3d)
Dim semi_axis_a As Double = Q.DistanceTo(A)
Dim semi_axis_b As Double = Q.DistanceTo(B)
Dim vec_CA As Vector3d = New Vector3d(C, A)
Dim vec_CB As Vector3d = New Vector3d(C, B)
vec_CA = semi_axis_b * vec_CA.Normalized
vec_CB = semi_axis_a * vec_CB.Normalized
Dim My_Ellipse As Ellipse = New Ellipse(C, vec_CA, vec_CB)
If (My_Ellipse = circle.ProjectionTo(plane)) Then
Console.WriteLine("Your construction is correct!")
Console.WriteLine(My_Ellipse.ToString())