def createPlacement(self): scene = Scene() triangle = scene.nondegenerate_triangle(labels=('A', 'B', 'C')) A, B, C = triangle.points A1 = scene.free_point(label='A1') B1 = scene.free_point(label='B1') C1 = scene.free_point(label='C1') A1.inside_triangle_constraint(triangle) B1.inside_triangle_constraint(triangle) C1.inside_triangle_constraint(triangle) angleA = A.angle(B, C) angleA.ratio_constraint(A.angle(B, C1), 3) angleA.ratio_constraint(A.angle(C1, B1), 3) angleA.ratio_constraint(A.angle(B1, C), 3) angleB = B.angle(A, C) angleB.ratio_constraint(B.angle(C, A1), 3) angleB.ratio_constraint(B.angle(A1, C1), 3) angleB.ratio_constraint(B.angle(C1, A), 3) angleC = C.angle(A, B) angleC.ratio_constraint(C.angle(A, B1), 3) angleC.ratio_constraint(C.angle(B1, A1), 3) angleC.ratio_constraint(C.angle(A1, B), 3) return iterative_placement(scene)
def createPlacement(self): scene = Scene() triangle = scene.nondegenerate_triangle(labels=('A', 'B', 'C')) A, B, C = triangle.points bisectorA = A.angle(B, C).bisector_line() bisectorB = B.angle(A, C).bisector_line() bisectorC = C.angle(A, B).bisector_line() X_bisector = bisectorA.intersection_point(bisectorB, label='X_bisector') Y_bisector = bisectorA.intersection_point(bisectorC, label='Y_bisector') altitudeA = A.line_through(scene.perpendicular_foot_point(A, B.line_through(C))) altitudeB = B.line_through(scene.perpendicular_foot_point(B, A.line_through(C))) altitudeC = C.line_through(scene.perpendicular_foot_point(C, A.line_through(B))) X_altitude = altitudeA.intersection_point(altitudeB, label='X_altitude') Y_altitude = altitudeA.intersection_point(altitudeC, label='Y_altitude') perpA = B.segment(C).perpendicular_bisector_line() perpB = A.segment(C).perpendicular_bisector_line() perpC = A.segment(B).perpendicular_bisector_line() X_perp = perpA.intersection_point(perpB, label='X_perp') Y_perp = perpA.intersection_point(perpC, label='Y_perp') medianA = A.line_through(B.segment(C).middle_point()) medianB = B.line_through(A.segment(C).middle_point()) medianC = C.line_through(A.segment(B).middle_point()) X_median = medianA.intersection_point(medianB, label='X_median') Y_median = medianA.intersection_point(medianC, label='Y_median') return iterative_placement(scene)
def createPlacement(self): scene = Scene() triangle = scene.nondegenerate_triangle(labels=('A', 'B', 'C')) O = scene.circumcentre_point(triangle, label='O') return iterative_placement(scene)
def testTwoObtuseAngles(self): scene = Scene() A, B, C = scene.nondegenerate_triangle(labels=('A', 'B', 'C')).points A.angle(B, C).is_obtuse_constraint() B.angle(A, C).is_obtuse_constraint() explainer = Explainer(scene) self.assertRaises(ContradictionError, explainer.explain)
def createScene(self): scene = Scene() A, B, C = scene.nondegenerate_triangle(labels=('A', 'B', 'C')).points A.segment(C).perpendicular_constraint(B.segment(C), comment='Given: AC ⟂ BC') D = A.segment(B).middle_point(label='D') return scene
def createScene(self): scene = Scene() A, B, C = scene.nondegenerate_triangle(labels=('A', 'B', 'C')).points D = A.segment(B).free_point(label='D') E = A.segment(C).free_point(label='E') X = D.line_through(C).intersection_point(E.line_through(B), label='X') return scene
def createScene(self): scene = Scene() A = scene.free_point(label='A') B = scene.free_point(label='B') A.segment(B).middle_point(label='C') A.line_through(B, label='AB') return scene
def createPlacement(self): scene = Scene() A, B, C = scene.nondegenerate_triangle(labels=('A', 'B', 'C')).points A.segment(B).congruent_constraint(A.segment(C)) altitude = A.perpendicular_line(B.line_through(C), label='AD') D = altitude.intersection_point(B.line_through(C, label='BC')) B.segment(C).ratio_constraint(A.segment(D), 2 / sp.sqrt(3)) return iterative_placement(scene)
def createPlacement(self): scene = Scene() triangle = scene.nondegenerate_triangle(labels=('A', 'B', 'C')) A, B, C = triangle.points D = scene.orthocentre_point(triangle) D.inside_triangle_constraint(triangle) A.segment(B).congruent_constraint(C.segment(D)) return iterative_placement(scene)
def createScene(self): scene = Scene() A, B, C = scene.nondegenerate_triangle(labels=('A', 'B', 'C')).points F = B.segment(C).middle_point(label='F') D = scene.perpendicular_foot_point(C, A.line_through(B), label='D') E = scene.perpendicular_foot_point(B, A.line_through(C), label='E') G = scene.perpendicular_foot_point(F, D.line_through(E), label='G') return scene
def createScene(self): scene = Scene() A, B, C = scene.nondegenerate_triangle(labels=('A', 'B', 'C')).points D = scene.free_point(label='D') E = scene.free_point(label='E') A.segment(C).congruent_constraint(B.segment(C)) A.segment(D).congruent_constraint(B.segment(D)) A.segment(E).congruent_constraint(B.segment(E)) return scene
def createPlacement(self): scene = Scene() triangle = scene.nondegenerate_triangle(labels=('A', 'B', 'C')) A, B, C = triangle.points A.segment(B).ratio_constraint(B.segment(C), 2) A.segment(B).perpendicular_constraint(B.segment(C)) F = scene.incentre_point(triangle, label='F') E = scene.perpendicular_foot_point(B, A.line_through(F), label='E') return iterative_placement(scene)
def createScene(self): scene = Scene() triangle = scene.nondegenerate_triangle(labels=('A', 'B', 'C')) A, B, C = triangle.points D = scene.orthocentre_point(triangle, label='D') D.inside_triangle_constraint(triangle) H = A.line_through(D).intersection_point(B.line_through(C), label='H') G = C.line_through(D).intersection_point(A.line_through(B), label='G') A.segment(B).congruent_constraint(C.segment(D)) return scene
def createPlacement(self): scene = Scene() A, B, C = scene.nondegenerate_triangle(labels=('A', 'B', 'C')).points A.distance_constraint(B, 5) C.distance_constraint(B, 3) C.distance_constraint(A, 4) D = scene.free_point(label='D') A.vector(D).parallel_constraint(C.vector(B)) B.vector(D).parallel_constraint(C.vector(A)) return iterative_placement(scene)
def createScene(self): scene = Scene() A = scene.free_point(label='A') B = scene.free_point(label='B') B.not_equal_constraint(A) C = scene.free_point(label='C') D = scene.free_point(label='D') C.collinear_constraint(A, B) D.collinear_constraint(A, B) return scene
def createPlacement(self): scene = Scene() A = scene.free_point(label='A', x=1, y=1) B = scene.free_point(label='B', x=5, y=-3) C = scene.free_point(label='C', x=3, y=10) D = scene.free_point(label='D', x=4, y=11) AB = A.line_through(B) CD = C.line_through(D) AB.intersection_point(CD, label='E') return iterative_placement(scene)
def createScene(self): scene = Scene() triangle = scene.nondegenerate_triangle(labels=('A', 'B', 'C')) A, B, C = triangle.points altitudeA = scene.altitude(triangle, A) altitudeB = scene.altitude(triangle, B) A1 = altitudeA.intersection_point(B.line_through(C), label='A1') B1 = altitudeB.intersection_point(A.line_through(C), label='B1') C.angle(A, B).is_acute_constraint() return scene
def createPlacement(self): scene = Scene() A = scene.free_point(label='A') B = scene.free_point(label='B') C = scene.free_point(label='C') M = A.segment(B).middle_point(label='M') l = C.line_through(M) D = l.free_point(label='D') para = scene.parallel_line(A.line_through(B), D) A1 = para.intersection_point(A.line_through(C), label='A1') B1 = para.intersection_point(B.line_through(C), label='B1') return iterative_placement(scene)
def createScene(self): scene = Scene() A = scene.free_point(label='A') B = scene.free_point(label='B') C = scene.free_point(label='C') D = scene.free_point(label='D') E = scene.free_point(label='E') F = scene.free_point(label='F') A.not_equal_constraint(B) A.not_equal_constraint(C) A.collinear_constraint(B, C) E.opposite_side_constraint(D, A.line_through(B)) F.same_side_constraint(D, A.line_through(B)) return scene
def napoleonic(A: Scene.Point, B: Scene.Point, C: Scene.Point): c0 = A.circle_through(B) c1 = B.circle_through(A) line = A.line_through(B, layer='auxiliary') V = c0.intersection_point(c1, label=C.label + '1') equilateral = Scene.Triangle(A, B, V) V.opposite_side_constraint(C, line) scene.centroid_point(equilateral, label=C.label + '2')
def createScene(self): scene = Scene() triangle = scene.nondegenerate_triangle(labels=['A', 'B', 'C']) A, B, C = triangle.points def napoleonic(A, B, C): equilateral = scene.equilateral_triangle(A, B, C.label + '1') _, _, V = equilateral.points line = A.line_through(B, layer='auxiliary') comment = Comment('$%{triangle:equilateral}$ is facing away from $%{triangle:triangle}$', {'equilateral': equilateral, 'triangle': triangle}) V.opposite_side_constraint(C, line, comment=comment) D = scene.incentre_point(equilateral, label=C.label + '2') napoleonic(A, B, C) napoleonic(C, A, B) napoleonic(B, C, A) return scene
def createPlacement(self): scene = Scene() triangle = scene.nondegenerate_triangle(labels=('A', 'B', 'C')) A, B, C = triangle.points def napoleonic(A: Scene.Point, B: Scene.Point, C: Scene.Point): c0 = A.circle_through(B) c1 = B.circle_through(A) line = A.line_through(B, layer='auxiliary') V = c0.intersection_point(c1, label=C.label + '1') equilateral = Scene.Triangle(A, B, V) V.opposite_side_constraint(C, line) scene.centroid_point(equilateral, label=C.label + '2') napoleonic(A, B, C) napoleonic(C, A, B) napoleonic(B, C, A) return iterative_placement(scene)
def createPlacement(self): scene = Scene() triangle = scene.nondegenerate_triangle(labels=('A', 'B', 'C')) A, B, C = triangle.points A.distance_constraint('B', 5) C.distance_constraint('B', 4) C.distance_constraint('A', 3) scene.incircle(triangle, label='incircle') scene.circumcircle(triangle, label='circumcircle') return iterative_placement(scene)
def napoleonic(A, B, C): circleAB = A.circle_through(B, layer='invisible') circleBA = B.circle_through(A, layer='invisible') V = circleAB.intersection_point(circleBA, label=C.label + '_1') equilateral = Scene.Triangle(A, B, V) A.scene.equilateral_constraint(equilateral, comment=LazyComment( 'Given: %s is equilateral', equilateral)) line = A.line_through(B, layer='auxiliary') V.opposite_side_constraint(C, line, comment=LazyComment( 'Given: %s is outward of %s', V, triangle)) D = scene.circumcentre_point(equilateral, label=C.label + '_2')
def createScene(self): scene = Scene() triangle = scene.nondegenerate_triangle(labels=('A', 'B', 'C')) A, B, C = triangle.points A.segment(B).perpendicular_constraint(A.segment(C)) I = scene.incentre_point(triangle, label='I') J = scene.orthocentre_point(Scene.Triangle(A, B, I), label='J') return scene
def createScene(self): scene = Scene() triangle = scene.nondegenerate_triangle(labels=('A', 'B', 'C')) triangle2 = Scene.Triangle( *[side.middle_point() for side in triangle.sides]) D = scene.circumcentre_point(triangle, label='D') E = scene.orthocentre_point(triangle2, label='E') return scene
def createScene(self): scene = Scene() triangle = scene.nondegenerate_triangle(labels=('A', 'B', 'C')) A, B, C = triangle.points scene.equilateral_constraint(triangle) D = B.translated_point(A.vector(B), 2, label='D') F = scene.perpendicular_foot_point(D, B.line_through(C), label='F') return scene
def createScene(self): scene = Scene() triangle = scene.nondegenerate_triangle(labels=('A', 'B', 'C')) A, B, C = triangle.points A.segment(B).perpendicular_constraint(A.segment(C)) I = scene.incentre_point(triangle, label='I') J = scene.orthocentre_point(Scene.Triangle(A, B, I), label='J') # Additional constructions D = A.line_through(B).intersection_point(I.line_through(J), label='D') E = A.line_through(I).intersection_point(B.line_through(J), label='E') return scene
def setUp(self): scene = Scene() A = scene.free_point(label='A') B = scene.free_point(label='B') C = scene.free_point(label='C') D = scene.free_point(label='D') E = scene.free_point(label='E') F = scene.free_point(label='F') G = scene.free_point(label='G') H = scene.free_point(label='H') self.AB = A.segment(B) self.CD = C.segment(D) self.EF = E.segment(F) self.GH = G.segment(H) self.startTime = time.time()
def createPlacement(self): scene = Scene() A = scene.free_point(label='A') B = scene.free_point(label='B') C = scene.free_point(label='C') D = scene.free_point(label='D') E = scene.free_point(label='E') scene.convex_polygon_constraint(A, B, C, D, E) A.segment(B).congruent_constraint(B.segment(C)) A.segment(B).congruent_constraint(C.segment(D)) A.segment(B).congruent_constraint(D.segment(E)) A.segment(B).congruent_constraint(E.segment(A)) A.segment(C).congruent_constraint(B.segment(D)) A.segment(C).congruent_constraint(C.segment(E)) A.segment(C).congruent_constraint(D.segment(A)) A.segment(C).congruent_constraint(E.segment(B)) return iterative_placement(scene)