Diagram description: The diagram contains points A, B, C, D, E, F, G, H. There is an obtuse triangle ABC. There is a line segment AD. There is a line segment BE. There is a line segment FG. Line AD is an altitude of triangle ABC from vertex A. Line BE is a median of triangle ABC from vertex B. Lines AD and BE intersect at point H. Line FG is the perpendicular bisector of line BE, intersecting it at point E. Further, length of line AD is equal to length of line BE. Further, angle BAD is 30 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H"])

triangleABC = scene.add.obtuse_triangle(A, B, C)
line_altitude = scene.add.line_segment(A, D)
line_median = scene.add.line_segment(B, E)
line_perp_bisector = scene.add.line_segment(F, G)

### relationships

scene.relate.is_altitude(line_altitude, triangleABC, A)
scene.relate.is_median(line_median, triangleABC, B)
scene.relate.lines_intersect_at(line_altitude, line_median, H)
scene.relate.perpendicular_bisector_at(line_median, line_perp_bisector, E)

### Extra relationships

scene.constraint.eq(line_altitude.length, line_median.length)
scene.constraint.eq(scene.angle(scene.get_object('B'), scene.get_object('A'), scene.get_object('D')), 30)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F, G, H. There is a triangle with vertices A, B, and C. There is a line segment AD. There is a line segment BE. There is a line segment FG. Line AD is an altitude of triangle ABC from vertex A. The extensions of line AD and line BE intersect at point H. Further, length of line AD is equal to length of line BE and angle BAD is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H"])

triangleABC = scene.add.triangle(A, B, C)
line_altitude = scene.add.line_segment(A, D)
line_median = scene.add.line_segment(B, E)
line_perp_bisector = scene.add.line_segment(F, G)

### relationships

scene.relate.is_altitude(line_altitude, triangleABC, A)
scene.relate.line_extensions_intersect_at(line_altitude, line_median, H)

### Extra relationships

scene.constraint.eq(line_altitude.length, line_median.length)
scene.constraint.eq(scene.angle(scene.get_object('B'), scene.get_object('A'), scene.get_object('D')), 90)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D. There is a quadrilateral with vertices A, B, C, D. There is a line segment AC. There is a line segment BD. There is a line segment AB. Line AB is parallel to line AC. Line AC is perpendicular to line BD.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D = scene.add.points(["A", "B", "C", "D"])

quadrilateral1 = scene.add.quadrilateral(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_AB = scene.add.line_segment(A, B)

### relationships

scene.relate.parallel(line_AB, line_AC)
scene.relate.perpendicular(line_AC, line_BD)

scene.solver.numerical()
scene.plot()

parallel(line_AB, line_AC)
perpendicular(line_AC, line_BD)


Diagram description: The diagram contains points A, B, C, D, E. There is a circle with center A. There are line segments BC and DE. The extension of line BC intersects the circle at points B and C. Line BC is perpendicular to line DE. Further, the length of line BC is equal to the length of line DE and the angle BAC is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

circle1 = scene.add.circle(A)
line_seg1 = scene.add.line_segment(B, C)
line_seg2 = scene.add.line_segment(D, E)

### relationships

scene.relate.line_extension_intersects_circle_at(line_seg1, circle1, B, C)
scene.relate.perpendicular(line_seg1, line_seg2)

### Extra relationships

scene.constraint.eq(line_seg1.length, line_seg2.length)
scene.constraint.eq(scene.angle(scene.get_object('B'), scene.get_object('A'), scene.get_object('C')), 90)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E. There is a kite ABCD. There is a line AC. There is a line BD. There is a line BE. Line AC is perpendicular to line BD. Line BE is the angle bisector of angle ABD. Further, length of line AC is equal to length of line BD. Further, angle ABD is 45 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

kite1 = scene.add.kite(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_angle_bisector = scene.add.line_segment(B, E)

### relationships

scene.relate.perpendicular(line_AC, line_BD)
scene.relate.angle_bisector(A, B, D, line_angle_bisector)

### Extra relationships

scene.constraint.eq(line_AC.length, line_BD.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('B'), scene.get_object('D')), 45)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E. There is a circle with center A. There is a line segment BD. There is a line segment AC. There is a line segment ED. Line BD is a diameter of the circle. Angle EAC is acute.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_ED = scene.add.line_segment(E, D)

### relationships

scene.relate.is_diameter(line_BD, circle1)
scene.relate.acute_angle(E, A, C)

scene.solver.numerical()
scene.plot()

is_diameter(line_BD, circle1)
acute_angle(E, A, C)


Diagram description: The diagram contains points A, B, C, D. There is a rectangle with points A, B, C, D. There are line segments AC and BD. Line AC is perpendicular to line BD. Further, length of line AC is equal to length of line BD and angle ABC is a right angle.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D = scene.add.points(["A", "B", "C", "D"])

rectangle1 = scene.add.rectangle(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)

### relationships

scene.relate.perpendicular(line_AC, line_BD)

### Extra relationships

scene.constraint.eq(line_AC.length, line_BD.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('B'), scene.get_object('C')), 90)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E. There is a minor arc BC with center A. There is a line segment AD. There is a line segment BE. There is a line segment CE. Angle DAB is bisected by line AD. Point E lies on the minor arc BC. Further, length of line AD is equal to length of line BE and angle ABC is 60 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

arc1 = scene.add.minor_arc(A, B, C)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)
line_CE = scene.add.line_segment(C, E)

### relationships

scene.relate.angle_bisector(D, A, B, line_AD)
scene.relate.point_lies_on(E, arc1)

### Extra relationships

scene.constraint.eq(line_AD.length, line_BE.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('B'), scene.get_object('C')), 60)

scene.solver.numerical()
scene.plot()

angle_bisector(D, A, B, line_AD)
point_lies_on(E, arc1)


Diagram description: The diagram contains points A, B, C, D. There is an isosceles trapezoid ABCD. There is a line CD. Trapezoid ABCD is a mirror image of itself across line CD.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D = scene.add.points(["A", "B", "C", "D"])

trapezoid1 = scene.add.isosceles_trapezoid(A, B, C, D)
line_m = scene.add.line(C, D)

### relationships

scene.relate.mirror_across_line(trapezoid1, trapezoid1, line_m)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F, G. There is a kite with points A, B, C, D. There is a line segment AC. There is a line segment BD. There is a line segment EG. Line AC intersects line BD at point F. Line AC is perpendicular to line BD. Further, the length of line AC is equal to the length of line BD and the area of the kite is 12 square units.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

kite1 = scene.add.kite(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_EG = scene.add.line_segment(E, G)

### relationships

scene.relate.lines_intersect_at(line_AC, line_BD, F)
scene.relate.perpendicular(line_AC, line_BD)

### Extra relationships

scene.constraint.eq(line_AC.length, line_BD.length)
scene.constraint.eq(kite1.area, 12)

scene.solver.numerical()
scene.plot()

lines_intersect_at(line_AC, line_BD, F)
perpendicular(line_AC, line_BD)


Diagram description: The diagram contains points A, B, C, D, E, F, G, H. There is a triangle ABC. There is a line segment AD. There is a line segment BE. There is a line segment CF. There is a line segment GH. Line AD is an altitude of triangle ABC from vertex A. Line BE is congruent to line CF. Further, the length of line AD equals the length of line BE and angle ABC is 60 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H"])

triangle_ABC = scene.add.triangle(A, B, C)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)
line_CF = scene.add.line_segment(C, F)
line_GH = scene.add.line_segment(G, H)

### relationships

scene.relate.is_altitude(line_AD, triangle_ABC, A)
scene.relate.congruent(line_BE, line_CF)

### Extra relationships

scene.constraint.eq(line_AD.length, line_BE.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('B'), scene.get_object('C')), 60)

scene.solver.numerical()
scene.plot()

is_altitude(line_AD, triangle_ABC, A)
congruent(line_BE, line_CF)


Diagram description: The diagram contains points A, B, C, D. There is a circle with center A. There are line segments BD and AC. Line BD is a diameter of the circle. Angle CAB is obtuse. Further, the length of line AC equals the length of line BD and angle CAB equals 120 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D = scene.add.points(["A", "B", "C", "D"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)

### relationships

scene.relate.is_diameter(line_BD, circle1)
scene.relate.obtuse_angle(C, A, B)

### Extra relationships

scene.constraint.eq(line_AC.length, line_BD.length)
scene.constraint.eq(scene.angle(scene.get_object('C'), scene.get_object('A'), scene.get_object('B')), 120)

scene.solver.numerical()
scene.plot()

is_diameter(line_BD, circle1)
obtuse_angle(C, A, B)


Diagram description: The diagram contains points A, B, C, D, E, F. There is a square with points A, B, C, D. There is a line segment AC. There is a line segment BD. There is a line segment EF. The square is congruent to itself. Line segment AC is perpendicular to line segment BD.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

square1 = scene.add.square(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.congruent(square1, square1)
scene.relate.perpendicular(line_AC, line_BD)

scene.solver.numerical()
scene.plot()

congruent(square1, square1)
perpendicular(line_AC, line_BD)


Diagram description: The diagram contains points A, B, C, D. There is a scalene triangle ABC. There is a line segment AD. There is a line segment BC. Line AD is an altitude of triangle ABC from vertex A. Point D lies on line BC. Further, length of line AD is equal to half the length of line BC, and the angle BAD is equal to 30 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D = scene.add.points(["A", "B", "C", "D"])

triangleABC = scene.add.scalene_triangle(A, B, C)
line_altitude_from_A = scene.add.line_segment(A, D)
line_BC = scene.add.line_segment(B, C)

### relationships

scene.relate.is_altitude(line_altitude_from_A, triangleABC, A)
scene.relate.point_lies_on(D, line_BC)

### Extra relationships

scene.constraint.eq(line_altitude_from_A.length, line_BC.length / 2)
scene.constraint.eq(scene.angle(scene.get_object('B'), scene.get_object('A'), scene.get_object('D')), 30)

scene.solver.numerical()
scene.plot()

scene.constraint.eq(scene.get_object('line_altitude_from_A').length, scene.get_object('line_BC').length / 2)


Diagram description: The diagram contains points A, B, C, D. There is an isosceles trapezoid ABCD. There is a line segment AD. There is a line segment BC. There is a line segment AC. There is a line segment BD. There is a line BD. The trapezoid ABCD is similar to itself. Line AD is perpendicular to line BC.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D = scene.add.points(["A", "B", "C", "D"])

trapezoid1 = scene.add.isosceles_trapezoid(A, B, C, D)
line_AD = scene.add.line_segment(A, D)
line_BC = scene.add.line_segment(B, C)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_m = scene.add.line(B, D)

### relationships

scene.relate.similar(trapezoid1, trapezoid1)
scene.relate.perpendicular(line_AD, line_BC)

scene.solver.numerical()
scene.plot()

similar(trapezoid1, trapezoid1)
perpendicular(line_AD, line_BC)


Diagram description: The diagram contains points A, B, C, D. There is a trapezoid ABCD. There is a line segment AC. There is a line segment BD. There is a line segment AD. There is a line segment BC. The angle ADC is a right angle. Line AC is perpendicular to line BD. Further, the length of line AD equals the length of line BC and the angle ADC is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D = scene.add.points(["A", "B", "C", "D"])

trapezoid1 = scene.add.trapezoid(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_AD = scene.add.line_segment(A, D)
line_BC = scene.add.line_segment(B, C)

### relationships

scene.relate.right_angle(A, D, C)
scene.relate.perpendicular(line_AC, line_BD)

### Extra relationships

scene.constraint.eq(line_AD.length, line_BC.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('D'), scene.get_object('C')), 90)

scene.solver.numerical()
scene.plot()

right_angle(A, D, C)
perpendicular(line_AC, line_BD)


Diagram description: The diagram contains points A, B, C, D, E, F, G. There is a rectangle with vertices A, B, C, D. There is a line segment AC. There is a line segment BD. There is a line segment EF. Line segment AC intersects line segment BD at point G. Line segment AC is perpendicular to line segment BD. Further, the length of line segment AC is equal to the length of line segment BD. Further, the angle A G B is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

rectangle1 = scene.add.rectangle(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.lines_intersect_at(line_AC, line_BD, G)
scene.relate.perpendicular(line_AC, line_BD)

### Extra relationships

scene.constraint.eq(line_AC.length, line_BD.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('G'), scene.get_object('B')), 90)

scene.solver.numerical()
scene.plot()

lines_intersect_at(line_AC, line_BD, G)
perpendicular(line_AC, line_BD)


Diagram description: The diagram contains points A, B, C, D, E, F. There is a rectangle ABCD. There are line segments AC, BD, and EF. Point E lies on line AC. Line AC is perpendicular to line BD. Further, length of line AC is equal to length of line BD and angle ABC is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

rectangle1 = scene.add.rectangle(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.point_lies_on(E, line_AC)
scene.relate.perpendicular(line_AC, line_BD)

### Extra relationships

scene.constraint.eq(line_AC.length, line_BD.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('B'), scene.get_object('C')), 90)

scene.solver.numerical()
scene.plot()

point_lies_on(E, line_AC)
perpendicular(line_AC, line_BD)


Diagram description: The diagram contains points A, B, C, D, E. There is a minor arc with center A, start B, and end C. There are line segments AD and BE. Line AD is parallel to line BE. Point D lies on the minor arc. Further, the central angle of the minor arc is 90 degrees. Further, the length of line AD is less than or equal to the radius of the minor arc.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

arc1 = scene.add.minor_arc(A, B, C)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)

### relationships

scene.relate.parallel(line_AD, line_BE)
scene.relate.point_lies_on(D, arc1)

### Extra relationships

scene.constraint.eq(arc1.central_angle, 90)
scene.constraint.leq(line_AD.length, arc1.radius)

scene.solver.numerical()
scene.plot()

parallel(line_AD, line_BE)
point_lies_on(D, arc1)


Diagram description: The diagram contains points A, B, C, D, E, F, G. There is a rectangle with vertices A, B, C, D. There is a line segment AC. There is a line segment BD. There is a line segment EF. G is the centroid of the rectangle. Line AC is perpendicular to line BD. Further, length of line AC is equal to length of line BD and the angle at G between points A and B is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

rectangle1 = scene.add.rectangle(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line BD = scene.add.line_segment(B, D)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.is_centroid(G, rectangle1)
scene.relate.perpendicular(line_AC, line BD)

### Extra relationships

scene.constraint.eq(line_AC.length, 'line BD'.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('G'), scene.get_object('B')), 90)

scene.solver.numerical()
scene.plot()

is_centroid(G, rectangle1)
perpendicular(line_AC, line BD)


Diagram description: The diagram contains points A, B, C, D, E, F, G, H. There is a triangle with points A, B, C. There is a line segment AD. There is a line segment BE. There is a line segment CF. There is a line segment GH. Line AD is an altitude of triangle ABC from vertex A. Line BE is parallel to line CF. Further, the length of line BE is equal to the length of line CF. Further, angle BAC is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H"])

triangle_ABC = scene.add.triangle(A, B, C)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)
line_CF = scene.add.line_segment(C, F)
line_GH = scene.add.line_segment(G, H)

### relationships

scene.relate.is_altitude(line_AD, triangle_ABC, A)
scene.relate.parallel(line_BE, line_CF)

### Extra relationships

scene.constraint.eq(line_BE.length, line_CF.length)
scene.constraint.eq(scene.angle(scene.get_object('B'), scene.get_object('A'), scene.get_object('C')), 90)

scene.solver.numerical()
scene.plot()

is_altitude(line_AD, triangle_ABC, A)
parallel(line_BE, line_CF)


Diagram description: The diagram contains points A, B, C, D, M, N. There is an isosceles trapezoid ABCD. There are line segments AC, BD, and MN. Points A, M and B are collinear. Line AC is perpendicular to line BD.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, M, N = scene.add.points(["A", "B", "C", "D", "M", "N"])

trapezoid_ABCD = scene.add.isosceles_trapezoid(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_MN = scene.add.line_segment(M, N)

### relationships

scene.relate.collinear(A, M, B)
scene.relate.perpendicular(line_AC, line_BD)

scene.solver.numerical()
scene.plot()

collinear(A, M, B)
perpendicular(line_AC, line_BD)


Diagram description: The diagram contains points A, B, C, D, E, F. There is an obtuse triangle ABC. There is a line segment AD. There is a line segment BE. There is a line segment CF. Line AD is an altitude of triangle ABC from vertex A. Line BE is an altitude of triangle ABC from vertex B. Line AD is congruent to line BE. Further, the length of line AD equals the length of line BE and angle ABC measures 120 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

triangleABC = scene.add.obtuse_triangle(A, B, C)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)
line_CF = scene.add.line_segment(C, F)

### relationships

scene.relate.is_altitude(line_AD, triangleABC, A)
scene.relate.congruent(line_AD, line_BE)

### Extra relationships

scene.constraint.eq(line_AD.length, line_BE.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('B'), scene.get_object('C')), 120)

scene.solver.numerical()
scene.plot()

is_altitude(line_AD, triangleABC, A)
congruent(line_AD, line_BE)


Diagram description: The diagram contains points A, B, C, H. There is a right triangle with vertices A, B, C. There is a line segment BH. There is a line segment AC. There is a line segment AB. Line BH is an altitude of triangle ABC from vertex B. Angle ABH is acute.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, H = scene.add.points(["A", "B", "C", "H"])

triangleABC = scene.add.right_triangle(A, B, C)
lineBH = scene.add.line_segment(B, H)
lineAC = scene.add.line_segment(A, C)
lineAB = scene.add.line_segment(A, B)

### relationships

scene.relate.is_altitude(lineBH, triangleABC, B)
scene.relate.acute_angle(A, B, H)

scene.solver.numerical()
scene.plot()

is_altitude(lineBH, triangleABC, B)
acute_angle(A, B, H)


Diagram description: The diagram contains points A, B, C, D, E, F. There is a square with A, B, C, D. There is a line segment AC. There is a line segment BD. There is a line segment EF. Points A, E, and C are collinear. Line segment AC is perpendicular to line segment BD.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

square1 = scene.add.square(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.collinear(A, E, C)
scene.relate.perpendicular(line_AC, line_BD)

scene.solver.numerical()
scene.plot()

collinear(A, E, C)
perpendicular(line_AC, line_BD)


Diagram description: The diagram contains points A, B, C, D, E, F, G. There is a major arc BC with center A. There is a line segment DE. There is a line segment CF. The extensions of line segment DE and line segment CF intersect at point G. Point F lies on the major arc BC with center A.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

major_arc1 = scene.add.major_arc(A, B, C)
line_DE = scene.add.line_segment(D, E)
line_CF = scene.add.line_segment(C, F)

### relationships

scene.relate.line_extensions_intersect_at(line_DE, line_CF, G)
scene.relate.point_lies_on(F, major_arc1)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E. There is an obtuse triangle ABC with vertices A, B, C. There is a line segment AD. There is a line segment BE. Line AD is an altitude of triangle ABC from vertex A. Line AD and line BE intersect at point D.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

triangleABC = scene.add.obtuse_triangle(A, B, C)
line_altitude = scene.add.line_segment(A, D)
line_perpendicular = scene.add.line_segment(B, E)

### relationships

scene.relate.is_altitude(line_altitude, triangleABC, A)
scene.relate.lines_intersect_at(line_altitude, line_perpendicular, D)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D. There is an isosceles trapezoid ABCD. There is a line segment AC. There is a line segment BD. There is a line BD. The trapezoid ABCD is congruent to itself. The trapezoid ABCD is a mirror image of itself across line BD.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D = scene.add.points(["A", "B", "C", "D"])

trapezoid1 = scene.add.isosceles_trapezoid(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_m = scene.add.line(B, D)

### relationships

scene.relate.congruent(trapezoid1, trapezoid1)
scene.relate.mirror_across_line(trapezoid1, trapezoid1, line_m)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points O, A, B, P. There is a major arc with center O, start point A, end point B. There is a line segment OP. There is a line segment OA. The line OP is a rotation of line OA around point O by 90 degrees. Point P lies on the major arc. Further, length of line OA is equal to length of line OP and angle AOP is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

O, A, B, P = scene.add.points(["O", "A", "B", "P"])

semicircle1 = scene.add.major_arc(O, A, B)
line_OP = scene.add.line_segment(O, P)
line_OA = scene.add.line_segment(O, A)

### relationships

scene.relate.rotation_around_point(line_OA, line_OP, O, 90)
scene.relate.point_lies_on(P, semicircle1)

### Extra relationships

scene.constraint.eq(line_OA.length, line_OP.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('O'), scene.get_object('P')), 90)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a parallelogram ABCD. There is a line segment AC. There is a line segment BD. There is a line segment EF. The parallelogram ABCD is similar to itself. Line segment AC is perpendicular to line segment BD.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

parallelogram1 = scene.add.parallelogram(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.similar(parallelogram1, parallelogram1)
scene.relate.perpendicular(line_AC, line_BD)

scene.solver.numerical()
scene.plot()

similar(parallelogram1, parallelogram1)
perpendicular(line_AC, line_BD)


Diagram description: The diagram contains points A, B, C, D, E. There is a major arc with center A, start point B, end point C. There is a line segment AD. There is a line segment BE. There is a line segment CD. Line AD intersects line BE at D. Point D lies on the major arc.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

semicircle1 = scene.add.major_arc(A, B, C)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)
line_CD = scene.add.line_segment(C, D)

### relationships

scene.relate.lines_intersect_at(line_AD, line_BE, D)
scene.relate.point_lies_on(D, semicircle1)

scene.solver.numerical()
scene.plot()

lines_intersect_at(line_AD, line_BE, D)
point_lies_on(D, semicircle1)


Diagram description: The diagram contains points A, B, C, D, E. There is a kite with points A, B, C, D. There is a line segment AC. There is a line segment BD. There is a line segment BE. Line AC is perpendicular to line BD. Line BE is the angle bisector of angle ABD. Further, the length of line AC is equal to the length of line BD and the angle ABD measures 45 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

kite1 = scene.add.kite(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_angle_bisector = scene.add.line_segment(B, E)

### relationships

scene.relate.perpendicular(line_AC, line_BD)
scene.relate.angle_bisector(A, B, D, line_angle_bisector)

### Extra relationships

scene.constraint.eq(line_AC.length, line_BD.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('B'), scene.get_object('D')), 45)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, O, P, Q. There is a major arc with center O from A to B. There is a line segment PQ. There is a line segment AB. Line PQ intersects line AB at O. Point P lies on the major arc from A to B centered at O. Further, the radius of the major arc is 3.0. Further, the angle POA is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, O, P, Q = scene.add.points(["A", "B", "O", "P", "Q"])

semicircle1 = scene.add.major_arc(O, A, B)
line_perp = scene.add.line_segment(P, Q)
line_base = scene.add.line_segment(A, B)

### relationships

scene.relate.lines_intersect_at(line_perp, line_base, O)
scene.relate.point_lies_on(P, semicircle1)

### Extra relationships

scene.constraint.eq(semicircle1.radius, 3.0)
scene.constraint.eq(scene.angle(scene.get_object('P'), scene.get_object('O'), scene.get_object('A')), 90)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a kite with points A, B, C, D. There is a line segment AC. There is a line segment BD. There is a line segment EF. Line AC is perpendicular to line BD. Line BD is parallel to line EF.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

kite1 = scene.add.kite(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.perpendicular(line_AC, line_BD)
scene.relate.parallel(line_BD, line_EF)

scene.solver.numerical()
scene.plot()

perpendicular(line_AC, line_BD)
parallel(line_BD, line_EF)


Diagram description: The diagram contains points A, B, C, D, E, F, G.
There is an acute triangle ABC.
There is a line segment AD.
There is a line segment EF.
Line AD is an altitude of triangle ABC from vertex A.
The extensions of line AD and line EF intersect at point G.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

triangleABC = scene.add.acute_triangle(A, B, C)
line_altitude_from_A = scene.add.line_segment(A, D)
line_perpendicular_bisector = scene.add.line_segment(E, F)

### relationships

scene.relate.is_altitude(line_altitude_from_A, triangleABC, A)
scene.relate.line_extensions_intersect_at(line_altitude_from_A, line_perpendicular_bisector, G)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a parallelogram ABCD. There is a line segment AC. There is a line segment BD. There is a line segment EF. Point E lies on line AC. Line AC is perpendicular to line BD. Further, length of line AC is equal to length of line BD and angle AEB is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

parallelogram1 = scene.add.parallelogram(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.point_lies_on(E, line_AC)
scene.relate.perpendicular(line_AC, line_BD)

### Extra relationships

scene.constraint.eq(line_AC.length, line_BD.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('E'), scene.get_object('B')), 90)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E. There is a triangle ABC. There is a line segment AD. There is a line segment DE. Line AD is an altitude of triangle ABC from vertex A. Line AD is perpendicular to line DE.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

triangleABC = scene.add.triangle(A, B, C)
line_altitude = scene.add.line_segment(A, D)
line_perpendicular = scene.add.line_segment(D, E)

### relationships

scene.relate.is_altitude(line_altitude, triangleABC, A)
scene.relate.perpendicular(line_altitude, line_perpendicular)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F, G. There is a right trapezoid ABCD with AB parallel to CD and right angles at A and D. There are line segments AC, BD, and EF. Points A, E, and F are collinear. Lines AC and BD intersect at point G. Further, the length of line AC is equal to the length of line BD. Further, angle AGB is a right angle.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

trapezoidABCD = scene.add.right_trapezoid(A, B, C, D)
lineAC = scene.add.line_segment(A, C)
lineBD = scene.add.line_segment(B, D)
lineEF = scene.add.line_segment(E, F)

### relationships

scene.relate.collinear(A, E, F)
scene.relate.lines_intersect_at(lineAC, lineBD, G)

### Extra relationships

scene.constraint.eq(lineAC.length, lineBD.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('G'), scene.get_object('B')), 90)

scene.solver.numerical()
scene.plot()

collinear(A, E, F)
lines_intersect_at(lineAC, lineBD, G)


Diagram description: The diagram contains points A, B, C, D, E. There is a triangle with vertices A, B, C. There are line segments AD, BE, and BC. AD is an altitude of triangle ABC from vertex A. AD and BE intersect at point A. Further, the length of line BC is equal to the length of line BE and angle ABD is a right angle.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

triangleABC = scene.add.triangle(A, B, C)
line_altitude = scene.add.line_segment(A, D)
line_perpendicular = scene.add.line_segment(B, E)
line_base = scene.add.line_segment(B, C)

### relationships

scene.relate.is_altitude(line_altitude, triangleABC, A)
scene.relate.lines_intersect_at(line_altitude, line_perpendicular, A)

### Extra relationships

scene.constraint.eq(line_base.length, line_perpendicular.length)
scene.constraint.eq(scene.angle(scene.get_object('B'), scene.get_object('A'), scene.get_object('D')), 90)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F, G, H. There is a circle with center A. There is a line segment BC. There is a line segment DE. There is a line FG. Line BC intersects line DE at point H. Line BC is a chord of the circle.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H"])

circle1 = scene.add.circle(A)
line1 = scene.add.line_segment(B, C)
line2 = scene.add.line_segment(D, E)
line3 = scene.add.line(F, G)

### relationships

scene.relate.lines_intersect_at(line1, line2, H)
scene.relate.is_chord(line1, circle1)

scene.solver.numerical()
scene.plot()

lines_intersect_at(line1, line2, H)
is_chord(line1, circle1)


Diagram description: The diagram contains points A, B, C, D, E, F, G, H. There is an equilateral triangle ABC. There is a line segment AD. There is a line segment BE. There is a line segment CF. There is a line segment GH. Line AD is an altitude of triangle ABC from vertex A. The extensions of line AD and line BE intersect at point F. Point G is the centroid of triangle ABC.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H"])

triangleABC = scene.add.equilateral_triangle(A, B, C)
lineAD = scene.add.line_segment(A, D)
lineBE = scene.add.line_segment(B, E)
lineCF = scene.add.line_segment(C, F)
lineGH = scene.add.line_segment(G, H)

### relationships

scene.relate.is_altitude(lineAD, triangleABC, A)
scene.relate.line_extensions_intersect_at(lineAD, lineBE, F)
scene.relate.is_centroid(G, triangleABC)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F, G. There is an obtuse triangle ABC with vertices A, B, C. There are line segments AD and EF. Line AD is an altitude of triangle ABC from vertex A. Point G is the centroid of triangle ABC.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

triangleABC = scene.add.obtuse_triangle(A, B, C)
line_altitude_from_A = scene.add.line_segment(A, D)
line_perpendicular_bisector = scene.add.line_segment(E, F)

### relationships

scene.relate.is_altitude(line_altitude_from_A, triangleABC, A)
scene.relate.is_centroid(G, triangleABC)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, O. There is an isosceles trapezoid ABCD. There is a line segment AC. There is a line segment BD. There is a line CD. Line AC and line BD intersect at point O. Line CD is perpendicular to line AC.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, O = scene.add.points(["A", "B", "C", "D", "O"])

trapezoid1 = scene.add.isosceles_trapezoid(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_m = scene.add.line(C, D)

### relationships

scene.relate.lines_intersect_at(line_AC, line_BD, O)
scene.relate.perpendicular(line_m, line_AC)

scene.solver.numerical()
scene.plot()

lines_intersect_at(line_AC, line_BD, O)
perpendicular(line_m, line_AC)


Diagram description: The diagram contains points A, B, C, D, E, F, G, H. There is an acute triangle ABC. There is a line segment AD. There is a line segment BE. There is a line segment CF. There is a line segment GH. Line AD is an altitude of triangle ABC from vertex A. Line BE is an altitude of triangle ABC from vertex B. Point F is the orthocenter of triangle ABC. Line AD is the mirror image of line BE across line GH. Line AD is congruent to line BE.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H"])

triangleABC = scene.add.acute_triangle(A, B, C)
lineAD = scene.add.line_segment(A, D)
lineBE = scene.add.line_segment(B, E)
lineCF = scene.add.line_segment(C, F)
lineGH = scene.add.line_segment(G, H)

### relationships

scene.relate.is_altitude(lineAD, triangleABC, A)
scene.relate.is_altitude(lineBE, triangleABC, B)
scene.relate.is_orthocenter(F, triangleABC)
scene.relate.mirror_across_line(lineAD, lineBE, lineGH)
scene.relate.congruent(lineAD, lineBE)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a right triangle with vertices A, B, C. There is a line segment BD. There is a line segment CE. There is a line segment AF. Line BD is congruent to line CE. Line BD is an altitude of triangle ABC from vertex B. Further, length of line BD equals length of line CE. Further, angle ABC equals 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

triangleABC = scene.add.right_triangle(A, B, C)
lineBD = scene.add.line_segment(B, D)
lineCE = scene.add.line_segment(C, E)
lineAF = scene.add.line_segment(A, F)

### relationships

scene.relate.congruent(lineBD, lineCE)
scene.relate.is_altitude(lineBD, triangleABC, B)

### Extra relationships

scene.constraint.eq(lineBD.length, lineCE.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('B'), scene.get_object('C')), 90)

scene.solver.numerical()
scene.plot()

congruent(lineBD, lineCE)
is_altitude(lineBD, triangleABC, B)


Diagram description: The diagram contains points A, B, C, D, E, F. There is a triangle ABC. There is a line segment AD. There is a line segment BE. There is a line BD. There is a line AE. Line AD is an altitude of triangle ABC from A. Line BE is a median of triangle ABC from B. Line BD and line AE intersect at point F.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

triangleABC = scene.add.triangle(A, B, C)
line_altitude = scene.add.line_segment(A, D)
line_median = scene.add.line_segment(B, E)
line_extension1 = scene.add.line(B, D)
line_extension2 = scene.add.line(A, E)

### relationships

scene.relate.is_altitude(line_altitude, triangleABC, A)
scene.relate.is_median(line_median, triangleABC, B)
scene.relate.line_extensions_intersect_at(line_extension1, line_extension2, F)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a parallelogram ABCD. There is a line segment AC. There is a line segment BD. There is a line segment EF. Point E lies on line AC. Line AC is perpendicular to line BD.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

parallelogram1 = scene.add.parallelogram(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.point_lies_on(E, line_AC)
scene.relate.perpendicular(line_AC, line_BD)

scene.solver.numerical()
scene.plot()

point_lies_on(E, line_AC)
perpendicular(line_AC, line_BD)


Diagram description: The diagram contains points A, B, C, D, E. There is an isosceles trapezoid ABCD. There is a line segment AC. There is a line segment BD. There is a line BC. A, D, and C are collinear. Line AC intersects line BD at E.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

trapezoid1 = scene.add.isosceles_trapezoid(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_m = scene.add.line(B, C)

### relationships

scene.relate.collinear(A, D, C)
scene.relate.lines_intersect_at(line_AC, line_BD, E)

scene.solver.numerical()
scene.plot()

collinear(A, D, C)
lines_intersect_at(line_AC, line_BD, E)


Diagram description: The diagram contains points A, B, C, D, E, F, G. There is an obtuse triangle ABC. There is a line segment AD. There is a line segment BE. There is a line segment CF. Line AD intersects line BE at G. Line AD is an altitude of triangle ABC from vertex A. Line BE is an altitude of triangle ABC from vertex B. Line CF is an altitude of triangle ABC from vertex C.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

triangleABC = scene.add.obtuse_triangle(A, B, C)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)
line_CF = scene.add.line_segment(C, F)

### relationships

scene.relate.lines_intersect_at(line_AD, line_BE, G)
scene.relate.is_altitude(line_AD, triangleABC, A)
scene.relate.is_altitude(line_BE, triangleABC, B)
scene.relate.is_altitude(line_CF, triangleABC, C)

scene.solver.numerical()
scene.plot()

lines_intersect_at(line_AD, line_BE, G)
is_altitude(line_AD, triangleABC, A)
is_altitude(line_BE, triangleABC, B)
is_altitude(line_CF, triangleABC, C)


Diagram description: The diagram contains points A, B, C, D, E, F, G. There is a rectangle with points A, B, C, D. There is a line segment AC. There is a line segment BD. There is a line segment EF. Point G is the midpoint of line AC. Line AC is perpendicular to line BD. Further, the length of line AC is equal to the length of line BD. Further, the slope of line AC is the negative reciprocal of the slope of line BD.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

rectangle1 = scene.add.rectangle(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.is_midpoint(G, line_AC)
scene.relate.perpendicular(line_AC, line_BD)

### Extra relationships

scene.constraint.eq(line_AC.length, line_BD.length)
scene.constraint.eq(line_AC.slope, -1 * line_BD.slope)

scene.solver.numerical()
scene.plot()

is_midpoint(G, line_AC)
perpendicular(line_AC, line_BD)

scene.constraint.eq(scene.get_object('line_AC').slope, -1 * scene.get_object('line_BD').slope)


Diagram description: The diagram contains points A, B, C, D, E, F. There is a triangle ABC. There is a triangle DEF. There is a line segment AD. There is a line segment BE. There is a line segment CF. Triangle ABC is similar to triangle DEF. Line AD is an altitude of triangle ABC from vertex A. Line BE is an altitude of triangle ABC from vertex B.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

triangle_ABC = scene.add.triangle(A, B, C)
triangle_DEF = scene.add.triangle(D, E, F)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)
line_CF = scene.add.line_segment(C, F)

### relationships

scene.relate.similar(triangle_ABC, triangle_DEF)
scene.relate.is_altitude(line_AD, triangle_ABC, A)
scene.relate.is_altitude(line_BE, triangle_ABC, B)

scene.solver.numerical()
scene.plot()

similar(triangle_ABC, triangle_DEF)
is_altitude(line_AD, triangle_ABC, A)
is_altitude(line_BE, triangle_ABC, B)


Diagram description: The diagram contains points A, B, C, D, E. There is a trapezoid ABCD. There is a line segment AC. There is a line segment BD. There is a line segment AD. There is a line segment BC. There is a line segment CD. There is a line segment AB. Angle BAD is a right angle. Line AC is perpendicular to line BD. Point E is the midpoint of line AB. Further, length of line AD equals length of line BC, the slope of line AB is less than or equal to 0, and angle ABC is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

trapezoid1 = scene.add.isosceles_trapezoid(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_AD = scene.add.line_segment(A, D)
line_BC = scene.add.line_segment(B, C)
line_CD = scene.add.line_segment(C, D)
line_AB = scene.add.line_segment(A, B)

### relationships

scene.relate.right_angle(B, A, D)
scene.relate.perpendicular(line_AC, line_BD)
scene.relate.is_midpoint(E, line_AB)

### Extra relationships

scene.constraint.eq(line_AD.length, line_BC.length)
scene.constraint.leq(line_AB.slope, 0)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('B'), scene.get_object('C')), 90)

scene.solver.numerical()
scene.plot()

right_angle(B, A, D)
perpendicular(line_AC, line_BD)
is_midpoint(E, line_AB)


Diagram description: The diagram contains points A, B, C, D. There is a circle with center A. There is a line segment BD. There is a line segment AC. Line BD is a diameter of the circle with center A. Line BD is perpendicular to line AC. The extensions of lines BD and AC intersect at point A.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D = scene.add.points(["A", "B", "C", "D"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)

### relationships

scene.relate.is_diameter(line_BD, circle1)
scene.relate.perpendicular(line_BD, line_AC)
scene.relate.line_extensions_intersect_at(line_BD, line_AC, A)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a circle with center A. There is a line segment BD. There is a line segment AC. There is a line segment EF. BD is a diameter of the circle. BD is perpendicular to line AC. The extension of line EF intersects the circle at points B and D.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.is_diameter(line_BD, circle1)
scene.relate.perpendicular(line_BD, line_AC)
scene.relate.line_extension_intersects_circle_at(line_EF, circle1, B, D)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E. There is a right trapezoid ABCD. There is a line segment AC. There is a line segment BD. There is a line segment AD. There is a line segment DC. Line segment AC intersects line segment BD at point E. Line segment AD is perpendicular to line segment DC. Angle ADC is a right angle. Further, length of line segment AD is equal to length of line segment DC, length of line segment AC is less than or equal to twice the length of line segment AD, and angle ADC is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

trapezoid1 = scene.add.right_trapezoid(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_AD = scene.add.line_segment(A, D)
line_DC = scene.add.line_segment(D, C)

### relationships

scene.relate.lines_intersect_at(line_AC, line_BD, E)
scene.relate.perpendicular(line_AD, line_DC)
scene.relate.right_angle(A, D, C)

### Extra relationships

scene.constraint.eq(line_AD.length, line_DC.length)
scene.constraint.leq(line_AC.length, 2 * line_AD.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('D'), scene.get_object('C')), 90)

scene.solver.numerical()
scene.plot()

lines_intersect_at(line_AC, line_BD, E)
perpendicular(line_AD, line_DC)
right_angle(A, D, C)

scene.constraint.leq(scene.get_object('line_AC').length, 2 * scene.get_object('line_AD').length)


Diagram description: The diagram contains points A, B, C, D, E, F, G, H. There is an obtuse triangle with vertices A, B, C. There is a line segment AD. There is a line segment BE. There is a line segment CF. There is a line segment GH. H is the orthocenter of triangle ABC. Line AD is an altitude of triangle ABC from vertex A. Line BE is an altitude of triangle ABC from vertex B. Further, the length of line AD is equal to the length of line BE. Further, the area of triangle ABC is less than or equal to 20. Further, the angle at vertex A of triangle ABC is 120 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H"])

triangleABC = scene.add.obtuse_triangle(A, B, C)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)
line_CF = scene.add.line_segment(C, F)
line_GH = scene.add.line_segment(G, H)

### relationships

scene.relate.is_orthocenter(H, triangleABC)
scene.relate.is_altitude(line_AD, triangleABC, A)
scene.relate.is_altitude(line_BE, triangleABC, B)

### Extra relationships

scene.constraint.eq(line_AD.length, line_BE.length)
scene.constraint.leq(triangleABC.area, 20)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('B'), scene.get_object('C')), 120)

scene.solver.numerical()
scene.plot()

is_orthocenter(H, triangleABC)
is_altitude(line_AD, triangleABC, A)
is_altitude(line_BE, triangleABC, B)


Diagram description: The diagram contains points A, B, C, D, E, F. There is an isosceles triangle ABC with AB = BC. There is a line segment AD. There is a line segment BE. There is a line segment CF. There is a line segment BC. Line AD is a median of triangle ABC from vertex A. Line AD is perpendicular to line BC. Point E is the orthocenter of triangle ABC.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

triangleABC = scene.add.isosceles_triangle(A, B, C)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)
line_CF = scene.add.line_segment(C, F)
line_BC = scene.add.line_segment(B, C)

### relationships

scene.relate.is_median(line_AD, triangleABC, A)
scene.relate.perpendicular(line_AD, line_BC)
scene.relate.is_orthocenter(E, triangleABC)

scene.solver.numerical()
scene.plot()

is_median(line_AD, triangleABC, A)
perpendicular(line_AD, line_BC)
is_orthocenter(E, triangleABC)


Diagram description: The diagram contains points A, B, C, D, E, F. There is a circle with center A. There are line segments BD, AC, and EF. Line BD is a diameter of the circle. Line BD is perpendicular to line AC. Line AC and line EF intersect at point A.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.is_diameter(line_BD, circle1)
scene.relate.perpendicular(line_BD, line_AC)
scene.relate.lines_intersect_at(line_AC, line_EF, A)

scene.solver.numerical()
scene.plot()

is_diameter(line_BD, circle1)
perpendicular(line_BD, line_AC)
lines_intersect_at(line_AC, line_EF, A)


Diagram description: The diagram contains points A, B, C, D, E, F. There is a circle with center A. There is a line segment BD. There is a line segment AC. There is a line segment EF. Line BD is a diameter of the circle. Line BD is perpendicular to line AC. Angle EAF is acute. Further, the length of line AC is equal to half the length of line BD. Further, the length of line EF is less than or equal to the diameter of the circle. Further, the angle EAF measures exactly 30 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.is_diameter(line_BD, circle1)
scene.relate.perpendicular(line_BD, line_AC)
scene.relate.acute_angle(E, A, F)

### Extra relationships

scene.constraint.eq(line_AC.length, line_BD.length / 2)
scene.constraint.leq(line_EF.length, circle1.diameter)
scene.constraint.eq(scene.angle(scene.get_object('E'), scene.get_object('A'), scene.get_object('F')), 30)

scene.solver.numerical()
scene.plot()

is_diameter(line_BD, circle1)
perpendicular(line_BD, line_AC)
acute_angle(E, A, F)

scene.constraint.eq(scene.get_object('line_AC').length, scene.get_object('line_BD').length / 2)


Diagram description: The diagram contains points A, B, C, D, E, F. There is a circle with center A. There are line segments BD, AC, and EF. Line BD is a diameter of the circle. Line EF is a chord of the circle. Line BD intersects line AC at point A.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.lines_intersect_at(line_BD, line_AC, A)
scene.relate.is_diameter(line_BD, circle1)
scene.relate.is_chord(line_EF, circle1)

scene.solver.numerical()
scene.plot()

lines_intersect_at(line_BD, line_AC, A)
is_diameter(line_BD, circle1)
is_chord(line_EF, circle1)


Diagram description: The diagram contains points A, B, C, D, E, F. There is a trapezoid ABCD. There are line segments AC, BD, EF. The trapezoid is similar to itself. Line AC is perpendicular to line BD. Point F is the midpoint of line BD.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

trapezoid1 = scene.add.trapezoid(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.similar(trapezoid1, trapezoid1)
scene.relate.perpendicular(line_AC, line_BD)
scene.relate.is_midpoint(F, line_BD)

scene.solver.numerical()
scene.plot()

similar(trapezoid1, trapezoid1)
perpendicular(line_AC, line_BD)
is_midpoint(F, line_BD)


Diagram description: The diagram contains points A, B, C, D, E. There is a trapezoid ABCD. There is a line segment AC. There is a line segment BD. There is a line segment AD. There is a line segment BC. The trapezoid ABCD is similar to itself. Line AC is perpendicular to line BD. Point E is the midpoint of line AD. Further, the length of line AD is equal to the length of line BC. Further, the length of line AC is less than or equal to twice the length of line AD. Further, angle ADC is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

trapezoid1 = scene.add.trapezoid(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_AD = scene.add.line_segment(A, D)
line_BC = scene.add.line_segment(B, C)

### relationships

scene.relate.similar(trapezoid1, trapezoid1)
scene.relate.perpendicular(line_AC, line_BD)
scene.relate.is_midpoint(E, line_AD)

### Extra relationships

scene.constraint.eq(line_AD.length, line_BC.length)
scene.constraint.leq(line_AC.length, 2 * line_AD.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('D'), scene.get_object('C')), 90)

scene.solver.numerical()
scene.plot()

similar(trapezoid1, trapezoid1)
perpendicular(line_AC, line_BD)
is_midpoint(E, line_AD)


Diagram description: The diagram contains points A, B, C, D, E, F, G. There is a triangle ABC. There is a line AD. There is a line BE. There is a line CF. AD is an altitude of triangle ABC from vertex A. BE is a median of triangle ABC from vertex B. AD and BE intersect at point G. Further, the length of line AD is equal to the length of line BE, the length of line CF is less than or equal to 3 units, and angle ADB is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

triangleABC = scene.add.triangle(A, B, C)
line_altitude = scene.add.line_segment(A, D)
line_median = scene.add.line_segment(B, E)
line_perpendicular = scene.add.line_segment(C, F)

### relationships

scene.relate.is_altitude(line_altitude, triangleABC, A)
scene.relate.is_median(line_median, triangleABC, B)
scene.relate.lines_intersect_at(line_altitude, line_median, G)

### Extra relationships

scene.constraint.eq(line_altitude.length, line_median.length)
scene.constraint.leq(line_perpendicular.length, 3.0)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('D'), scene.get_object('B')), 90)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a circle with center A. There are line segments BD, AC, and EF. Line BD is a diameter of the circle. Line BD is perpendicular to line AC. Line AC is parallel to line EF.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.is_diameter(line_BD, circle1)
scene.relate.perpendicular(line_BD, line_AC)
scene.relate.parallel(line_AC, line_EF)

scene.solver.numerical()
scene.plot()

is_diameter(line_BD, circle1)
perpendicular(line_BD, line_AC)
parallel(line_AC, line_EF)


Diagram description: The diagram contains points A, B, C, D, E. There is a rhomboid ABCD. There are line segments AC, BD, and BE. Line AC is perpendicular to line BD. Line BE is the bisector of angle ABD. Point E lies on line AC. Further, the length of line AC is equal to twice the length of line BD. Further, the length of line BE is less than or equal to the length of line AC. Further, the measure of angle ABD is 60 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

rhomboid1 = scene.add.rhomboid(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_angle_bisector = scene.add.line_segment(B, E)

### relationships

scene.relate.perpendicular(line_AC, line_BD)
scene.relate.angle_bisector(A, B, D, line_angle_bisector)
scene.relate.point_lies_on(E, line_AC)

### Extra relationships

scene.constraint.eq(line_AC.length, 2 * line_BD.length)
scene.constraint.leq(line_angle_bisector.length, line_AC.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('B'), scene.get_object('D')), 60)

scene.solver.numerical()
scene.plot()

scene.constraint.eq(scene.get_object('line_AC').length, 2 * scene.get_object('line_BD').length)


Diagram description: The diagram contains points A, B, C, D, E, F, G. There is a triangle with points A, B, C. There is a line segment AD. There is a line segment BE. There is a line segment CF. Line AD is an altitude of triangle ABC from vertex A. Line BE is a median of triangle ABC from vertex B. Line AD and line BE intersect at point G.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

triangleABC = scene.add.triangle(A, B, C)
line_altitude = scene.add.line_segment(A, D)
line_median = scene.add.line_segment(B, E)
line_perpendicular = scene.add.line_segment(C, F)

### relationships

scene.relate.is_altitude(line_altitude, triangleABC, A)
scene.relate.is_median(line_median, triangleABC, B)
scene.relate.lines_intersect_at(line_altitude, line_median, G)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a circle with center A. There are line segments BD, AC, and EF. Line BD is a diameter of the circle. Line BD is perpendicular to line AC. Points E, F, and A are collinear.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.is_diameter(line_BD, circle1)
scene.relate.perpendicular(line_BD, line_AC)
scene.relate.collinear(E, F, A)

scene.solver.numerical()
scene.plot()

is_diameter(line_BD, circle1)
perpendicular(line_BD, line_AC)
collinear(E, F, A)


Diagram description: The diagram contains points A, B, C, D, E. There is a major arc with center A, start point B, and end point C. There is a line segment AD. There is a line segment BE. There is a line segment CD. Line AD is perpendicular to line BE. Point D lies on the major arc. Point E is the midpoint of line CD.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

semicircle1 = scene.add.major_arc(A, B, C)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)
line_CD = scene.add.line_segment(C, D)

### relationships

scene.relate.perpendicular(line_AD, line_BE)
scene.relate.point_lies_on(D, semicircle1)
scene.relate.is_midpoint(E, line_CD)

scene.solver.numerical()
scene.plot()

perpendicular(line_AD, line_BE)
point_lies_on(D, semicircle1)
is_midpoint(E, line_CD)


Diagram description: The diagram contains points A, B, C, D, E, F, G, H. There is a triangle ABC. There is a line segment AD. There is a line segment BE. There is a line segment FG. Line AD is an altitude of triangle ABC from vertex A. Line BE is a median of triangle ABC from vertex B. Point H is the orthocenter of triangle ABC.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H"])

triangleABC = scene.add.triangle(A, B, C)
line_altitude = scene.add.line_segment(A, D)
line_median = scene.add.line_segment(B, E)
line_perp_bisector = scene.add.line_segment(F, G)

### relationships

scene.relate.is_altitude(line_altitude, triangleABC, A)
scene.relate.is_median(line_median, triangleABC, B)
scene.relate.is_orthocenter(H, triangleABC)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a circle with center A. There is a line segment BD. There is a line segment AC. There is a line segment EF. Line BD is a diameter of the circle. Line BD is perpendicular to line AC. Line BD is congruent to line EF.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.is_diameter(line_BD, circle1)
scene.relate.perpendicular(line_BD, line_AC)
scene.relate.congruent(line_BD, line_EF)

scene.solver.numerical()
scene.plot()

is_diameter(line_BD, circle1)
perpendicular(line_BD, line_AC)
congruent(line_BD, line_EF)


Diagram description: The diagram contains points A, B, C, D, E, F, G. There is an acute triangle with vertices A, B, C. There is a line segment AD. There is a line segment BE. There is a line segment FG. AD is an altitude of triangle ABC from vertex A. BE is a median of triangle ABC from vertex B. AD is perpendicular to BE.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

triangleABC = scene.add.acute_triangle(A, B, C)
line_altitude = scene.add.line_segment(A, D)
line_median = scene.add.line_segment(B, E)
line_perp_bisector = scene.add.line_segment(F, G)

### relationships

scene.relate.is_altitude(line_altitude, triangleABC, A)
scene.relate.is_median(line_median, triangleABC, B)
scene.relate.perpendicular(line_altitude, line_median)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F, G. There is an obtuse triangle ABC. There is a line segment AD. There is a line segment EF. There is a line segment BC. There is a line BC. There is a line DE. Line AD is an altitude of triangle ABC from vertex A. Line EF is the perpendicular bisector of line BC. Lines BC and DE intersect at point G.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

triangleABC = scene.add.obtuse_triangle(A, B, C)
line_altitude_from_A = scene.add.line_segment(A, D)
line_perpendicular_bisector = scene.add.line_segment(E, F)
line_BC = scene.add.line_segment(B, C)
line_extension1 = scene.add.line(B, C)
line_extension2 = scene.add.line(D, E)

### relationships

scene.relate.is_altitude(line_altitude_from_A, triangleABC, A)
scene.relate.perpendicular_bisector_at(line_BC, line_perpendicular_bisector)
scene.relate.line_extensions_intersect_at(line_extension1, line_extension2, G)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a circle with center A. There is a line segment BD. There is a line segment AC. There is a line segment EF. Line BD is a diameter of the circle. Line BD is perpendicular to line AC. Line AC and line EF intersect at point A. Further, the area of the circle is 16π. Further, the length of line EF is less than or equal to the length of line AC. Further, angle BAE is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.is_diameter(line_BD, circle1)
scene.relate.perpendicular(line_BD, line_AC)
scene.relate.lines_intersect_at(line_AC, line_EF, A)

### Extra relationships

scene.constraint.eq(circle1.area, 16 * 3.14159)
scene.constraint.leq(line_EF.length, line_AC.length)
scene.constraint.eq(scene.angle(scene.get_object('B'), scene.get_object('A'), scene.get_object('E')), 90)

scene.solver.numerical()
scene.plot()

scene.constraint.eq(scene.get_object('circle1').area, 16 * 3.14159)


Diagram description: The diagram contains points A, B, C, D, E. There is a rectangle with A, B, C, D. There is a line segment AC. There is a line segment BD. There is a line segment DE. The line segment DE is the angle bisector of angle ADC. The line segments AC and BD are perpendicular. Point E is the midpoint of line segment AC. Further, the length of line AC is equal to the length of line BD. Further, the area of the rectangle is at most 20. Further, angle ADC is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

rectangle1 = scene.add.rectangle(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_angle_bisector = scene.add.line_segment(D, E)

### relationships

scene.relate.angle_bisector(A, D, C, line_angle_bisector)
scene.relate.perpendicular(line_AC, line_BD)
scene.relate.is_midpoint(E, line_AC)

### Extra relationships

scene.constraint.eq(line_AC.length, line_BD.length)
scene.constraint.leq(rectangle1.area, 20)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('D'), scene.get_object('C')), 90)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F, G, H. There is a major arc with center A and endpoints B and C. There is a line segment DE. There is a line segment CF. There is a line segment GH. Line DE and line CF intersect at point G, and their extensions meet at G. Point D lies on the major arc. Point F lies on the major arc. Further, the length of line DE is equal to the length of line CF. Further, the inscribed angle of the major arc is less than or equal to 90 degrees. Further, the angle DAF is 60 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H"])

major_arc1 = scene.add.major_arc(A, B, C)
line_DE = scene.add.line_segment(D, E)
line_CF = scene.add.line_segment(C, F)
line_GH = scene.add.line_segment(G, H)

### relationships

scene.relate.line_extensions_intersect_at(line_DE, line_CF, G)
scene.relate.point_lies_on(D, major_arc1)
scene.relate.point_lies_on(F, major_arc1)

### Extra relationships

scene.constraint.eq(line_DE.length, line_CF.length)
scene.constraint.leq(major_arc1.inscribed_angle, 90)
scene.constraint.eq(scene.angle(scene.get_object('D'), scene.get_object('A'), scene.get_object('F')), 60)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E. There is a right trapezoid ABCD. There is a line segment AC. There is a line segment BD. There is a line segment AD. There is a line segment BC. There is a line segment AB. Line AB is rotated 90 degrees counterclockwise around point A to align with line AD. Line AC is perpendicular to line BD. Point E is the midpoint of line AC.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

trapezoid1 = scene.add.right_trapezoid(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_AD = scene.add.line_segment(A, D)
line_BC = scene.add.line_segment(B, C)
line_AB = scene.add.line_segment(A, B)

### relationships

scene.relate.rotation_around_point(line_AB, line_AD, A, 90)
scene.relate.perpendicular(line_AC, line_BD)
scene.relate.is_midpoint(E, line_AC)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E. There is a circle with center A. There are line segments BD, AC, and ED. Line BD is a diameter of the circle. Line BD is perpendicular to line AC. Angle EDB is a right angle.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_ED = scene.add.line_segment(E, D)

### relationships

scene.relate.is_diameter(line_BD, circle1)
scene.relate.perpendicular(line_BD, line_AC)
scene.relate.right_angle(E, D, B)

scene.solver.numerical()
scene.plot()

is_diameter(line_BD, circle1)
perpendicular(line_BD, line_AC)
right_angle(E, D, B)


Diagram description: The diagram contains points A, B, C, D, E, F, G, H. There is a triangle ABC. There is a line AD. There is a line BE. There is a line CF. There is a line GH. Angle ABC is acute. Line AD is an altitude of triangle ABC from vertex A. Line BE is the mirror image of line CF across line GH. Further, the circumradius of triangle ABC is 2.0, the length of line BE is less than or equal to the length of line CF, and angle ABC is 60 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H"])

triangle_ABC = scene.add.equilateral_triangle(A, B, C)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)
line_CF = scene.add.line_segment(C, F)
line_GH = scene.add.line_segment(G, H)

### relationships

scene.relate.acute_angle(A, B, C)
scene.relate.is_altitude(line_AD, triangle_ABC, A)
scene.relate.mirror_across_line(line_BE, line_CF, line_GH)

### Extra relationships

scene.constraint.eq(triangle_ABC.circumradius, 2.0)
scene.constraint.leq(line_BE.length, line_CF.length)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('B'), scene.get_object('C')), 60)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a circle with center A. There is a line segment BD. There is a line segment AC. There is a line segment EF. Line BD is a diameter of the circle. Line BD is perpendicular to line AC. Point E lies on the circle.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.is_diameter(line_BD, circle1)
scene.relate.perpendicular(line_BD, line_AC)
scene.relate.point_lies_on(E, circle1)

scene.solver.numerical()
scene.plot()

is_diameter(line_BD, circle1)
perpendicular(line_BD, line_AC)
point_lies_on(E, circle1)


Diagram description: The diagram contains points A, B, C, D, M, N. There is an isosceles trapezoid ABCD. There is a line segment AC. There is a line segment BD. There is a line segment MN. M is the midpoint of line AC. line AC is perpendicular to line BD. line MN is parallel to line AC. Further, length of line AC is equal to length of line BD, area of trapezoid ABCD is less than or equal to 20, and angle AMB is equal to 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, M, N = scene.add.points(["A", "B", "C", "D", "M", "N"])

trapezoid1 = scene.add.isosceles_trapezoid(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_MN = scene.add.line_segment(M, N)

### relationships

scene.relate.is_midpoint(M, line_AC)
scene.relate.perpendicular(line_AC, line_BD)
scene.relate.parallel(line_MN, line_AC)

### Extra relationships

scene.constraint.eq(line_AC.length, line_BD.length)
scene.constraint.leq(trapezoid1.area, 20)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('M'), scene.get_object('B')), 90)

scene.solver.numerical()
scene.plot()

is_midpoint(M, line_AC)
perpendicular(line_AC, line_BD)
parallel(line_MN, line_AC)


Diagram description: The diagram contains points A, B, C, D, E, F, G. There is a major arc with center A from B to C. There are line segments DE, CF, and AG. The extensions of line DE and line CF intersect at point G. Point D lies on the major arc with center A from B to C. Point F lies on the major arc with center A from B to C. Further, length of line AG is equal to length of line DE. Further, length of line CF is less than or equal to the length of line AG. Further, angle DGF is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

arc1 = scene.add.major_arc(A, B, C)
line_DE = scene.add.line_segment(D, E)
line_CF = scene.add.line_segment(C, F)
line_AG = scene.add.line_segment(A, G)

### relationships

scene.relate.line_extensions_intersect_at(line_DE, line_CF, G)
scene.relate.point_lies_on(D, arc1)
scene.relate.point_lies_on(F, arc1)

### Extra relationships

scene.constraint.eq(line_AG.length, line_DE.length)
scene.constraint.leq(line_CF.length, line_AG.length)
scene.constraint.eq(scene.angle(scene.get_object('D'), scene.get_object('G'), scene.get_object('F')), 90)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a circle with center A. There are line segments BD, AC, and EF. Line BD is a diameter of the circle. Point B lies on the circle. Line BD is perpendicular to line AC. Further, length of line AC is equal to half the length of line BD. Further, length of line EF is less than or equal to length of line AC. Further, angle BAC is a right angle.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.point_lies_on(B, circle1)
scene.relate.is_diameter(line_BD, circle1)
scene.relate.perpendicular(line_BD, line_AC)

### Extra relationships

scene.constraint.eq(line_AC.length, line_BD.length / 2)
scene.constraint.leq(line_EF.length, line_AC.length)
scene.constraint.eq(scene.angle(scene.get_object('B'), scene.get_object('A'), scene.get_object('C')), 90)

scene.solver.numerical()
scene.plot()

point_lies_on(B, circle1)
is_diameter(line_BD, circle1)
perpendicular(line_BD, line_AC)


Diagram description: The diagram contains points A, B, C, D, E, F, G, H. There is a major arc with center A and endpoints B and C. There is a line segment DE. There is a line segment CF. There is a line segment GH. Point D lies on the major arc with center A and endpoints B and C. Point F lies on the major arc with center A and endpoints B and C. The extensions of line DE and line CF intersect at point G.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H"])

major_arc1 = scene.add.major_arc(A, B, C)
line_DE = scene.add.line_segment(D, E)
line_CF = scene.add.line_segment(C, F)
line_GH = scene.add.line_segment(G, H)

### relationships

scene.relate.line_extensions_intersect_at(line_DE, line_CF, G)
scene.relate.point_lies_on(D, major_arc1)
scene.relate.point_lies_on(F, major_arc1)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F, G, H. There is a triangle with vertices A, B, C. There is a line segment AD. There is a line segment EF. There is a line segment BG. Line AD is an altitude of triangle ABC from vertex A. Point H is the orthocenter of triangle ABC. Line BG is a median of triangle ABC from vertex B.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H"])

triangleABC = scene.add.triangle(A, B, C)
line_altitude_from_A = scene.add.line_segment(A, D)
line_perpendicular_bisector = scene.add.line_segment(E, F)
line_median_from_B = scene.add.line_segment(B, G)

### relationships

scene.relate.is_altitude(line_altitude_from_A, triangleABC, A)
scene.relate.is_orthocenter(H, triangleABC)
scene.relate.is_median(line_median_from_B, triangleABC, B)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a circle with center A. There are line segments BD, AC, EF. line BD is a chord of the circle. line BD is perpendicular to line AC. point E lies on the circle. Further, the area of the circle is 16π. Further, the length of line BD is less than or equal to the length of line AC. Further, angle BAC is a right angle.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.is_chord(line_BD, circle1)
scene.relate.perpendicular(line_BD, line_AC)
scene.relate.point_lies_on(E, circle1)

### Extra relationships

scene.constraint.eq(circle1.area, 16 * 3.14159)
scene.constraint.leq(line_BD.length, line_AC.length)
scene.constraint.eq(scene.angle(scene.get_object('B'), scene.get_object('A'), scene.get_object('C')), 90)

scene.solver.numerical()
scene.plot()

is_chord(line_BD, circle1)
perpendicular(line_BD, line_AC)
point_lies_on(E, circle1)


Diagram description: The diagram contains points A, B, C, D, E, F, G, H. There is an isosceles triangle ABC with vertices A, B, C. There is a line segment AD. There is a line segment BE. There is a line segment CF. There is a line segment GH. H is the orthocenter of triangle ABC. AD is an altitude of triangle ABC from vertex A. Line BE is perpendicular to line CF.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H"])

triangleABC = scene.add.isosceles_triangle(A, B, C)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)
line_CF = scene.add.line_segment(C, F)
line_GH = scene.add.line_segment(G, H)

### relationships

scene.relate.is_orthocenter(H, triangleABC)
scene.relate.is_altitude(line_AD, triangleABC, A)
scene.relate.perpendicular(line_BE, line_CF)

scene.solver.numerical()
scene.plot()

is_orthocenter(H, triangleABC)
is_altitude(line_AD, triangleABC, A)
perpendicular(line_BE, line_CF)


Diagram description: The diagram contains points A, B, C, D, E, F. There is a minor arc BC with center A. There is a line segment AD. There is a line segment BE. There is a line segment CF. Line AD is perpendicular to line BE. Point D lies on arc BC. Point E is the midpoint of line AD.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

arc1 = scene.add.minor_arc(A, B, C)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)
line_CF = scene.add.line_segment(C, F)

### relationships

scene.relate.perpendicular(line_AD, line_BE)
scene.relate.point_lies_on(D, arc1)
scene.relate.is_midpoint(E, line_AD)

scene.solver.numerical()
scene.plot()

perpendicular(line_AD, line_BE)
point_lies_on(D, arc1)
is_midpoint(E, line_AD)


Diagram description: The diagram contains points A, B, C, D, E, F, H. There is an obtuse triangle ABC. There is a line segment AD. There is a line segment BE. There is a line segment CF. Line AD is an altitude of triangle ABC from vertex A. Line BE is an altitude of triangle ABC from vertex B. Point H is the orthocenter of triangle ABC. Further, length of line AD is equal to length of line BE, area of triangle ABC is at most 20, and angle ABC is 120 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, H = scene.add.points(["A", "B", "C", "D", "E", "F", "H"])

triangleABC = scene.add.obtuse_triangle(A, B, C)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)
line_CF = scene.add.line_segment(C, F)

### relationships

scene.relate.is_altitude(line_AD, triangleABC, A)
scene.relate.is_altitude(line_BE, triangleABC, B)
scene.relate.is_orthocenter(H, triangleABC)

### Extra relationships

scene.constraint.eq(line_AD.length, line_BE.length)
scene.constraint.leq(triangleABC.area, 20.0)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('B'), scene.get_object('C')), 120)

scene.solver.numerical()
scene.plot()

is_altitude(line_AD, triangleABC, A)
is_altitude(line_BE, triangleABC, B)
is_orthocenter(H, triangleABC)


Diagram description: The diagram contains points A, B, C, D, E. There is an isosceles trapezoid ABCD. There is a line segment AC. There is a line segment BD. There is a line segment AD. There is a line segment BC. Angle ADC is obtuse. Line AC is perpendicular to line BD. Point E is the midpoint of line AC. Further, the length of line AC equals the length of line BD. Further, the area of the trapezoid is at most 20. Further, angle ADC measures 120 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

trapezoid1 = scene.add.isosceles_trapezoid(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_AD = scene.add.line_segment(A, D)
line_BC = scene.add.line_segment(B, C)

### relationships

scene.relate.obtuse_angle(A, D, C)
scene.relate.perpendicular(line_AC, line_BD)
scene.relate.is_midpoint(E, line_AC)

### Extra relationships

scene.constraint.eq(line_AC.length, line_BD.length)
scene.constraint.leq(trapezoid1.area, 20.0)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('D'), scene.get_object('C')), 120)

scene.solver.numerical()
scene.plot()

obtuse_angle(A, D, C)
perpendicular(line_AC, line_BD)
is_midpoint(E, line_AC)


Diagram description: The diagram contains points A, B, C, D, E, F, G, H. There is a major arc with center A and endpoints B and C. There is a line segment DE. There is a line segment CF. There is a line segment GH. Line DE intersects line CF at point C. Point D lies on the major arc. Line DE is perpendicular to line GH.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H"])

major_arc1 = scene.add.major_arc(A, B, C)
line_DE = scene.add.line_segment(D, E)
line_CF = scene.add.line_segment(C, F)
line_GH = scene.add.line_segment(G, H)

### relationships

scene.relate.lines_intersect_at(line_DE, line_CF, C)
scene.relate.point_lies_on(D, major_arc1)
scene.relate.perpendicular(line_DE, line_GH)

scene.solver.numerical()
scene.plot()

lines_intersect_at(line_DE, line_CF, C)
point_lies_on(D, major_arc1)
perpendicular(line_DE, line_GH)


Diagram description: The diagram contains points A, B, C, D, E. There is a triangle with vertices A, B, C. There is a line segment AD. There is a line segment BE. There is a line segment AC. Line AD is an altitude of triangle ABC from vertex A. Line BE is a median of triangle ABC from vertex B. Point E lies on line AC.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E = scene.add.points(["A", "B", "C", "D", "E"])

triangleABC = scene.add.triangle(A, B, C)
line_altitude = scene.add.line_segment(A, D)
line_median = scene.add.line_segment(B, E)
line_AC = scene.add.line_segment(A, C)

### relationships

scene.relate.is_altitude(line_altitude, triangleABC, A)
scene.relate.is_median(line_median, triangleABC, B)
scene.relate.point_lies_on(E, line_AC)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F, G. There is an acute triangle ABC. There is a line segment AD. There is a line segment EF. There is a line segment BG. There is a line segment BC. The line AD is an altitude of triangle ABC from vertex A. The line EF is the perpendicular bisector of line BC. Points A, D, and E are collinear. Further, the length of line AD equals the length of line BG. Further, the area of triangle ABC is at most 12. Further, the angle BAC measures 60 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

triangleABC = scene.add.acute_triangle(A, B, C)
line_altitude_from_A = scene.add.line_segment(A, D)
line_perpendicular_bisector = scene.add.line_segment(E, F)
line_median_from_B = scene.add.line_segment(B, G)
line_BC = scene.add.line_segment(B, C)

### relationships

scene.relate.is_altitude(line_altitude_from_A, triangleABC, A)
scene.relate.perpendicular_bisector_at(line_BC, line_perpendicular_bisector)
scene.relate.collinear(A, D, E)

### Extra relationships

scene.constraint.eq(line_altitude_from_A.length, line_median_from_B.length)
scene.constraint.leq(triangleABC.area, 12.0)
scene.constraint.eq(scene.angle(scene.get_object('B'), scene.get_object('A'), scene.get_object('C')), 60)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a trapezoid ABCD. There are line segments AC, BD, and CE. Line CE bisects the angle ACB. Line AC and line BD intersect at point F. Line CE is perpendicular to line AC.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

trapezoid1 = scene.add.trapezoid(A, B, C, D)
line_AC = scene.add.line_segment(A, C)
line_BD = scene.add.line_segment(B, D)
line_angle_bisector = scene.add.line_segment(C, E)

### relationships

scene.relate.angle_bisector(A, C, B, line_angle_bisector)
scene.relate.lines_intersect_at(line_AC, line_BD, F)
scene.relate.perpendicular(line_angle_bisector, line_AC)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a circle with center A. There is a line segment BD. There is a line segment AC. There is a line segment EF. Line BD is a diameter of the circle. Line BD is perpendicular to line AC. Line AC is parallel to line EF. Further, the length of line AC is equal to half the length of line BD. Further, the length of line EF is less than or equal to the length of line AC. Further, angle BAC is a right angle.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.is_diameter(line_BD, circle1)
scene.relate.perpendicular(line_BD, line_AC)
scene.relate.parallel(line_AC, line_EF)

### Extra relationships

scene.constraint.eq(line_AC.length, line_BD.length / 2)
scene.constraint.leq(line_EF.length, line_AC.length)
scene.constraint.eq(scene.angle(scene.get_object('B'), scene.get_object('A'), scene.get_object('C')), 90)

scene.solver.numerical()
scene.plot()

is_diameter(line_BD, circle1)
perpendicular(line_BD, line_AC)
parallel(line_AC, line_EF)


Diagram description: The diagram contains points A, B, C, D, E, F. There is a circle with center A. There are line segments BD, AC, and EF. Line BD is a diameter of the circle. Line BD is perpendicular to line AC. Points E, F, and A are collinear.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.is_diameter(line_BD, circle1)
scene.relate.perpendicular(line_BD, line_AC)
scene.relate.collinear(E, F, A)

scene.solver.numerical()
scene.plot()

is_diameter(line_BD, circle1)
perpendicular(line_BD, line_AC)
collinear(E, F, A)


Diagram description: The diagram contains points A, B, C, D, E, F, G, H, I. There is a triangle ABC. There is a line segment AD. There is a line segment BE. There is a line segment CF. There is a line segment AG. There is a line segment BH. There is a line segment CI. There is a line BC. Line AD is an altitude from vertex A of triangle ABC. Line BE is an altitude from vertex B of triangle ABC. Line AG is an angle bisector of angle CAB. Further, the length of line AD is equal to the length of line BE. Further, the area of triangle ABC is at most 12. Further, angle ABC is 60 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G, H, I = scene.add.points(["A", "B", "C", "D", "E", "F", "G", "H", "I"])

triangleABC = scene.add.triangle(A, B, C)
lineAD = scene.add.line_segment(A, D)
lineBE = scene.add.line_segment(B, E)
lineCF = scene.add.line_segment(C, F)
lineAG = scene.add.line_segment(A, G)
lineBH = scene.add.line_segment(B, H)
lineCI = scene.add.line_segment(C, I)
line_L = scene.add.line(B, C)

### relationships

scene.relate.is_altitude(lineAD, triangleABC, A)
scene.relate.is_altitude(lineBE, triangleABC, B)
scene.relate.angle_bisector(C, A, B, lineAG)

### Extra relationships

scene.constraint.eq(lineAD.length, lineBE.length)
scene.constraint.leq(triangleABC.area, 12.0)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('B'), scene.get_object('C')), 60)

scene.solver.numerical()
scene.plot()

is_altitude(lineAD, triangleABC, A)
is_altitude(lineBE, triangleABC, B)
angle_bisector(C, A, B, lineAG)


Diagram description: The diagram contains points A, B, C, D, E, F. There is a scalene triangle ABC. There are line segments AD, BE, and DF. Line AD is an altitude of triangle ABC from vertex A. Line BE is a median of triangle ABC from vertex B. Angle BAC is acute. Further, length of line AD is equal to length of line BE, the slope of line DF is less than or equal to 0, and angle BAC is equal to 60 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

triangleABC = scene.add.scalene_triangle(A, B, C)
line_altitude_from_A = scene.add.line_segment(A, D)
line_median_from_B = scene.add.line_segment(B, E)
line_perpendicular_bisector = scene.add.line(D, F)

### relationships

scene.relate.is_altitude(line_altitude_from_A, triangleABC, A)
scene.relate.is_median(line_median_from_B, triangleABC, B)
scene.relate.acute_angle(B, A, C)

### Extra relationships

scene.constraint.eq(line_altitude_from_A.length, line_median_from_B.length)
scene.constraint.leq(line_perpendicular_bisector.slope, 0)
scene.constraint.eq(scene.angle(scene.get_object('B'), scene.get_object('A'), scene.get_object('C')), 60)

scene.solver.numerical()
scene.plot()


Diagram description: The diagram contains points A, B, C, D, E, F. There is a circle with center A. There is a line segment BD. There is a line segment AC. There is a line segment EF. Line BD is a diameter of the circle. Line BD is perpendicular to line AC. Line EF is a chord of the circle.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

circle1 = scene.add.circle(A)
line_BD = scene.add.line_segment(B, D)
line_AC = scene.add.line_segment(A, C)
line_EF = scene.add.line_segment(E, F)

### relationships

scene.relate.is_diameter(line_BD, circle1)
scene.relate.perpendicular(line_BD, line_AC)
scene.relate.is_chord(line_EF, circle1)

scene.solver.numerical()
scene.plot()

is_diameter(line_BD, circle1)
perpendicular(line_BD, line_AC)
is_chord(line_EF, circle1)


Diagram description: The diagram contains points A, B, C, D, E, F. There is an acute triangle ABC. There is a line segment AD. There is a line segment BE. There is a line segment CF. Line AD is a median of triangle ABC. Line BE is an altitude of triangle ABC. Line AD is perpendicular to line BE. Further, length of line AD is equal to length of line BE, area of triangle ABC is less than or equal to 12, and angle ABE is 90 degrees.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F = scene.add.points(["A", "B", "C", "D", "E", "F"])

triangleABC = scene.add.acute_triangle(A, B, C)
line_AD = scene.add.line_segment(A, D)
line_BE = scene.add.line_segment(B, E)
line_CF = scene.add.line_segment(C, F)

### relationships

scene.relate.is_median(line_AD, triangleABC, A)
scene.relate.is_altitude(line_BE, triangleABC, B)
scene.relate.perpendicular(line_AD, line_BE)

### Extra relationships

scene.constraint.eq(line_AD.length, line_BE.length)
scene.constraint.leq(triangleABC.area, 12.0)
scene.constraint.eq(scene.angle(scene.get_object('A'), scene.get_object('B'), scene.get_object('E')), 90)

scene.solver.numerical()
scene.plot()

is_median(line_AD, triangleABC, A)
is_altitude(line_BE, triangleABC, B)
perpendicular(line_AD, line_BE)


Diagram description: The diagram contains points A, B, C, D. There is a circle with center A. There is a major arc with center B, start point C, end point D. There is a line segment BC. There is a line segment CD. There is a line segment AD. Point B lies on the circle. Point C lies on the circle. Line segment BC is a diameter of the circle. Further, the length of line segment AD equals the length of line segment BC.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D = scene.add.points(["A", "B", "C", "D"])

circle1 = scene.add.circle(A)
semicircle1 = scene.add.major_arc(B, C, D)
line_BC = scene.add.line_segment(B, C)
line_CD = scene.add.line_segment(C, D)
line_AD = scene.add.line_segment(A, D)

### relationships

scene.relate.point_lies_on(B, circle1)
scene.relate.point_lies_on(C, circle1)
scene.relate.is_diameter(line_BC, circle1)

### Extra relationships

scene.constraint.eq(line_AD.length, line_BC.length)

scene.solver.numerical()
scene.plot()

point_lies_on(B, circle1)
point_lies_on(C, circle1)
is_diameter(line_BC, circle1)


Diagram description: The diagram contains points A, B, C, D, E, F, G. There is a minor arc with center A from B to C. There is a quadrilateral with vertices D, E, F, G. There is a line segment DF. There is a line segment DE. The line DF is perpendicular to line DE. G is the midpoint of line DF. G lies on the minor arc with center A from B to C.

from pygeox import GeoScene

scene = GeoScene()

### objects

A, B, C, D, E, F, G = scene.add.points(["A", "B", "C", "D", "E", "F", "G"])

arc1 = scene.add.minor_arc(A, B, C)
quad1 = scene.add.quadrilateral(D, E, F, G)
line_DF = scene.add.line_segment(D, F)
line_DE = scene.add.line_segment(D, E)

### relationships

scene.relate.perpendicular(line_DF, line_DE)
scene.relate.is_midpoint(G, line_DF)
scene.relate.point_lies_on(G, arc1)

scene.solver.numerical()
scene.plot()

perpendicular(line_DF, line_DE)
is_midpoint(G, line_DF)
point_lies_on(G, arc1)