平方差因式分解:用代数块揭示公式结构
几何画板及绘图内容加载中,请稍等……
该范例展示如何将形如 a²−b² 的多项式用代数块/图形分割方式,转化为可因式分解的表达式。核心数学概念包括:平方差公式(a²−b²=(a−b)(a+b))、二次多项式的因式分解,以及利用代数块建立“差的平方”结构对应关系。作图与交互要点是:通过随机题目参数生成不同的 a 与 b,并在画面中显示分解过程与答案校验;构造摘要中体现了用 Shuffle/Take/Sequence/Zip 等命令管理随机种子与题目变量,用 Polynomial 与 Coefficients 生成多项式并检查是否已因式分解(IsFactored),用 Split 与多段几何/文本对象完成步骤拆解与呈现;同时用 Textfield、Text、Polygon、Segment、Midpoint、Vertex、Translate、Mirror、Flatten、PixelsToPoint 等完成可视化组件(图形块、步骤文字、位置与变换),并通过 Max、Corner 等工具对布局与显示进行控制,最终提供 validate/showsolution/showhint 等交互反馈。适合 9–12 年级用于二次多项式因式分解、特殊乘积公式复习与课堂探究活动。
GeoGebra 命令及参数
Shuffle(Sequence[16]) → allRandomSeeds, {3, 7, 16, 6, 4, 14, 9, 11, 15, 12, 2, 1, 5, 13, 8, 10}Take(allRandomSeeds, randIndex, randIndex + numRandoms - 1) → currentRandomSeedsElement(allRandomSeeds, 1 + Mod[countQuestion, 16]) → optionElement(options_{1}, 1 + Mod[option, Length[options_{1}]]) → current_{1}Polynomial((abs(first_{1}) * x^(2))) → h_{1}If(first_{1} ≥ 0, (((((If[firstsq_{1} ≟ 1, "", "("] * Polynomial[(firstsq_{1} * x)]) * If[firstsq_{1} ≟ 1, "", ")"]) * "^2-") * secondsq_{1}) * "^2"), (((((secondsq_{1} * "^2-") * If[firstsq_{1} ≟ 1, "", "("]) * Polynomial[(firstsq_{1} * x)]) * If[firstsq_{1} ≟ 1, "", ")"]) * "^2")) → difSquares_{1}Split(difSquares_{1}, {"-"}) → l4_{1}If(first_{1} ≥ 0, (((((((("(" * Polynomial[(firstsq_{1} * x)]) * "-") * secondsq_{1}) * ")(") * Polynomial[(firstsq_{1} * x)]) * "+") * secondsq_{1}) * ")"), (((((((("(" * secondsq_{1}) * "-") * Polynomial[(firstsq_{1} * x)]) * ")(") * secondsq_{1}) * "+") * Polynomial[(firstsq_{1} * x)]) * ")")) → thirdRow_{1}Textfield(inputB) → InputBoxBPolynomial((first_{1} * x^(2)) + second_{1}) → f_{1}Coefficients(f_{1}) → coeffsCoefficients(StudInput) → coeffsStIsFactored(StudInput) → factoredCorner(5) → layoutAppSizeTextfield(inputC) → InputBoxCTextfield(StudInput) → InputBoxAElement({{onboardingX + 24, onboardingY - 12, 1, 0}, {onboardingX, onboardingY - 12, -1, 0}, {onboardingX + 18, onboardingY, 0, -1}, {onboardingX + 18, onboardingY - 36, 0, 0}}, onboardingCase) → onboardingPositionsPixelsToPoint((xMin, yMin), (xMax, yMax), (800, 500), (onboardingPositions(1), onboardingPositions(2))) → OnboardingTextPointText("\text{Drag to start}", OnboardingTextPoint, true, true, onboardingPositions(3), onboardingPositions(4)) → onboardingDisplayTextCorner(5) → AppSize_{1}Max(4 / firstsq_{1}, 1.5) → xlength_{1}If(first_{1} ≥ 0, AnimPointBlueLeft_{1}, AnimPointBlueRight_{1}) → Tx1_{1}Polygon((0, 0), (xlength_{1}, 0), 4) → tileX2_{1}Translate(tileX2_{1}, Vector[Tx1_{1}]) → tileX2'_{1}Flatten(Sequence[Sequence[Translate[tileX2'_{1}, Vector[((xlength_{1} + borderwidth_{1}) * (CLIPBOARDmagicSTRINGii, CLIPBOARDmagicSTRINGjj))]], CLIPBOARDmagicSTRINGii, 0, firstsq_{1} - 1], CLIPBOARDmagicSTRINGjj, 0, firstsq_{1} - 1]) → tilesX2_{1}Segment((x(Vertex[tileX2'_{1}, 1]), 8.2), (x(Vertex[tilesX2_{1}(-1), 3]), 8.2)) → g_{1}Midpoint(g_{1}) → PosLab1_{1}If(first_{1} ≥ 0, AnimPointPinkRight_{1}, AnimPointPinkLeft_{1}) → CornerSmallSquares_{1}Polygon((0, 0), (unitlength_{1}, 0), 4) → tileU_{1}Translate(tileU_{1}, Vector[CornerSmallSquares_{1}]) → tileU'_{1}Flatten(Sequence[Sequence[Translate[tileU'_{1}, Vector[((unitlength_{1} + borderwidth_{1}) * (CLIPBOARDmagicSTRINGii, CLIPBOARDmagicSTRINGjj))]], CLIPBOARDmagicSTRINGii, 0, secondsq_{1} - 1], CLIPBOARDmagicSTRINGjj, 0, secondsq_{1} - 1]) → tilesUnit_{1}Text(text3_{1}, PosLab1_{1}, true, true, 0, 1) → label1_{1}Vertex(tilesX2_{1}(firstsq_{1}), 2) → LimX2_{1}Text(text2_{1}, PosLab4_{1}, true, true, 0, 1) → label3_{1}Polygon({(-1, 8), (-1, -3), (16, -3), (16, 8)}) → q1_{1}Flatten(Sequence[Sequence[Tx1_{1} + (Tilex2size_{1} / firstsq_{1}, Tilex2size_{1} / firstsq_{1}) / 2 + ((CLIPBOARDmagicSTRINGii, CLIPBOARDmagicSTRINGjj) * Tilex2size_{1} / firstsq_{1}), CLIPBOARDmagicSTRINGii, 0, firstsq_{1} - 1], CLIPBOARDmagicSTRINGjj, 0, firstsq_{1} - 1]) → posLabelsx2_{1}Text(second_{1}, (If[first_{1} ≥ 0, 7, 0] + sqrt(abs(second_{1})) / 2, 1), true, true, 0, 0) → text8_{1}Polygon({(0, 0), (unitlength_{1}, 0), (unitlength_{1}, xlength_{1}), (0, xlength_{1})}) → tileX_{1}Polygon((borderwidth_{1}, borderwidth_{1}), (xlength_{1} - borderwidth_{1}, borderwidth_{1}), 4) → tileX2W_{1}Polygon({(borderwidth_{1}, borderwidth_{1}), (unitlength_{1} - borderwidth_{1}, borderwidth_{1}), (unitlength_{1} - borderwidth_{1}, xlength_{1} - borderwidth_{1}), (borderwidth_{1}, xlength_{1} - borderwidth_{1})}) → tileXW_{1}Polygon((borderwidth_{1}, borderwidth_{1}), (unitlength_{1} - borderwidth_{1}, borderwidth_{1}), 4) → tileUW_{1}Translate(tileUW_{1}, Vector[CornerSmallSquares_{1}]) → tileUW'_{1}Flatten(Sequence[Sequence[Translate[tileUW'_{1}, Vector[((unitlength_{1} + borderwidth_{1}) * (CLIPBOARDmagicSTRINGii, CLIPBOARDmagicSTRINGjj))]], CLIPBOARDmagicSTRINGii, 0, secondsq_{1} - 1], CLIPBOARDmagicSTRINGjj, 0, secondsq_{1} - 1]) → tilesUW_{1}Translate(tileX2W_{1}, Vector[Tx1_{1}]) → tileX2W'_{1}Flatten(Sequence[Sequence[Translate[tileX2W'_{1}, Vector[((xlength_{1} + borderwidth_{1}) * (CLIPBOARDmagicSTRINGii, CLIPBOARDmagicSTRINGjj))]], CLIPBOARDmagicSTRINGii, 0, firstsq_{1} - 1], CLIPBOARDmagicSTRINGjj, 0, firstsq_{1} - 1]) → tilesx2W_{1}Translate(hGuideline_{1}, Vector[(Vector[Corner[4] - Corner[1]] / 500 * 16)]) → hGuideline'_{1}Translate(tileX_{1}, PosxTile_{1}) → tileX'_{1}Flatten(Sequence[Sequence[Translate[tileX'_{1}, ((CLIPBOARDmagicSTRINGii * (borderwidth_{1} + unitlength_{1})), (CLIPBOARDmagicSTRINGjj * (borderwidth_{1} + xlength_{1})))], CLIPBOARDmagicSTRINGii, 0, secondsq_{1} - 1], CLIPBOARDmagicSTRINGjj, 0, firstsq_{1} - 1]) → tilesxV_{1}Mirror(tilesxV_{1}, Line[(8 - borderwidth_{1}, 0), (0, 8 - borderwidth_{1})]) → tilesxH_{1}Translate(tileXW_{1}, PosxTile_{1}) → tileXW'_{1}Sequence(Sequence[Translate[tileXW'_{1}, ((CLIPBOARDmagicSTRINGii * (borderwidth_{1} + unitlength_{1})), (jj * (borderwidth_{1} + xlength_{1})))], CLIPBOARDmagicSTRINGii, 0, secondsq_{1} - 1], jj, 0, firstsq_{1} - 1) → m1_{1}, {{2.8630342520170147, 2.8630342520170147, 2.8630342520170147, 2.8630342520170147}}Zip(Text[(If[first_{1} ≤ 0, "-", ""] * "x²"), PP, true, true, 0, 0], PP, CentsX2_{1}) → l1_{1}Zip(Text["x", PP, true, true, 0, 0], PP, CentsXH_{1}) → l2_{1}Zip(Centroid[PP], PP, tilesxV_{1}) → CentsXV_{1}Zip(Text["-x", PP, true, true, 0, 0], PP, CentsXV_{1}) → l3_{1}Zip(Text[(If[first_{1} ≤ 0, "", "-"] * "1"), PP, true, true, 0, 0], PP, CentsU_{1}) → l5_{1}Text(Polynomial[(first_{1} * x^(2))], (x(PosLab1_{1}), 1), true, true, 0, 0) → text1_{1}Segment((x(Vertex[tilesUnit_{1}(1), 1]), 8.2), (x(Vertex[tilesUnit_{1}(-1), 3]), 8.2)) → k_{1}Segment((-0.4, y(Vertex[tilesUnit_{1}(1), 1])), (-0.4, y(Vertex[tilesUnit_{1}(-1), 3]))) → j_{1}Midpoint(j_{1}) → PosLab3_{1}Text(secondsq_{1}, PosLab3_{1}, true, true, -1, 0) → label4_{1}Segment((-0.4, y(Vertex[tileX2'_{1}, 1])), (-0.4, y(Vertex[tilesX2_{1}(-1), 3]))) → i_{1}Midpoint(i_{1}) → PosLab2_{1}Text(If[first_{1} ≤ 0, (("(" * Polynomial[((sgn(first_{1}) * sqrt(abs(first_{1}))) * x)]) * ")"), ("" * Polynomial[((sgn(first_{1}) * sqrt(abs(first_{1}))) * x)])], PosLab2_{1}, true, true, -1, 0) → label2_{1}Text("+", Midpoint[Vertex[g_{1}, If[first_{1} ≥ 0, 2, 1]], Vertex[k_{1}, If[first_{1} ≥ 0, 1, 2]]], true, true, 0, 1) → text4_{1}Text("+", Midpoint[Vertex[i_{1}, If[first_{1} ≥ 0, 1, 2]], Vertex[j_{1}, If[first_{1} ≥ 0, 2, 1]]] + (0, 0.1), true, true, -1, 0) → text5_{1}Text(StudInput) → inputAsText
AI 绘图提示语参考
绘制一个差平方的代数瓷砖表示,包括一个正方形区域和一个负方形区域。正方形区域的边长为正数,负方形区域的边长为负数。使用代数瓷砖表示差平方公式 a² - b²,并将其分解为 (a - b)(a + b)。首先绘制正方形区域,然后绘制负方形区域,接着将它们组合起来,形成差平方的几何表示。
以上提示语为根据原始绘图命令整理而来,仅供参考。