希伦公式计算器:任意三角形面积
几何画板及绘图内容加载中,请稍等……
该范例用于演示如何在给定三角形三边长度时,用希伦公式计算三角形面积,并通过交互校验给出提示与答案。核心数学概念包括:一般三角形的半周长、根号形式的面积公式(希伦公式/海伦公式)、以及由长度确定的面积计算。作图与交互实现要点:基于构造摘要中的 Sequence、Element、Textfield、Join、Take、Split、If 来生成与读取随机边长、组织步骤文本与判断输入;通过 Segment 与 PolyLine 构造/显示三角形及其边或轮廓;用 Text 与 IndexOf 将关键数值与步骤索引显示在界面上,并结合输入框(InputBox、InputBox1)与按钮对象(btnStart、btnNew、btnNext、btnShowSolution)提供验证 validate、显示解答 showsolution 及反馈 txtFeedback/rectangleFeedback。适
GeoGebra 命令及参数
Sequence(Random[1, 10], i, 1, 10) → randomNumbers, {10, 5, 7, 1, 8, 7, 5, 8, 9, 2}Element(randomNumbers, Mod[questionCount, Length[randomNumbers]] + 1) → randomNumberTextfield(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) → RasterPunkteTextfield(number) → InputBox1Sequence(Sequence[PosTable + (Sum[ListSpalte, k], (-Sum[ListZeile, m])), k, 0, 2], m, 0, 10) → TablePosMatTake(Split[ReplaceAll[(number21 * ""), ".", ","], {""}], 1, Min[If[number21 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number21 * ""), ".", ","], {""}]]]) → txtN21Take(Split[ReplaceAll[(number22 * ""), ".", ","], {""}], 1, Min[If[number22 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number22 * ""), ".", ","], {""}]]]) → txtN22Take(Split[ReplaceAll[(number31 * ""), ".", ","], {""}], 1, Min[If[number31 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number31 * ""), ".", ","], {""}]]]) → txtN31Take(Split[ReplaceAll[(number32 * ""), ".", ","], {""}], 1, Min[If[number32 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number32 * ""), ".", ","], {""}]]]) → txtN32Take(Split[ReplaceAll[(number41 * ""), ".", ","], {""}], 1, Min[If[number41 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number41 * ""), ".", ","], {""}]]]) → txtN41Take(Split[ReplaceAll[(number42 * ""), ".", ","], {""}], 1, Min[If[number42 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number42 * ""), ".", ","], {""}]]]) → txtN42Take(Split[ReplaceAll[(number51 * ""), ".", ","], {""}], 1, Min[If[number51 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number51 * ""), ".", ","], {""}]]]) → txtN51Take(Split[ReplaceAll[(number52 * ""), ".", ","], {""}], 1, Min[If[number52 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number52 * ""), ".", ","], {""}]]]) → txtN52Take(Split[ReplaceAll[(number61 * ""), ".", ","], {""}], 1, Min[If[number61 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number61 * ""), ".", ","], {""}]]]) → txtN61Take(Split[ReplaceAll[(number62 * ""), ".", ","], {""}], 1, Min[If[number62 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number62 * ""), ".", ","], {""}]]]) → txtN62Take(Split[ReplaceAll[(number71 * ""), ".", ","], {""}], 1, Min[If[number71 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number71 * ""), ".", ","], {""}]]]) → txtN71Take(Split[ReplaceAll[(number72 * ""), ".", ","], {""}], 1, Min[If[number72 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number72 * ""), ".", ","], {""}]]]) → txtN72Take(Split[ReplaceAll[(number81 * ""), ".", ","], {""}], 1, Min[If[number81 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number81 * ""), ".", ","], {""}]]]) → txtN81Take(Split[ReplaceAll[(number82 * ""), ".", ","], {""}], 1, Min[If[number82 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number82 * ""), ".", ","], {""}]]]) → txtN82Take(Split[ReplaceAll[(number91 * ""), ".", ","], {""}], 1, Min[If[number91 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number91 * ""), ".", ","], {""}]]]) → txtN91Take(Split[ReplaceAll[(number92 * ""), ".", ","], {""}], 1, Min[If[number92 ≥ 10, commaCounter + 3, commaCounter + 2], Length[Split[ReplaceAll[(number92 * ""), ".", ","], {""}]]]) → txtN92Split(ReplaceAll[(SqrtNumber * ""), ".", ","], {""}) → txtSolIf(0 < number ≤ 6, 6, 6 < number < 13, 13, 13 ≤ number ≤ 20, 21, 25) → maxXIf(0 < number ≤ 6, 3, 6 < number < 13, 5, 6) → maxYIf(0 < number ≤ 6, 1.2, 6 < number < 13, 0.8, 13 ≤ number ≤ 20, 0.65, 0.55) → disXSegment(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(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(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) → CapYSequence(If[¬Defined[DiffListOriginal(k)], 20, DiffListOriginal(k)], k, 1, 8) → DiffListText(txt41, Midpoint[TablePosMat(5, 1), TablePosMat(6, 2)], false, true, 0, 0) → Cap41Text(txt51, Midpoint[TablePosMat(6, 1), TablePosMat(7, 2)], false, true, 0, 0) → Cap51Text(txt61, Midpoint[TablePosMat(7, 1), TablePosMat(8, 2)], false, true, 0, 0) → Cap61Text(txt71, Midpoint[TablePosMat(8, 1), TablePosMat(9, 2)], false, true, 0, 0) → Cap71Text(txt81, Midpoint[TablePosMat(9, 1), TablePosMat(10, 2)], false, true, 0, 0) → Cap81Text(txt91, Midpoint[TablePosMat(10, 1), TablePosMat(11, 2)], false, true, 0, 0) → Cap91Text(txt31, Midpoint[TablePosMat(4, 1), TablePosMat(5, 2)], false, true, 0, 0) → Cap31Text(txt21, Midpoint[TablePosMat(3, 1), TablePosMat(4, 2)], false, true, 0, 0) → Cap21Text(txt22, Midpoint[TablePosMat(3, 2), TablePosMat(4, 3)], false, true, 0, 0) → Cap22Text(txt32, Midpoint[TablePosMat(4, 2), TablePosMat(5, 3)], false, true, 0, 0) → Cap32Text(txt42, Midpoint[TablePosMat(5, 2), TablePosMat(6, 3)], false, true, 0, 0) → Cap42Text(txt52, Midpoint[TablePosMat(6, 2), TablePosMat(7, 3)], false, true, 0, 0) → Cap52Text(txt62, Midpoint[TablePosMat(7, 2), TablePosMat(8, 3)], false, true, 0, 0) → Cap62Text(txt72, Midpoint[TablePosMat(8, 2), TablePosMat(9, 3)], false, true, 0, 0) → Cap72Text(txt82, Midpoint[TablePosMat(9, 2), TablePosMat(10, 3)], false, true, 0, 0) → Cap82Text(txt92, Midpoint[TablePosMat(10, 2), TablePosMat(11, 3)], false, true, 0, 0) → Cap92PolyLine(Vertex[polyRectangle(1), 2], Vertex[polyRectangle(1), 3], Vertex[polyRectangle(1), 4]) → segRectangleIndexOf(false, Sequence[txtN81(k) ≟ txtN82(k), k, 1, Min[Length[txtN81], Length[txtN82]]]) → aText(((((((((("\textsf{\sqrt{" * number) * "} ") * If[IsInteger[SqrtNumber], "=", "="]) * " \textcolor{#db6114}{") * ReplaceAll[(floor((SqrtNumber * If[¬cBC, 100000, 10^(commaCounter)])) / If[¬cBC, 100000, 10^(commaCounter)] * ""), ".", ","]) * "") * If[number ≟ 19, "0", ""]) * If[IsInteger[SqrtNumber], "", "..."]) * "}}"), TablePosMat(11, 2) + (0, 0), false, true, 0, -1) → CapSolText("\textsf{\bold{\textcolor{#50c1ce}{Zieh mich!}}}", TablePosMat(2, 3) + (0.45, 0.5), false, true, 0, 1) → CapZiehMichText((("\textsf{\large{\bold{\textcolor{#50c1ce}{" * If[sliderH > 2, "↓", ""]) * "}}}}"), TablePosMat(11, 3) + (0.65, 0.3) + ((9 - 10 + sliderH) * (0, zeile1)), false, true, 1, 0) → CapSliderH