Algebra Tiles for Factoring a Difference of Squares
Loading the math board and drawing, please wait…
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
Corner(5) → AppSizeShuffle({{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}}Element(options, 1 + Mod[countQuestion, Length[options]]) → currentMax(4 / firstsq, 1.5) → xlengthIf(first ≥ 0, AnimPointBlueLeft, AnimPointBlueRight) → Tx1Polynomial((first * x^(2)) + second) → fPolygon((0, 0), (xlength, 0), 4) → tileX2Translate(tileX2, Vector[Tx1]) → tileX2'Flatten(Sequence[Sequence[Translate[tileX2', Vector[((xlength + borderwidth) * (ii, jj))]], ii, 0, firstsq - 1], jj, 0, firstsq - 1]) → tilesX2Segment((x(Vertex[tileX2', 1]), 8.2), (x(Vertex[tilesX2(-1), 3]), 8.2)) → gMidpoint(g) → PosLab1If(first ≥ 0, AnimPointPinkRight, AnimPointPinkLeft) → CornerSmallSquaresPolygon((0, 0), (unitlength, 0), 4) → tileUTranslate(tileU, Vector[CornerSmallSquares]) → tileU'Flatten(Sequence[Sequence[Translate[tileU', Vector[((unitlength + borderwidth) * (ii, jj))]], ii, 0, secondsq - 1], jj, 0, secondsq - 1]) → tilesUnitText(text3, PosLab1, true, true, 0, 1) → label1Vertex(tilesX2(firstsq), 2) → LimX2Text(text2, PosLab4, true, true, 0, 1) → label3Polygon({(-1, 8), (-1, -3), (16, -3), (16, 8)}) → q1Polynomial((abs(first) * x^(2))) → hIf(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")) → difSquaresSplit(difSquares, {"-"}) → l4If(first ≥ 0, (((((((("(" * Polynomial[(firstsq * x)]) * "-") * secondsq) * ")(") * Polynomial[(firstsq * x)]) * "+") * secondsq) * ")"), (((((((("(" * secondsq) * "-") * Polynomial[(firstsq * x)]) * ")(") * secondsq) * "+") * Polynomial[(firstsq * x)]) * ")")) → thirdRowFlatten(Sequence[Sequence[Tx1 + (Tilex2size / firstsq, Tilex2size / firstsq) / 2 + ((ii, jj) * Tilex2size / firstsq), ii, 0, firstsq - 1], jj, 0, firstsq - 1]) → posLabelsx2Text(second, (If[first ≥ 0, 7, 0] + sqrt(abs(second)) / 2, 1), true, true, 0, 0) → text8Polygon({(0, 0), (unitlength, 0), (unitlength, xlength), (0, xlength)}) → tileXPolygon((borderwidth, borderwidth), (xlength - borderwidth, borderwidth), 4) → tileX2WPolygon({(borderwidth, borderwidth), (unitlength - borderwidth, borderwidth), (unitlength - borderwidth, xlength - borderwidth), (borderwidth, xlength - borderwidth)}) → tileXWPolygon((borderwidth, borderwidth), (unitlength - borderwidth, borderwidth), 4) → tileUWTranslate(tileUW, Vector[CornerSmallSquares]) → tileUW'Flatten(Sequence[Sequence[Translate[tileUW', Vector[((unitlength + borderwidth) * (ii, jj))]], ii, 0, secondsq - 1], jj, 0, secondsq - 1]) → tilesUWTranslate(tileX2W, Vector[Tx1]) → tileX2W'Flatten(Sequence[Sequence[Translate[tileX2W', Vector[((xlength + borderwidth) * (ii, jj))]], ii, 0, firstsq - 1], jj, 0, firstsq - 1]) → tilesx2WTranslate(hGuideline, Vector[(Vector[Corner[4] - Corner[1]] / 500 * 16)]) → hGuideline'Translate(tileX, PosxTile) → tileX'Flatten(Sequence[Sequence[Translate[tileX', ((ii * (borderwidth + unitlength)), (jj * (borderwidth + xlength)))], ii, 0, secondsq - 1], jj, 0, firstsq - 1]) → tilesxVMirror(tilesxV, Line[(8 - borderwidth, 0), (0, 8 - borderwidth)]) → tilesxHTranslate(tileXW, PosxTile) → tileXW'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}}Zip(Text[(If[first ≤ 0, "-", ""] * "x²"), PP, true, true, 0, 0], PP, CentsX2) → l1Zip(Text["x", PP, true, true, 0, 0], PP, CentsXH) → l2Zip(Centroid[PP], PP, tilesxV) → CentsXVZip(Text["-x", PP, true, true, 0, 0], PP, CentsXV) → l3Zip(Text[(If[first ≤ 0, "", "-"] * "1"), PP, true, true, 0, 0], PP, CentsU) → l5Text(Polynomial[(first * x^(2))], (x(PosLab1), 1), true, true, 0, 0) → text1Segment((x(Vertex[tilesUnit(1), 1]), 8.2), (x(Vertex[tilesUnit(-1), 3]), 8.2)) → kSegment((-0.4, y(Vertex[tilesUnit(1), 1])), (-0.4, y(Vertex[tilesUnit(-1), 3]))) → jMidpoint(j) → PosLab3Text(secondsq, PosLab3, true, true, -1, 0) → label4Segment((-0.4, y(Vertex[tileX2', 1])), (-0.4, y(Vertex[tilesX2(-1), 3]))) → iMidpoint(i) → PosLab2Text(If[first ≤ 0, (("(" * Polynomial[((sgn(first) * sqrt(abs(first))) * x)]) * ")"), ("" * Polynomial[((sgn(first) * sqrt(abs(first))) * x)])], PosLab2, true, true, -1, 0) → label2Text("+", Midpoint[Vertex[g, If[first ≥ 0, 2, 1]], Vertex[k, If[first ≥ 0, 1, 2]]], true, true, 0, 1) → text4Text("+", 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.