Law of Cosines Proof Without Words (Visual Geometric Demonstration)

Law of Cosines Proof Without Words (Visual Geometric Demonstration)
Loading the math board and drawing, please wait…
2018-02-16 07:13
① 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

  1. Intersect(xAxis, yAxis) → B
  2. Point(yAxis) → C
  3. Point(xAxis) → D
  4. CircleSector(B, C, D) → c
  5. PointIn(c) → A
  6. Polygon(B, A, 4) → poly3, s, t, a, b, L, M
  7. Midpoint(L, B) → T
  8. Circle(B, A) → e
  9. Intersect(e, xAxis, 2) → E
  10. Point(xAxis) → F
  11. Ray(E, F) → f
  12. Point(f) → G
  13. Polygon(G, B, 4) → poly2, n, p, q, r, J, K
  14. If(4 < d < 5, Translate[M, Vector[J, Dilate[J, 5 - d, K]]], Translate[M, Vector[J, Dilate[J, 0, K]]]) → U
  15. Line(U, xAxis) → i_1
  16. Polygon(A, G, 4) → poly1, j, k, l, m, H, I
  17. Midpoint(A, H) → S
  18. Vector(T, S) → w
  19. Translate(M, w) → M'
  20. Polygon(B, A, G) → t1, g, h, i
  21. OrthogonalLine(M', h) → h_1
  22. Intersect(i_1, h_1) → A_1
  23. Intersect(h_1, i) → Z
  24. Midpoint(B, K) → N
  25. OrthogonalLine(N, h) → f_1
  26. OrthogonalLine(N, f_1) → g_1
  27. Intersect(g_1, poly2) → O, P
  28. Intersect(f_1, poly2) → Q, R
  29. Polygon(N, P, B, R) → q1, n_1, p_1, b_1, r_1
  30. Polygon(N, R, G, O) → q2, n_2, r_2, g_2, o
  31. Polygon(N, Q, J, P) → q3, n_3, q_1, j_1, p_2
  32. Polygon(Q, N, O, K) → q4, q_2, n_4, o_1, k_1
  33. If(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]]]]) → q5
  34. If(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]]]]) → q6
  35. If(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]]]]) → q7
  36. If(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]]]]) → q8
  37. Polygon(L, M, B, A) → q9, l_1, m_1, b_2, a_1
  38. If(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]]]]) → q10
  39. If(4 < d < 5, Translate[B, Vector[J, Dilate[J, 5 - d, K]]], Translate[B, Vector[J, Dilate[J, 0, K]]]) → V
  40. Polygon(M, U, V, B) → q11, m_2, u, v, b_3
  41. Translate(B, w) → B'
  42. Translate(L, w) → L'
  43. Translate(A, w) → A'
  44. Vector(N, G) → u_1
  45. Vector(N, A) → v_1
  46. Vector(N, H) → w_1
  47. Vector(N, I) → c_1
  48. Translate(Q, w_1) → Q'
  49. Translate(R, u_1) → R'
  50. Intersect(h_1, p) → W
  51. Polygon(M, A_1, Z, B) → q12, s_1, t_1, d_1, e_1
  52. Polygon(A_1, Z, G, U) → q13, f_2, h_2, i_2, j_2
  53. If(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']]]]) → q14
  54. If(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']]]]) → q15
  55. If(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']) → q16
  56. If(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']) → q17
  57. Circle(B, Segment[Q', B']) → c_2
  58. Circle(U, Radius[c_2]) → d_2