Algebra Tiles for Factoring a Difference of Squares

Algebra Tiles for Factoring a Difference of Squares
Loading the math board and drawing, please wait…
2024-04-23 01:07
This GeoGebra lesson uses algebra tiles to visually represent and then factor a difference of squares. Students can watch how arranging and grouping tiles transforms a geometric model of a^2−b^2 into the factored form (a−b)(a+b), highlighting the step-by-step correspondence between tile counts and algebraic terms. Key concepts include the difference-of-squares identity, factoring quadratic polynomials, and special products/expansion–contraction relationships. The construction combines geometry and dynamic algebra elements: Corner and Polygon/Segment build the layout framework; Shuffle and Sequence drive the animation and ordering of tile placement; Element, Translate, and Mirror support positioning and symmetry-based grouping; If and Max manage conditional states; Polynomial constructs the symbolic expressions; Split divides the model into algebraically meaningful parts; Midpoint and Vertex help locate pivots and labels; Text displays intermediate expressions and labels (e.g., question prompts and computed results). Suitable for grades 9–12 and classroom instruction or guided practice on factoring quadratic polynomials.

GeoGebra Commands & Parameters

  1. Corner(5) → AppSize
  2. Shuffle({{1, -1}, {1, -4}, {1, -9}, {1, -16}, {4, -1}, {4, -9}, {-1, 1}, {-1, 4}, {-1, 9}, {-1, 16}, {-4, 1}, {-4, 9}, {9, -1}, {9, -4}, {-9, 1}, {-9, 4}}) → options, {{9, -4}, {1, -4}, {-1, 9}, {-1, 4}, {1, -16}, {4, -1}, {-1, 16}, {9, -1}, {-4, 1}, {-9, 4}, {-4, 9}, {-9, 1}, {1, -9}, {-1, 1}, {4, -9}, {1, -1}}
  3. Element(options, 1 + Mod[countQuestion, Length[options]]) → current
  4. Max(4 / firstsq, 1.5) → xlength
  5. If(first ≥ 0, AnimPointBlueLeft, AnimPointBlueRight) → Tx1
  6. Polynomial((first * x^(2)) + second) → f
  7. Polygon((0, 0), (xlength, 0), 4) → tileX2
  8. Translate(tileX2, Vector[Tx1]) → tileX2'
  9. Flatten(Sequence[Sequence[Translate[tileX2', Vector[((xlength + borderwidth) * (ii, jj))]], ii, 0, firstsq - 1], jj, 0, firstsq - 1]) → tilesX2
  10. Segment((x(Vertex[tileX2', 1]), 8.2), (x(Vertex[tilesX2(-1), 3]), 8.2)) → g
  11. Midpoint(g) → PosLab1
  12. If(first ≥ 0, AnimPointPinkRight, AnimPointPinkLeft) → CornerSmallSquares
  13. Polygon((0, 0), (unitlength, 0), 4) → tileU
  14. Translate(tileU, Vector[CornerSmallSquares]) → tileU'
  15. Flatten(Sequence[Sequence[Translate[tileU', Vector[((unitlength + borderwidth) * (ii, jj))]], ii, 0, secondsq - 1], jj, 0, secondsq - 1]) → tilesUnit
  16. Text(text3, PosLab1, true, true, 0, 1) → label1
  17. Vertex(tilesX2(firstsq), 2) → LimX2
  18. Text(text2, PosLab4, true, true, 0, 1) → label3
  19. Polygon({(-1, 8), (-1, -3), (16, -3), (16, 8)}) → q1
  20. Polynomial((abs(first) * x^(2))) → h
  21. If(first ≥ 0, (((((If[firstsq ≟ 1, "", "("] * Polynomial[(firstsq * x)]) * If[firstsq ≟ 1, "", ")"]) * "^2-") * secondsq) * "^2"), (((((secondsq * "^2-") * If[firstsq ≟ 1, "", "("]) * Polynomial[(firstsq * x)]) * If[firstsq ≟ 1, "", ")"]) * "^2")) → difSquares
  22. Split(difSquares, {"-"}) → l4
  23. If(first ≥ 0, (((((((("(" * Polynomial[(firstsq * x)]) * "-") * secondsq) * ")(") * Polynomial[(firstsq * x)]) * "+") * secondsq) * ")"), (((((((("(" * secondsq) * "-") * Polynomial[(firstsq * x)]) * ")(") * secondsq) * "+") * Polynomial[(firstsq * x)]) * ")")) → thirdRow
  24. Flatten(Sequence[Sequence[Tx1 + (Tilex2size / firstsq, Tilex2size / firstsq) / 2 + ((ii, jj) * Tilex2size / firstsq), ii, 0, firstsq - 1], jj, 0, firstsq - 1]) → posLabelsx2
  25. Text(second, (If[first ≥ 0, 7, 0] + sqrt(abs(second)) / 2, 1), true, true, 0, 0) → text8
  26. Polygon({(0, 0), (unitlength, 0), (unitlength, xlength), (0, xlength)}) → tileX
  27. Polygon((borderwidth, borderwidth), (xlength - borderwidth, borderwidth), 4) → tileX2W
  28. Polygon({(borderwidth, borderwidth), (unitlength - borderwidth, borderwidth), (unitlength - borderwidth, xlength - borderwidth), (borderwidth, xlength - borderwidth)}) → tileXW
  29. Polygon((borderwidth, borderwidth), (unitlength - borderwidth, borderwidth), 4) → tileUW
  30. Translate(tileUW, Vector[CornerSmallSquares]) → tileUW'
  31. Flatten(Sequence[Sequence[Translate[tileUW', Vector[((unitlength + borderwidth) * (ii, jj))]], ii, 0, secondsq - 1], jj, 0, secondsq - 1]) → tilesUW
  32. Translate(tileX2W, Vector[Tx1]) → tileX2W'
  33. Flatten(Sequence[Sequence[Translate[tileX2W', Vector[((xlength + borderwidth) * (ii, jj))]], ii, 0, firstsq - 1], jj, 0, firstsq - 1]) → tilesx2W
  34. Translate(hGuideline, Vector[(Vector[Corner[4] - Corner[1]] / 500 * 16)]) → hGuideline'
  35. Translate(tileX, PosxTile) → tileX'
  36. Flatten(Sequence[Sequence[Translate[tileX', ((ii * (borderwidth + unitlength)), (jj * (borderwidth + xlength)))], ii, 0, secondsq - 1], jj, 0, firstsq - 1]) → tilesxV
  37. Mirror(tilesxV, Line[(8 - borderwidth, 0), (0, 8 - borderwidth)]) → tilesxH
  38. Translate(tileXW, PosxTile) → tileXW'
  39. Sequence(Sequence[Translate[tileXW', ((ii * (borderwidth + unitlength)), (jj * (borderwidth + xlength)))], ii, 0, secondsq - 1], jj, 0, firstsq - 1) → m1, {{0.9186363204500627, 0.9186363204500627}, {0.9186363204500627, 0.9186363204500627}, {0.9186363204500627, 0.9186363204500627}}
  40. Zip(Text[(If[first ≤ 0, "-", ""] * "x²"), PP, true, true, 0, 0], PP, CentsX2) → l1
  41. Zip(Text["x", PP, true, true, 0, 0], PP, CentsXH) → l2
  42. Zip(Centroid[PP], PP, tilesxV) → CentsXV
  43. Zip(Text["-x", PP, true, true, 0, 0], PP, CentsXV) → l3
  44. Zip(Text[(If[first ≤ 0, "", "-"] * "1"), PP, true, true, 0, 0], PP, CentsU) → l5
  45. Text(Polynomial[(first * x^(2))], (x(PosLab1), 1), true, true, 0, 0) → text1
  46. Segment((x(Vertex[tilesUnit(1), 1]), 8.2), (x(Vertex[tilesUnit(-1), 3]), 8.2)) → k
  47. Segment((-0.4, y(Vertex[tilesUnit(1), 1])), (-0.4, y(Vertex[tilesUnit(-1), 3]))) → j
  48. Midpoint(j) → PosLab3
  49. Text(secondsq, PosLab3, true, true, -1, 0) → label4
  50. Segment((-0.4, y(Vertex[tileX2', 1])), (-0.4, y(Vertex[tilesX2(-1), 3]))) → i
  51. Midpoint(i) → PosLab2
  52. Text(If[first ≤ 0, (("(" * Polynomial[((sgn(first) * sqrt(abs(first))) * x)]) * ")"), ("" * Polynomial[((sgn(first) * sqrt(abs(first))) * x)])], PosLab2, true, true, -1, 0) → label2
  53. Text("+", Midpoint[Vertex[g, If[first ≥ 0, 2, 1]], Vertex[k, If[first ≥ 0, 1, 2]]], true, true, 0, 1) → text4
  54. Text("+", Midpoint[Vertex[i, If[first ≥ 0, 1, 2]], Vertex[j, If[first ≥ 0, 2, 1]]] + (0, 0.1), true, true, -1, 0) → text5

AI Drawing Prompt Reference

Create a visual algebra-tiles setup for factoring a difference of squares. Build two aligned tile grids on a plane: a horizontal grid representing an x² region and a second square tile grid underneath representing the unit part, with the number of tiles in each grid controlled by two parameters. Place the x² tiles by translating and aligning them into a neat row/rectangle arrangement, and place the unit tiles as a matching lattice so they can be grouped consistently with the x² tiles. Add a guiding horizontal divider segment to help comparison, and include text labels showing the symbols for x² and x, together with an intermediate expression for the difference of squares. Arrange all tiles and labels in one coherent layout so the grouping corresponds to the factorization steps.
The prompt above was compiled from the original drawing commands and is for reference only.