线性函数解析式与图像互换:用斜率三角形求直线
几何画板及绘图内容加载中,请稍等……
本范例用于演示在同一练习中从函数图像切换到函数解析式的过程:通过斜率三角形识别并构建直线的几何要素,再验证所选参数是否对应正确的线性函数。核心数学概念包括:一次函数/线性函数、直线斜率与截距的意义、由参数 k 与 d 表示函数 y=kx+d,以及“解析式—函数图像”之间的等价对应关系。作图与交互要点来自构造摘要:利用 Point、Line、Segment、PolyLine、Intersect 构造直线与网格上的关键点;用 Slope 与 SteigungLine 计算并呈现斜率信息;通过 Textfield、Textfield 控制与显示题目、反馈与解答文本(如 txtQuestion、txtSolution、txtFeedback、showsolution);用 Rotate 与 Numerator/Denominator 生成并旋转用于“斜率三角形”的标注结构;用 Sequence 与
GeoGebra 命令及参数
Join({{1}, Shuffle[2…numberOfQuestions]}) → randomQuestionsElement(randomQuestions, Mod[questionCount - 1, Length[randomQuestions]] + 1) → randomQuestionSequence(Origin + ((minX / stepX * disX), 0) + (k * (disX, 0)), k, 0, maxX / stepX - minX / stepX) → PointsXAxisSequence(Origin + (0, (minY / stepY * disY)) + (k * (0, disY)), k, 0, maxY / stepY - minY / stepY) → PointsYAxisSequence(Sequence[(x(PointsXAxis(k)), y(PointsYAxis(m))), k, 1, Length[PointsXAxis]], m, 1, Length[PointsYAxis]) → AllPointsOnGridPoint(Remove[Flatten[AllPointsOnGrid], {Origin}]) → PosPLine(Origin, PosP) → FuncLineSlope(FuncLine) → SteigungLineTextfield(input) → inputBoxJoin({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]}) → RasterStreckenJoin({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) → RasterPunkteSegment(Origin + ((minX / stepX * disX) - edgeAxisX, 0), Origin + ((maxX / stepX * disX) + edgeAxisX, 0)) → segAxisXSegment(Origin + (0, (minY / stepY * disY) - edgeAxisY), Origin + (0, (maxY / stepY * disY) + edgeAxisY)) → segAxisYSequence(Segment[PointsXAxis(k) + (0, (-disSeg)), PointsXAxis(k) + (0, disSeg)], k, 1, Length[PointsXAxis]) → segXAxisSequence(Segment[PointsYAxis(k) + ((-disSeg), 0), PointsYAxis(k) + (disSeg, 0)], k, 1, Length[PointsYAxis]) → segYAxisSequence(m, m, minX, maxX, stepX) → numbersXAxisSequence(Text[((("\textsf{\footnotesize{\(" * If[numbersXAxis(k) ≥ 0, "\phantom{\(-\)}", ""]) * If[Element[numbersXAxis, k] ≟ 0, "", ("" * Element[numbersXAxis, k])]) * "\)}}"), PointsXAxis(k) + (-0.12, (-disSeg)), false, true, 0, -1], k, 1, (maxX - minX) / stepX + 1) → CapXSequence(m, m, minY, maxY, stepY) → numbersYAxisSequence(Text[((("\textsf{\footnotesize{\(" * If[numbersYAxis(k) ≥ 0, "\phantom{\(-\)}", ""]) * If[Element[numbersYAxis, k] ≟ 0, "", ("" * Element[numbersYAxis, k])]) * "\)}}"), PointsYAxis(k) + ((-disSeg) + 0.05, 0), false, true, -1, 0], k, 1, (maxY - minY) / stepY + 1) → CapYElement({Polygon[(x(PointsXAxis(1)), y(PointsYAxis(1))) + ((-edgeAxisX) - 0.05, (-edgeAxisY) - 0.05), (x(PointsXAxis(Length[PointsXAxis])), y(PointsYAxis(1))) + (edgeAxisX + 0.05, (-edgeAxisY) - 0.05), (x(PointsXAxis(Length[PointsXAxis])), y(PointsYAxis(Length[PointsYAxis]))) + (edgeAxisX + 0.05, edgeAxisY + 0.05), (x(PointsXAxis(1)), y(PointsYAxis(Length[PointsYAxis]))) + ((-edgeAxisX) - 0.05, edgeAxisY + 0.05)]}, 1) → polyAxisRotate(Segment[ArrowCenter + (ArrowDistance, 0), ArrowCenter + (ArrowDistance + ArrowLength, 0)], ArrowAngle + ((1 - 1) * (360°) / ArrowNumber), ArrowCenter) → arrow1Rotate(Segment[ArrowCenter + (ArrowDistance, 0), ArrowCenter + (ArrowDistance + ArrowLength, 0)], ArrowAngle + ((2 - 1) * (360°) / ArrowNumber), ArrowCenter) → arrow2Rotate(Segment[ArrowCenter + (ArrowDistance, 0), ArrowCenter + (ArrowDistance + ArrowLength, 0)], ArrowAngle + ((3 - 1) * (360°) / ArrowNumber), ArrowCenter) → arrow3Rotate(Segment[ArrowCenter + (ArrowDistance, 0), ArrowCenter + (ArrowDistance + ArrowLength, 0)], ArrowAngle + ((4 - 1) * (360°) / ArrowNumber), ArrowCenter) → arrow4Numerator(SteigungLine) → numDenominator(SteigungLine) → denomPolyLine(Vertex[hintSteigungsdreieck(1), 1], Vertex[hintSteigungsdreieck(1), 2], Vertex[hintSteigungsdreieck(1), 3]) → segSDIntersect(FuncLine, polyAxis) → IP1, IP2Text("\textsf{\bold{\textcolor{db6114}{f}}}", IP2 - (0.25 * UnitOrthogonalVector[FuncLine]), false, true, 0, 0) → CapF