Law of Cosines Proof Without Words (Visual Geometric Demonstration)
Loading the math board and drawing, please wait…
① This GeoGebra example demonstrates the Law of Cosines (a² = b² + c² − 2bc·cosA) through a purely geometric, wordless proof, showing how areas of squares and sectors relate to the sides and angle of a triangle. ② Core mathematical concepts include the Law of Cosines, generalization of the Pythagorean theorem, triangle side-angle relationships, and area-preserving transformations. ③ Construction highlights: based on the summary, it uses commands such as Intersect, Point, CircleSector, PointIn, Polygon, Midpoint, Circle, Ray, If, Line, Vector, Translate, and OrthogonalLine, creating multiple polygons (poly1, poly2, poly3), circles, sectors, and auxiliary points to visually decompose and rearrange areas into an equality. ④ Suitable for high school geometry classes, visual proof demonstrations, teacher training, or self-learners interested in the intuitive foundation of trigonometric identities.
GeoGebra Commands & Parameters
Intersect(xAxis, yAxis) → BPoint(yAxis) → CPoint(xAxis) → DCircleSector(B, C, D) → cPointIn(c) → APolygon(B, A, 4) → poly3, s, t, a, b, L, MMidpoint(L, B) → TCircle(B, A) → eIntersect(e, xAxis, 2) → EPoint(xAxis) → FRay(E, F) → fPoint(f) → GPolygon(G, B, 4) → poly2, n, p, q, r, J, KIf(4 < d < 5, Translate[M, Vector[J, Dilate[J, 5 - d, K]]], Translate[M, Vector[J, Dilate[J, 0, K]]]) → ULine(U, xAxis) → i_1Polygon(A, G, 4) → poly1, j, k, l, m, H, IMidpoint(A, H) → SVector(T, S) → wTranslate(M, w) → M'Polygon(B, A, G) → t1, g, h, iOrthogonalLine(M', h) → h_1Intersect(i_1, h_1) → A_1Intersect(h_1, i) → ZMidpoint(B, K) → NOrthogonalLine(N, h) → f_1OrthogonalLine(N, f_1) → g_1Intersect(g_1, poly2) → O, PIntersect(f_1, poly2) → Q, RPolygon(N, P, B, R) → q1, n_1, p_1, b_1, r_1Polygon(N, R, G, O) → q2, n_2, r_2, g_2, oPolygon(N, Q, J, P) → q3, n_3, q_1, j_1, p_2Polygon(Q, N, O, K) → q4, q_2, n_4, o_1, k_1If(0 < d < 1, Polygon[Translate[Q, Vector[N, Dilate[N, 1 - d, I]]], Translate[N, Vector[N, Dilate[N, 1 - d, I]]], Translate[O, Vector[N, Dilate[N, 1 - d, I]]], Translate[K, Vector[N, Dilate[N, 1 - d, I]]]], Polygon[Translate[Q, Vector[N, Dilate[N, 0, I]]], Translate[N, Vector[N, Dilate[N, 0, I]]], Translate[O, Vector[N, Dilate[N, 0, I]]], Translate[K, Vector[N, Dilate[N, 0, I]]]]) → q5If(0 < d < 1, Polygon[Translate[N, Vector[N, Dilate[N, 1 - d, H]]], Translate[Q, Vector[N, Dilate[N, 1 - d, H]]], Translate[J, Vector[N, Dilate[N, 1 - d, H]]], Translate[P, Vector[N, Dilate[N, 1 - d, H]]]], Polygon[Translate[N, Vector[N, Dilate[N, 0, H]]], Translate[Q, Vector[N, Dilate[N, 0, H]]], Translate[J, Vector[N, Dilate[N, 0, H]]], Translate[P, Vector[N, Dilate[N, 0, H]]]]) → q6If(0 < d < 1, Polygon[Translate[N, Vector[N, Dilate[N, 1 - d, A]]], Translate[R, Vector[N, Dilate[N, 1 - d, A]]], Translate[G, Vector[N, Dilate[N, 1 - d, A]]], Translate[O, Vector[N, Dilate[N, 1 - d, A]]]], Polygon[Translate[N, Vector[N, Dilate[N, 0, A]]], Translate[R, Vector[N, Dilate[N, 0, A]]], Translate[G, Vector[N, Dilate[N, 0, A]]], Translate[O, Vector[N, Dilate[N, 0, A]]]]) → q7If(0 < d < 1, Polygon[Translate[N, Vector[N, Dilate[N, 1 - d, G]]], Translate[P, Vector[N, Dilate[N, 1 - d, G]]], Translate[B, Vector[N, Dilate[N, 1 - d, G]]], Translate[R, Vector[N, Dilate[N, 1 - d, G]]]], Polygon[Translate[N, Vector[N, Dilate[N, 0, G]]], Translate[P, Vector[N, Dilate[N, 0, G]]], Translate[B, Vector[N, Dilate[N, 0, G]]], Translate[R, Vector[N, Dilate[N, 0, G]]]]) → q8Polygon(L, M, B, A) → q9, l_1, m_1, b_2, a_1If(2 < d < 3, Polygon[Translate[L, Vector[T, Dilate[T, 3 - d, S]]], Translate[M, Vector[T, Dilate[T, 3 - d, S]]], Translate[B, Vector[T, Dilate[T, 3 - d, S]]], Translate[A, Vector[T, Dilate[T, 3 - d, S]]]], Polygon[Translate[L, Vector[T, Dilate[T, 0, S]]], Translate[M, Vector[T, Dilate[T, 0, S]]], Translate[B, Vector[T, Dilate[T, 0, S]]], Translate[A, Vector[T, Dilate[T, 0, S]]]]) → q10If(4 < d < 5, Translate[B, Vector[J, Dilate[J, 5 - d, K]]], Translate[B, Vector[J, Dilate[J, 0, K]]]) → VPolygon(M, U, V, B) → q11, m_2, u, v, b_3Translate(B, w) → B'Translate(L, w) → L'Translate(A, w) → A'Vector(N, G) → u_1Vector(N, A) → v_1Vector(N, H) → w_1Vector(N, I) → c_1Translate(Q, w_1) → Q'Translate(R, u_1) → R'Intersect(h_1, p) → WPolygon(M, A_1, Z, B) → q12, s_1, t_1, d_1, e_1Polygon(A_1, Z, G, U) → q13, f_2, h_2, i_2, j_2If(6 < d < 7, Polygon[Translate[M, Vector[B, Dilate[B, 7 - d, B']]], Translate[A_1, Vector[B, Dilate[B, 7 - d, B']]], Translate[Z, Vector[B, Dilate[B, 7 - d, B']]], Translate[B, Vector[B, Dilate[B, 7 - d, B']]]], Polygon[Translate[M, Vector[B, Dilate[B, 0, B']]], Translate[A_1, Vector[B, Dilate[B, 0, B']]], Translate[Z, Vector[B, Dilate[B, 0, B']]], Translate[B, Vector[B, Dilate[B, 0, B']]]]) → q14If(6 < d < 7, Polygon[Translate[A_1, Vector[G, Dilate[G, 7 - d, A']]], Translate[Z, Vector[G, Dilate[G, 7 - d, A']]], Translate[G, Vector[G, Dilate[G, 7 - d, A']]], Translate[U, Vector[G, Dilate[G, 7 - d, A']]]], Polygon[Translate[A_1, Vector[G, Dilate[G, 0, A']]], Translate[Z, Vector[G, Dilate[G, 0, A']]], Translate[G, Vector[G, Dilate[G, 0, A']]], Translate[U, Vector[G, Dilate[G, 0, A']]]]) → q15If(6 < d < 7, Rotate[Polygon[Translate[M, Vector[B, Dilate[B, 7 - d, M']]], Translate[A_1, Vector[B, Dilate[B, 7 - d, M']]], Translate[Z, Vector[B, Dilate[B, 7 - d, M']]], Translate[B, Vector[B, Dilate[B, 7 - d, M']]]], ((-(d - 6)) * π / 2), M'], Rotate[Polygon[Translate[M, Vector[B, Dilate[B, 0, M']]], Translate[A_1, Vector[B, Dilate[B, 0, M']]], Translate[Z, Vector[B, Dilate[B, 0, M']]], Translate[B, Vector[B, Dilate[B, 0, M']]]], ((-π)) / 2, M']) → q16If(6 < d < 7, Rotate[Polygon[Translate[A_1, Vector[G, Dilate[G, 7 - d, B']]], Translate[Z, Vector[G, Dilate[G, 7 - d, B']]], Translate[G, Vector[G, Dilate[G, 7 - d, B']]], Translate[U, Vector[G, Dilate[G, 7 - d, B']]]], ((-(d - 6)) * π / 2), B'], Rotate[Polygon[Translate[A_1, Vector[G, Dilate[G, 0, B']]], Translate[Z, Vector[G, Dilate[G, 0, B']]], Translate[G, Vector[G, Dilate[G, 0, B']]], Translate[U, Vector[G, Dilate[G, 0, B']]]], ((-π)) / 2, B']) → q17Circle(B, Segment[Q', B']) → c_2Circle(U, Radius[c_2]) → d_2