Geometric visualization of the binomial square: (a+b)² expansion
Loading the math board and drawing, please wait…
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
Sequence(Random[1, 10], i, 1, 10) → randomNumbers, {6, 5, 2, 7, 6, 5, 2, 1, 10, 3}Element(randomNumbers, Mod[questionCount, Length[randomNumbers]] + 1) → randomNumberTextfield(input) → inputBoxPolyLine(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) → sb02Segment(PosP1, PosA1) → seg11Segment(PosP4, PosA2) → seg12Point(Diagonalen) → PointPSegment(PosC + (0, disCap2), PosD + (0, disCap2)) → segCap11Segment(PosD + (0, disCap1), PosP3 + (0, disCap1)) → segCap12Segment(PosP3 + (0, disCap1), PosC + (0, disCap1)) → segCap13Segment(PosA + ((-disCap2), 0), PosD + ((-disCap2), 0)) → segCap14Segment(PosA + ((-disCap1), 0), PosP4 + ((-disCap1), 0)) → segCap15Segment(PosD + ((-disCap1), 0), PosP4 + ((-disCap1), 0)) → segCap16PolyLine(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) → sb04PolyLine(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) → sb05Polygon(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, kPolyLine(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)) → pldd1Polygon(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, qPolygon(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, bPolygon(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_1PolyLine(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)) → pldd2PolyLine(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)) → pldd3PolyLine(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)) → pldd4Text("\textsf{\Big{a²}}", PosDD2 + (0, 0.05), false, true, 0, 0) → txtDD2Text("\textsf{\Big{b²}}", PosDD4 + (0, 0.05), false, true, 0, 0) → txtDD4Text("\textsf{\Big{a \cdot b}}", PosDD1 + (0, 0.05), false, true, 0, 0) → txtDD1Text("\textsf{\Big{a \cdot b}}", PosDD3 + (0, 0.05), false, true, 0, 0) → txtDD3If(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) → RegionDD1If(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) → RegionDD2If(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) → RegionDD3If(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) → RegionDD4Text("\textsf{(a + b)² = a² + ab + ab + b²\vphantom{g}}", Pos72, false, true, 0, 0) → txt071Text("\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) → txt082PolyLine(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) → sb10CircleArc(Midpoint[Pos101, Pos103], Pos103, Pos101) → arc101CircleArc(Midpoint[Pos101, Pos104], Pos104, Pos101) → arc102CircleArc(Midpoint[Pos102, Pos103], Pos103, Pos102) → arc103CircleArc(Midpoint[Pos102, Pos104], Pos104, Pos102) → arc104If(PointP ∈ Diagonalen(1), 1, 2) → CasePSegment(PosA + (0, (-disCap2)), PosB + (0, (-disCap2))) → segCap21Segment(PosA + (0, (-disCap1)), PosQ1 + (0, (-disCap1))) → segCap22Segment(PosQ1 + (0, (-disCap1)), PosB + (0, (-disCap1))) → segCap23Segment(PosB + (disCap2, 0), PosC + (disCap2, 0)) → segCap24Segment(PosB + (disCap1, 0), PosQ2 + (disCap1, 0)) → segCap25Segment(PosC + (disCap1, 0), PosQ2 + (disCap1, 0)) → segCap26Sequence(PosImgTrixi1 + (0, -1.5) + (k * (0, (-heightdd) - 0.75)), k, 0, 3) → PosParkSelectedIndex(dropdown41) → index4SelectedIndex(dropdown111) → index111SelectedIndex(dropdown112) → index112Join({{1}, Shuffle[2…5]}) → Order031Sort({"$\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) → dropdown031SelectedIndex(dropdown031) → index031If(step ≟ 6, (7.37, 3.86), (7.37 - 0.5, 1.25)) → PosImgFink1Sequence(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) → DDAreaPolyLine(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) → sb06PolyLine(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) → sb07Text("\textsf{\bold{Zieh mich!}}", PosPark(1) + (0, 1.25), false, true, 0, 0) → CapDD5Segment(Midpoint[Corner[CapDD5, 1], Corner[CapDD5, 2]], Midpoint[Corner[CapDD5, 1], Corner[CapDD5, 2]] + (0, -0.3)) → arrowDD5PolyLine(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) → sb03PolyLine(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) → sb06bJoin({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]}) → RasterBeschriftungSequence(Sequence[Corner[4] + (RasterPixMat * ((k * RasterStepXY), (m * RasterStepXY))), k, 0, RasterMaxX / RasterStepXY], m, 0, RasterMaxY / RasterStepXY) → RasterPunkteJoin({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]}) → RasterStreckenSelectedIndex(dropdown032) → index032Text("\textsf{\Big{a²}}", Midpoint[PosD, PosP5], false, true, 0, 0) → txtCap1Text("\textsf{\Big{a \cdot b}}", Midpoint[PosC, PosP5], false, true, 0, 0) → txtCap4Text("\textsf{\Big{a \cdot b}}", Midpoint[PosA, PosP5], false, true, 0, 0) → txtCap3Text("\textsf{\Big{b²}}", Midpoint[PosB, PosP5], false, true, 0, 0) → txtCap2If(selection61 ≟ 1 ∨ selection61 ≟ 4, If[selection62 ≠ 1 ∧ selection62 ≠ 4, Pos62, Pos63], selection61 ≟ 3, Pos61, Pos64) → PosEnd61If(selection62 ≟ 1 ∨ selection62 ≟ 4, Pos62, selection62 ≟ 3, Pos61, Pos64) → PosEnd62If(selection63 ≟ 1 ∨ selection63 ≟ 4, Pos63, selection63 ≟ 3, Pos61, Pos64) → PosEnd63If(selection64 ≟ 1 ∨ selection64 ≟ 4, If[selection63 ≠ 1 ∧ selection63 ≠ 4, Pos63, Pos62], selection64 ≟ 3, Pos61, Pos64) → PosEnd64Text((("\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) → txtM61Text((("\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) → txtM62Text((("\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) → txtM63Text((("\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) → txtM64Text("\textsf{{\bold{a²}}}", Pos6B1, false, true, 0, 0) → Cap6B1Text("\textsf{{\bold{a \cdot b}}}", Pos6B2, false, true, 0, 0) → Cap6B2Text("\textsf{{\bold{a \cdot b}}}", Pos6B3, false, true, 0, 0) → Cap6B3Text("\textsf{{\bold{b²}}}", Pos6B4, false, true, 0, 0) → Cap6B4Text("\textsf{{\bold{(a + b)²}}}", Midpoint[PosA, PosC], false, true, 0, 0) → Cap6B5Text("\textsf{\bold{\textcolor{#50c1ce}{Zieh mich!}}}", PosPark6B + (((-par1) * sidelength / 2), 0.05), false, true, -1, 0) → CapZiehMich6BPolyLine(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) → sb08PolyLine(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) → sb032Text((((("\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) → txtAnim072Text((("\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) → txtAnim071Text("\textsf{\left(a + b\right)² = a² + 2ab + b²\vphantom{g}}", Pos72, false, true, 0, 0) → txt092If(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.