Viviani's Theorem Dynamic Illustration
Loading the math board and drawing, please wait…
In collections
Geometry Review
This example dynamically demonstrates Viviani's Theorem without words or numbers. It uses GeoGebra commands such as Polygon, Dilate, Segment, Circle, Intersect, Rotate, Vector, Centroid, CircleArc, PointIn, Line, OrthogonalLine, Angle, Midpoint, Translate to construct the illustration, suitable for middle school and above students to learn geometric transformations and triangle properties.
GeoGebra Commands & Parameters
Polygon(A, B, 3) → poly1, a, b, c, CDilate(A, If[0 < d ≤ 1, 1 - d, 0], B) → A'Segment(A, A') → eDilate(B, If[1 < d ≤ 2, 2 - d, 0], C) → B'Dilate(C, If[2 < d ≤ 3, 3 - d, 0], A) → C'Segment(A, B) → hSegment(A, C) → iSegment(B, C) → jCircle(A, (0.15 * h)) → kIntersect(k, i, 1) → DIntersect(k, h, 1) → ERotate(A, If[3.5 < d ≤ 4.5, ((d - 3.5) * pi / 3), 1.0471975511965976], A) → A'_1Rotate(A', If[3.5 < d ≤ 4.5, ((d - 3.5) * pi / 3), 1.0471975511965976], A) → A''Segment(A'_1, A'') → e'Rotate(A, If[4.5 < d ≤ 5.5, ((-(d - 4.5)) * pi / 3), -1.0471975511965976], B) → A'_2Rotate(A', If[4.5 < d ≤ 5.5, ((-(d - 4.5)) * pi / 3), -1.0471975511965976], B) → A''_1Segment(A'_2, A''_1) → e'_1Dilate(A, If[6 < d ≤ 7, 7 - d, 0], B) → A'_3Vector(A, A'_3) → uCircle(B, (0.15 * h)) → rIntersect(r, j, 1) → FIntersect(r, h, 1) → KDilate(B, If[8 < d ≤ 9, 9 - d, 0], C) → B'_1Vector(B, B'_1) → vCentroid(poly1) → LCircle(L, B) → pCircleArc(L, B, A) → qCircleArc(L, A, B) → tRotate(B, If[5.5 < d ≤ 6.5, (((d - 5.5) * 4) * pi / 3), (4 * pi / 3)], L) → B'_2Rotate(A, If[6.5 < d ≤ 7.5, (((d - 6.5) * 2) * pi / 3), (2 * pi / 3)], L) → A'_4PointIn(poly1) → RLine(A, B) → p_1Line(B, C) → q_1Line(C, A) → r_1OrthogonalLine(R, p_1) → s_1OrthogonalLine(R, q_1) → t_1OrthogonalLine(R, r_1) → a_1Intersect(r_1, a_1) → SIntersect(t_1, q_1) → TIntersect(p_1, s_1) → UAngle(B, U, R) → αAngle(C, T, R) → βAngle(R, S, A) → γMidpoint(A, B) → VSegment(R, T) → lSegment(R, S) → mSegment(R, U) → nLine(C, V) → sCircle(C, m) → c_1Intersect(c_1, s) → M, NCircle(N, l) → d_1Intersect(d_1, s) → O, PDilate(R, If[7 < d ≤ 8, 8 - d, 0], S) → R'Segment(R, R') → f_1Dilate(R, If[8 < d ≤ 9, 9 - d, 0], T) → R'_1Segment(R, R'_1) → g_1Angle(C, V, B) → δDilate(R, If[9 < d ≤ 10, 10 - d, 0], U) → R'_2Segment(R, R'_2) → h_1Dilate(C, If[11 < d ≤ 12, 12 - d, 0], N) → C'_1Dilate(N, If[12 < d ≤ 13, 13 - d, 0], P) → N'Dilate(P, If[13 < d ≤ 14, 14 - d, 0], V) → P'Segment(C, C'_1) → i_1Segment(N, N') → j_1Segment(P, P') → k_1Dilate(R, If[15 < d ≤ 16, 16 - d, 0], N) → R'_3Vector(R, R'_3) → wTranslate(R, w) → R'_4Translate(R', w) → R''Rotate(R'_4, If[16 < d ≤ 17, ((-(d - 16)) * pi / 3), ((-pi)) / 3], N) → QDilate(R, If[17 < d ≤ 18, 18 - d, 0], P) → R'_5Vector(R, R'_5) → u_1Translate(R, u_1) → R'_6Translate(R'_1, u_1) → WRotate(R'_6, If[18 < d ≤ 19, ((d - 18) * pi / 3), pi / 3], P) → ZRotate(W, If[18 < d ≤ 19, ((d - 18) * pi / 3), pi / 3], P) → W'Dilate(R, If[19 < d ≤ 20, 20 - d, 0], P) → R'_7Vector(R, R'_7) → v_1Translate(R, v_1) → R'_8Translate(R'_2, v_1) → A_1Segment(R'_8, A_1) → e_1Dilate(R', If[15 < d ≤ 16, 16 - d, 0], C) → R''_{1}Vector(R', R''_{1}) → w_1Translate(R, w_1) → R'_{9}Translate(R', w_1) → R''_{2}Segment(R'_{9}, R''_{2}) → f_2Rotate(R'_{9}, If[16 < d ≤ 17, ((-(d - 16)) * pi / 3), ((-pi)) / 3], R''_{1}) → B_1Rotate(R''_{2}, If[16 < d ≤ 17, ((-(d - 16)) * pi / 3), ((-pi)) / 3], R''_{1}) → C_1Segment(B_1, C_1) → l_1Dilate(R'_1, If[17 < d ≤ 18, 18 - d, 0], N) → D_1Vector(R'_1, D_1) → b_1Translate(R, b_1) → R'_{10}Translate(R'_1, b_1) → E_1Segment(R'_{10}, E_1) → m_1Rotate(R'_{10}, If[18 < d ≤ 19, ((d - 18) * pi / 3), pi / 3], N) → F_1Rotate(E_1, If[18 < d ≤ 19, ((d - 18) * pi / 3), pi / 3], N) → G_1Segment(F_1, G_1) → n_1