Heron Calculator: Area of Any Triangle
Loading the math board and drawing, please wait…
In collections
Quadratzahlen und Quadratwurzeln
This example demonstrates how to compute the area of an arbitrary triangle from its three side lengths using Heron’s (Hero’s) formula, with interactive checking and step-by-step guidance. The key mathematics includes the semiperimeter and the square-root form of the area formula, where side lengths determine the area uniquely. Construction and interface logic are built from the commands in the con
GeoGebra Commands & Parameters
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