代数方块演示平方差分解:从图形到因式
几何画板及绘图内容加载中,请稍等……
该范例通过代数方块的摆放与配对,把“平方差”对应的几何表示转化为可分解的代数式,并展示分解过程中的动态变化。核心数学概念包括:平方差公式(a^2−b^2=(a−b)(a+b))、二次多项式的特殊乘积与因式分解、代数项的合并/展开对应关系。作图要点是用几何与文本对象联动代数结构:利用Corner创建角点布局;用Shuffle与Sequence控制方块摆放与动画顺序;用Element获取对象位置与数值;用Polygon与Segment/Translate/Rotate相关对象生成方块排列的轮廓与中间结构;借助Max/If等逻辑决定状态与显示;用Polynomial完成表达式构造;用Split、Mirror实现分块与对称关系;再用Midpoint、Vertex辅助关键点计算与定位;最后用Text与标签对象(如 PosLab1、label1、text3 等)在屏幕上同步呈现当前表达式与中间项。适合9-12年级或因式分解专题课、自主探究与课堂互动练习,帮助学生将代数规则与可视化模型建立对应。
GeoGebra 命令及参数
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 绘图提示语参考
绘制一组代数瓦片用于差平方分解的互动画面:在平面上先放置一个横向的x²区域方形瓦片网格,并在其下方放置一个单位瓦片网格(同样是方形铺排),其中两组网格的瓦片数量由两个参数决定。对x²区域进行相应的平移与对齐,使每个x²瓦片与其符号标记位置相配;再在单位瓦片区域中生成可与x²瓦片对应的竖向分量。添加一条用于分隔与对照的水平线,并在关键位置用文本显示x²、x、以及对应该差平方的中间表达。最后把x²区域与单位区域的元素组合到同一布局中,形成(a²−b²)到其分组乘积表达的视觉步骤。
以上提示语为根据原始绘图命令整理而来,仅供参考。