Geometric visualization of the binomial square: (a+b)² expansion

Geometric visualization of the binomial square: (a+b)² expansion
Loading the math board and drawing, please wait…
2024-06-26 16:55
In collections Binomische Formeln
This GeoGebra lesson demonstrates how the binomial square formula (e.g., (c+d)² and (g+h)²) can be understood by partitioning a square into area regions. By labeling the side lengths and the sub-areas, students can visually see why the expanded form contains the middle term 2cd (or 2gh), not just c² and d². The key math concept is the binomial theorem for squares: (x+y)² = x² + 2xy + y², combined with practice converting symbolic expressions correctly. Construction approach in GeoGebra: it uses Sequence and Element to generate parameters/parts, PolyLine, Segment, Point, Polygon (and rectangle-like scaffolding) to draw the divided regions, Text and Textfield to present questions, hints, and step labels, and If logic to provide feedback (correct/incorrect) and hints. Interactivity is supported with SelectedIndex, Join, and Sort, while additional primitives like CircleArc help with visual annotation. Best suited for middle school (around grade 7–8) algebra instruction, interactive classroom practice, and homework designed to connect algebraic expansion with geometric area reasoning.

GeoGebra Commands & Parameters

  1. Sequence(Random[1, 10], i, 1, 10) → randomNumbers, {6, 5, 2, 7, 6, 5, 2, 1, 10, 3}
  2. Element(randomNumbers, Mod[questionCount, Length[randomNumbers]] + 1) → randomNumber
  3. Textfield(input) → inputBox
  4. PolyLine(PosSB, Corner[txt021, 2] + (-0.5, 0.1), Corner[txt021, 1] + (0, 0.1), Corner[txt021, 4] + (0, 0.1), Corner[txt021, 3] + (0.1, 0.1), Corner[txt021, 2] + (0.1, 0.5), PosSB) → sb02
  5. Segment(PosP1, PosA1) → seg11
  6. Segment(PosP4, PosA2) → seg12
  7. Point(Diagonalen) → PointP
  8. Segment(PosC + (0, disCap2), PosD + (0, disCap2)) → segCap11
  9. Segment(PosD + (0, disCap1), PosP3 + (0, disCap1)) → segCap12
  10. Segment(PosP3 + (0, disCap1), PosC + (0, disCap1)) → segCap13
  11. Segment(PosA + ((-disCap2), 0), PosD + ((-disCap2), 0)) → segCap14
  12. Segment(PosA + ((-disCap1), 0), PosP4 + ((-disCap1), 0)) → segCap15
  13. Segment(PosD + ((-disCap1), 0), PosP4 + ((-disCap1), 0)) → segCap16
  14. PolyLine(PosSB, Corner[txt041, 2] + (-0.5, 0.1), Corner[txt041, 1] + (0, 0.1), Corner[txt041, 4] + (0, 0.1), Corner[txt041, 3] + (0.1, 0.1), Corner[txt041, 2] + (0.1, 0.5), PosSB) → sb04
  15. PolyLine(PosSB, Corner[txt051, 2] + (-0.5, 0.1), Corner[txt051, 1] + (0, 0.1), Corner[txt051, 4] + (0, 0.1), Corner[txt051, 3] + (0.1, 0.1), Corner[txt051, 2] + (0.1, 0.5), PosSB) → sb05
  16. Polygon(PosDD1, PosDD1 + (((-widthdd)) / 2, ((-heightdd)) / 2), PosDD1 + (widthdd / 2, ((-heightdd)) / 2), PosDD1 + (widthdd / 2, heightdd / 2), PosDD1 + (((-widthdd)) / 2, heightdd / 2), PosDD1 + (((-widthdd)) / 2, ((-heightdd)) / 2)) → polydd1, f, g, h, i, j, k
  17. PolyLine(PosDD1 + (((-widthdd)) / 2, ((-heightdd)) / 2), PosDD1 + (widthdd / 2, ((-heightdd)) / 2), PosDD1 + (widthdd / 2, heightdd / 2), PosDD1 + (((-widthdd)) / 2, heightdd / 2), PosDD1 + (((-widthdd)) / 2, ((-heightdd)) / 2)) → pldd1
  18. Polygon(PosDD2, PosDD2 + (((-widthdd)) / 2, ((-heightdd)) / 2), PosDD2 + (widthdd / 2, ((-heightdd)) / 2), PosDD2 + (widthdd / 2, heightdd / 2), PosDD2 + (((-widthdd)) / 2, heightdd / 2), PosDD2 + (((-widthdd)) / 2, ((-heightdd)) / 2)) → polydd2, posdd2, l, m, n, p, q
  19. Polygon(PosDD3, PosDD3 + (((-widthdd)) / 2, ((-heightdd)) / 2), PosDD3 + (widthdd / 2, ((-heightdd)) / 2), PosDD3 + (widthdd / 2, heightdd / 2), PosDD3 + (((-widthdd)) / 2, heightdd / 2), PosDD3 + (((-widthdd)) / 2, ((-heightdd)) / 2)) → polydd3, posdd3, r, s, t, a, b
  20. Polygon(PosDD4, PosDD4 + (((-widthdd)) / 2, ((-heightdd)) / 2), PosDD4 + (widthdd / 2, ((-heightdd)) / 2), PosDD4 + (widthdd / 2, heightdd / 2), PosDD4 + (((-widthdd)) / 2, heightdd / 2), PosDD4 + (((-widthdd)) / 2, ((-heightdd)) / 2)) → polydd4, posdd4, c, d, e, f_1, g_1
  21. PolyLine(PosDD2 + (((-widthdd)) / 2, ((-heightdd)) / 2), PosDD2 + (widthdd / 2, ((-heightdd)) / 2), PosDD2 + (widthdd / 2, heightdd / 2), PosDD2 + (((-widthdd)) / 2, heightdd / 2), PosDD2 + (((-widthdd)) / 2, ((-heightdd)) / 2)) → pldd2
  22. PolyLine(PosDD3 + (((-widthdd)) / 2, ((-heightdd)) / 2), PosDD3 + (widthdd / 2, ((-heightdd)) / 2), PosDD3 + (widthdd / 2, heightdd / 2), PosDD3 + (((-widthdd)) / 2, heightdd / 2), PosDD3 + (((-widthdd)) / 2, ((-heightdd)) / 2)) → pldd3
  23. PolyLine(PosDD4 + (((-widthdd)) / 2, ((-heightdd)) / 2), PosDD4 + (widthdd / 2, ((-heightdd)) / 2), PosDD4 + (widthdd / 2, heightdd / 2), PosDD4 + (((-widthdd)) / 2, heightdd / 2), PosDD4 + (((-widthdd)) / 2, ((-heightdd)) / 2)) → pldd4
  24. Text("\textsf{\Big{a²}}", PosDD2 + (0, 0.05), false, true, 0, 0) → txtDD2
  25. Text("\textsf{\Big{b²}}", PosDD4 + (0, 0.05), false, true, 0, 0) → txtDD4
  26. Text("\textsf{\Big{a \cdot b}}", PosDD1 + (0, 0.05), false, true, 0, 0) → txtDD1
  27. Text("\textsf{\Big{a \cdot b}}", PosDD3 + (0, 0.05), false, true, 0, 0) → txtDD3
  28. If(IndexOf[true, Sequence[IsInRegion[PosDD1 + (((-widthdd)) / 2, ((-heightdd)) / 2), QuadratList(k, 1)], k, 1, 5]] ≟ IndexOf[true, Sequence[IsInRegion[PosDD1 + (widthdd / 2, heightdd / 2), QuadratList(k, 1)], k, 1, 5]], IndexOf[true, Sequence[IsInRegion[PosDD1, QuadratList(k, 1)], k, 1, 5]], NaN) → RegionDD1
  29. If(IndexOf[true, Sequence[IsInRegion[PosDD2 + (((-widthdd)) / 2, ((-heightdd)) / 2), QuadratList(k, 1)], k, 1, 5]] ≟ IndexOf[true, Sequence[IsInRegion[PosDD2 + (widthdd / 2, heightdd / 2), QuadratList(k, 1)], k, 1, 5]], IndexOf[true, Sequence[IsInRegion[PosDD2, QuadratList(k, 1)], k, 1, 5]], NaN) → RegionDD2
  30. If(IndexOf[true, Sequence[IsInRegion[PosDD3 + (((-widthdd)) / 2, ((-heightdd)) / 2), QuadratList(k, 1)], k, 1, 5]] ≟ IndexOf[true, Sequence[IsInRegion[PosDD3 + (widthdd / 2, heightdd / 2), QuadratList(k, 1)], k, 1, 5]], IndexOf[true, Sequence[IsInRegion[PosDD3, QuadratList(k, 1)], k, 1, 5]], NaN) → RegionDD3
  31. If(IndexOf[true, Sequence[IsInRegion[PosDD4 + (((-widthdd)) / 2, ((-heightdd)) / 2), QuadratList(k, 1)], k, 1, 5]] ≟ IndexOf[true, Sequence[IsInRegion[PosDD4 + (widthdd / 2, heightdd / 2), QuadratList(k, 1)], k, 1, 5]], IndexOf[true, Sequence[IsInRegion[PosDD4, QuadratList(k, 1)], k, 1, 5]], NaN) → RegionDD4
  32. Text("\textsf{(a + b)² = a² + ab + ab + b²\vphantom{g}}", Pos72, false, true, 0, 0) → txt071
  33. Text("\textsf{\left(a + b\right)² = a² \bold{+ ab + ab} + b²\\\phantom{\left(a + b\right)² }= a² \bold{+ 2ab} + b²\vphantom{g}}", Pos72, false, true, 0, 0) → txt082
  34. PolyLine(PosSB, Corner[txt101, 2] + (-0.5, 0.1), Corner[txt101, 1] + (0, 0.1), Corner[txt101, 4] + (0, 0.1), Corner[txt101, 3] + (0.1, 0.1), Corner[txt101, 2] + (0.1, 0.5), PosSB) → sb10
  35. CircleArc(Midpoint[Pos101, Pos103], Pos103, Pos101) → arc101
  36. CircleArc(Midpoint[Pos101, Pos104], Pos104, Pos101) → arc102
  37. CircleArc(Midpoint[Pos102, Pos103], Pos103, Pos102) → arc103
  38. CircleArc(Midpoint[Pos102, Pos104], Pos104, Pos102) → arc104
  39. If(PointP ∈ Diagonalen(1), 1, 2) → CaseP
  40. Segment(PosA + (0, (-disCap2)), PosB + (0, (-disCap2))) → segCap21
  41. Segment(PosA + (0, (-disCap1)), PosQ1 + (0, (-disCap1))) → segCap22
  42. Segment(PosQ1 + (0, (-disCap1)), PosB + (0, (-disCap1))) → segCap23
  43. Segment(PosB + (disCap2, 0), PosC + (disCap2, 0)) → segCap24
  44. Segment(PosB + (disCap1, 0), PosQ2 + (disCap1, 0)) → segCap25
  45. Segment(PosC + (disCap1, 0), PosQ2 + (disCap1, 0)) → segCap26
  46. Sequence(PosImgTrixi1 + (0, -1.5) + (k * (0, (-heightdd) - 0.75)), k, 0, 3) → PosPark
  47. SelectedIndex(dropdown41) → index4
  48. SelectedIndex(dropdown111) → index111
  49. SelectedIndex(dropdown112) → index112
  50. Join({{1}, Shuffle[2…5]}) → Order031
  51. Sort({"$\textsf{\phantom{2 \cdot a \cdot b. }\vphantom{2g}}$", "$\textsf{a + b. \vphantom{2g}}$", "$\textsf{a \(-\) b. \vphantom{2g}}$", "$\textsf{a \cdot b. \vphantom{2g}}$", "$\textsf{2 \cdot a \cdot b. \vphantom{2g}}$"}, Order031) → dropdown031
  52. SelectedIndex(dropdown031) → index031
  53. If(step ≟ 6, (7.37, 3.86), (7.37 - 0.5, 1.25)) → PosImgFink1
  54. Sequence(PolyLine[MPList(k) + {(((-widthdd)) / 2, ((-heightdd)) / 2) + (-0.1, -0.1), (widthdd / 2, ((-heightdd)) / 2) + (0.1, -0.1), (widthdd / 2, heightdd / 2) + (0.1, 0.1), (((-widthdd)) / 2, heightdd / 2) + (-0.1, 0.1), (((-widthdd)) / 2, ((-heightdd)) / 2) + (-0.1, -0.1)}], k, 1, 4) → DDArea
  55. PolyLine(PosSB, Corner[txt061, 2] + (0.1, 0.5), Corner[txt061, 2] + (0.1, 0.1), Corner[txt061, 1] + (0, 0.1), Corner[txt061, 4] + (0, 0.1), Corner[txt061, 3] + (0.1, 0.1), Corner[txt061, 2] + (0.1, 1), PosSB) → sb06
  56. PolyLine(PosSB, Corner[txt073, 2] + (0.1, 0.5), Corner[txt073, 2] + (0.1, 0.1), Corner[txt073, 1] + (0, 0.1), Corner[txt073, 4] + (0, 0.1), Corner[txt073, 3] + (0.1, 0.1), Corner[txt073, 2] + (0.1, 1), PosSB) → sb07
  57. Text("\textsf{\bold{Zieh mich!}}", PosPark(1) + (0, 1.25), false, true, 0, 0) → CapDD5
  58. Segment(Midpoint[Corner[CapDD5, 1], Corner[CapDD5, 2]], Midpoint[Corner[CapDD5, 1], Corner[CapDD5, 2]] + (0, -0.3)) → arrowDD5
  59. PolyLine(PosSB, Corner[txt031, 2] + (0.1, 0.75), Corner[txt031, 2] + (0.1, 0.1), Corner[txt031, 2] + (-0.5, 0.1), Corner[txt031, 1] + (0, 0.1), Corner[txt031, 4] + (0, 0.1), Corner[txt031, 3] + (0.1, 0.1), Corner[txt031, 2] + (0.1, 1.6), PosSB) → sb03
  60. PolyLine(PosSB, Corner[txt06b1, 2] + (-0.25, 0), Corner[txt06b1, 1] + (-0.1, 0), Corner[txt06b1, 4] + (-0.1, 0.1), Corner[txt06b1, 3] + (0.1, 0.1), Corner[txt06b1, 2] + (0.1, 0.35), PosSB) → sb06b
  61. Join({Sequence[Text[UnicodeToLetter[65 + k], Midpoint[Corner[4] + (RasterPixMat * ((k * RasterStepXY), RasterMaxY)), Corner[4] + (RasterPixMat * (((k + 1) * RasterStepXY), RasterMaxY))], false, true, 0, -1], k, 0, RasterMaxX / RasterStepXY - 1], Sequence[Text[("" * k), Midpoint[Corner[4] + (RasterPixMat * (RasterMaxX, ((k - 1) * RasterStepXY))), Corner[4] + (RasterPixMat * (RasterMaxX, (k * RasterStepXY)))], false, true, 1, 0], k, 1, RasterMaxY / RasterStepXY]}) → RasterBeschriftung
  62. Sequence(Sequence[Corner[4] + (RasterPixMat * ((k * RasterStepXY), (m * RasterStepXY))), k, 0, RasterMaxX / RasterStepXY], m, 0, RasterMaxY / RasterStepXY) → RasterPunkte
  63. Join({Sequence[Segment[Corner[4] + (RasterPixMat * ((k * RasterStepXY), 0)), Corner[4] + (RasterPixMat * ((k * RasterStepXY), RasterMaxY))], k, 0, RasterMaxX / RasterStepXY], Sequence[Segment[Corner[4] + (RasterPixMat * (0, (k * RasterStepXY))), Corner[4] + (RasterPixMat * (RasterMaxX, (k * RasterStepXY)))], k, 0, RasterMaxY / RasterStepXY]}) → RasterStrecken
  64. SelectedIndex(dropdown032) → index032
  65. Text("\textsf{\Big{a²}}", Midpoint[PosD, PosP5], false, true, 0, 0) → txtCap1
  66. Text("\textsf{\Big{a \cdot b}}", Midpoint[PosC, PosP5], false, true, 0, 0) → txtCap4
  67. Text("\textsf{\Big{a \cdot b}}", Midpoint[PosA, PosP5], false, true, 0, 0) → txtCap3
  68. Text("\textsf{\Big{b²}}", Midpoint[PosB, PosP5], false, true, 0, 0) → txtCap2
  69. If(selection61 ≟ 1 ∨ selection61 ≟ 4, If[selection62 ≠ 1 ∧ selection62 ≠ 4, Pos62, Pos63], selection61 ≟ 3, Pos61, Pos64) → PosEnd61
  70. If(selection62 ≟ 1 ∨ selection62 ≟ 4, Pos62, selection62 ≟ 3, Pos61, Pos64) → PosEnd62
  71. If(selection63 ≟ 1 ∨ selection63 ≟ 4, Pos63, selection63 ≟ 3, Pos61, Pos64) → PosEnd63
  72. If(selection64 ≟ 1 ∨ selection64 ≟ 4, If[selection63 ≠ 1 ∧ selection63 ≠ 4, Pos63, Pos62], selection64 ≟ 3, Pos61, Pos64) → PosEnd64
  73. Text((("\textsf{\colorbox{d0d0d0}{" * If[selection61 ≟ 3, "a²\vphantom{b²}", selection61 ≟ 1 ∨ selection61 ≟ 4, "a \cdot b\vphantom{b²}", selection61 ≟ 2, "b²", "\phantom{a² \cdot b²}"]) * "}}"), Pos61 + (slider6 * (PosEnd61 - Pos61)), false, true, 0, 0) → txtM61
  74. Text((("\textsf{\colorbox{d0d0d0}{" * If[selection62 ≟ 3, "a²\vphantom{b²}", selection62 ≟ 1 ∨ selection62 ≟ 4, "a \cdot b\vphantom{b²}", selection62 ≟ 2, "b²", "\phantom{a² \cdot b²}"]) * "}}"), Pos62 + (slider6 * (PosEnd62 - Pos62)), false, true, 0, 0) → txtM62
  75. Text((("\textsf{\colorbox{d0d0d0}{" * If[selection63 ≟ 3, "a²\vphantom{b²}", selection63 ≟ 1 ∨ selection63 ≟ 4, "a \cdot b\vphantom{b²}", selection63 ≟ 2, "b²", "\phantom{a² \cdot b²}"]) * "}}"), Pos63 + (slider6 * (PosEnd63 - Pos63)), false, true, 0, 0) → txtM63
  76. Text((("\textsf{\colorbox{d0d0d0}{" * If[selection64 ≟ 3, "a²\vphantom{b²}", selection64 ≟ 1 ∨ selection64 ≟ 4, "a \cdot b\vphantom{b²}", selection64 ≟ 2, "b²", "\phantom{a² \cdot b²}"]) * "}}"), Pos64 + (slider6 * (PosEnd64 - Pos64)), false, true, 0, 0) → txtM64
  77. Text("\textsf{{\bold{a²}}}", Pos6B1, false, true, 0, 0) → Cap6B1
  78. Text("\textsf{{\bold{a \cdot b}}}", Pos6B2, false, true, 0, 0) → Cap6B2
  79. Text("\textsf{{\bold{a \cdot b}}}", Pos6B3, false, true, 0, 0) → Cap6B3
  80. Text("\textsf{{\bold{b²}}}", Pos6B4, false, true, 0, 0) → Cap6B4
  81. Text("\textsf{{\bold{(a + b)²}}}", Midpoint[PosA, PosC], false, true, 0, 0) → Cap6B5
  82. Text("\textsf{\bold{\textcolor{#50c1ce}{Zieh mich!}}}", PosPark6B + (((-par1) * sidelength / 2), 0.05), false, true, -1, 0) → CapZiehMich6B
  83. PolyLine(PosSB, Corner[txt081, 2] + (-0.25, -0.1), Corner[txt081, 1] + (0, -0.1), Corner[txt081, 4] + (0, 0.1), Corner[txt081, 3] + (0.1, 0.1), Corner[txt081, 2] + (0.1, 0.5), PosSB) → sb08
  84. PolyLine(PosSB, Corner[txt032, 2] + (-0.25, 0), Corner[txt032, 1] + (-0.1, 0), Corner[txt032, 4] + (-0.1, 0.1), Corner[txt032, 3] + (0.1, 0.1), Corner[txt032, 2] + (0.1, 0.35), PosSB) → sb032
  85. Text((((("\textsf{" * If[anim07 ≟ 0, "A = ", "\phantom{A = }"]) * "(a + b)²") * If[anim07 ≟ 1, " = ", "\phantom{ = }"]) * "\vphantom{gb²}}"), Pos73 + (anim07 * (Pos72 + (-3, 0) - Pos73)), false, true, 0, 0) → txtAnim072
  86. Text((("\textsf{" * If[anim07 ≟ 0, "A = ", "\phantom{A = }"]) * "a² + a \cdot b + a \cdot b + b²\vphantom{b²g}}"), Pos71 + (anim07 * (Pos72 + (1.35, 0) - Pos71)), false, true, 0, 0) → txtAnim071
  87. Text("\textsf{\left(a + b\right)² = a² + 2ab + b²\vphantom{g}}", Pos72, false, true, 0, 0) → txt092
  88. If(step ≟ 2, slider1 ≟ 1, step ≟ 6.5, Pos6B4 ≟ MPList(2), step ≟ 7, anim07 ≟ 1, step ≟ 11, correct111 ∧ correct112 ∧ movedP, true, step ≟ 3, correctdd031, step ≟ 3.5, correctdd032, step ≟ 4, correct4 ∧ correctdd1 ∧ correctdd2 ∧ correctdd3 ∧ correctdd4 ∧ zugeordnet ∧ correctDD4, step ≟ 6, Sort[{selection61, selection62, selection63, selection64}] ≟ {1, 2, 3, 4} ∧ (correctSelection ∨ slider6 ≟ 1)) → clickableBtnNext

AI Drawing Prompt Reference

Draw a geometric visualization of the binomial square, featuring a square with sides of random length, divided into four regions labeled a², ab, ab, and b². The diagram also includes circular arcs and lines to facilitate understanding of the binomial square's expanded form.
The prompt above was compiled from the original drawing commands and is for reference only.