Calculating Pyramid Surface Area with Nets
Loading the math board and drawing, please wait…
This GeoGebra example demonstrates, step by step, how to compute the total surface area of pyramids by unfolding them into a net. It compares cases such as triangular-base and rectangular-base pyramids (and related variations) and emphasizes the idea of summing the base area with the areas of the lateral faces after unfolding. The key concepts are 3D solid geometry, net (surface unfolding), decomposition into faces, and area calculation via geometric construction. Construction highlights from the provided setup include creating polygons and pyramid/face structures using Polygon and Pyramid/Net, using Segment and Midpoint to define relevant edges and reference points, and applying Transformations such as Translate (with Vector) and Angle to manage how faces align and fold/unfold. Logic elements (If, Shuffle) support switching among base types and configurations, while Sum aggregates the computed face areas (e.g., face/face0* objects) into the final surface-area value. Text and Append are used to present questions and intermediate results. Suitable for grades 6–8 and for lessons/workflows focused on using nets (or formulas) to find surface area in real and word problems.
GeoGebra Commands & Parameters
Shuffle(Sequence[3, 5]) → heights, {5, 3, 4}Shuffle(Append[Sequence[3, 6], 3]) → Bases1, {3, 4, 6, 3, 5}Shuffle(Sequence[3, 4]) → Bases2, {3, 4}If(countQuestion ≟ 0, 3, Element[Bases1, Mod[countQuestion, Length[Bases1]] + 1]) → Base1If(countQuestion ≟ 0, 3, Element[Bases2, Mod[countQuestion, Length[Bases2]] + 1]) → Base2If(countQuestion ≟ 0, 4, Min[Element[heights, Mod[countQuestion, Length[heights]] + 1], 6 - Base2]) → heightPolygon({(((-Base1)) / 2, ((-Base2)) / 2), (Base1 / 2, ((-Base2)) / 2), (Base1 / 2, Base2 / 2), (((-Base1)) / 2, Base2 / 2)}) → RectBasePyramid(RectBase, (0, 0, height)) → a, face1, face3, face4, face2, edge1, edge2, edge3, edge4Net(a, fold) → net0, V1, face02, face05, face03, face04, Edge1, Edge4, Edge2, Edge3, Edge5, Edge6, V2, Edge7, Edge8, Edge9, Edge10, Edge11, Edge12, V3, V4, V6, V5, V7, V8, face01Segment((Base1 / 2, 0), V5) → h1_{2}Polygon({(((-Base1)) / 2, ((-Base2)) / 2), (Base1 / 2, ((-Base2)) / 2), Element[{(Base1 / 2, Base2 / 2), (0, Base2 / 2), (If[Base1 ≟ 2, 0, -1], Base2 / 2)}, PosVertex]}) → TrianBaseRPolygon((((-Base1)) / 2, ((-Base2)) / 2), (Base1 / 2, ((-Base2)) / 2), 3) → TrianBaseETranslate(Centroid[TrianBaseE], Vector[(0, 0, height)]) → apESegment((0, Base2 / 2), V7) → h2_{1}Segment((((-Base1)) / 2, 0), V8) → h1_{1}Translate((Base1 / 2, Base2 / 2, 0), Vector[(0, 0, height)]) → apRPyramid(If[right, TrianBaseR, TrianBaseE], If[right, apR, apE]) → b, face5, face7, face6, edge7, edge9, edge10Net(b, fold) → net1, W1, facet4, EdgeT1, EdgeT2, EdgeT3, EdgeT7, EdgeT8, EdgeT9, EdgeT4, EdgeT5, EdgeT6, W2, W3, W4, W5, W6, facet1, facet2, facet3Segment(Midpoint[W2, W1], W3) → SegH3Segment(Midpoint[W1, W2], W4) → SegH41Zip(Element[resultsPrism, kk], kk, selectedSurfaces) → resultsPrismOrderedZip(round(nn, 2), nn, resultsPrismOrdered) → resultPrismRoundedMod(countQuestion, 2) → CaseSegment((0, ((-Base2)) / 2), V6) → h2_{2}Translate((Base1 / 2, Base2 / 2, 0), Vector[(1 + (fold * height), 0, 0)]) → V2'Vector(V2' + (0, 0, height / 2), V2') → VecH2Translate((Base1 / 2, Base2 / 2, 0), Vector[(1 + (fold * If[Case ≟ 0, Length[h1_{1}], height]), 0, 0)]) → Vecl2Translate((Base1 / 2, ((-Base2)) / 2, 0), Vector[(1 + (fold * If[Case ≟ 0, Length[h1_{1}], height]), 0, 0)]) → Vecl1Text(((If[Case ≟ 1, "b", "l"] * "=") * Base2), PointLabell, true, true) → labellVector(Corner[labell, 1], Corner[labell, 3]) → labellsizeShuffle(Sequence[1, 3]) → posVerts, {2, 1, 3}Text(Base1, (-1, ((-Base2)) / 2, -0.5 + fold / 2), true, true) → labelBase1foldedAppend("", Sequence["=", ii, 1, expectedSurfaces]) → equalListText(Base2, (Base1 / 2, Base2 / 2, -0.5 + fold / 2), true, true) → labelBase2foldedTranslate((((-Base1)) / 2, ((-Base2)) / 2, 0), Vector[(0, -1 - (fold * (-1 + Base2 / 2 + If[Case ≟ 0, Length[h2_{2}], height])), 0)]) → Vecw2Translate((Base1 / 2, ((-Base2)) / 2, 0), Vector[(0, -1 - (fold * (-1 + Base2 / 2 + If[Case ≟ 0, Length[h2_{2}], height])), 0)]) → Vecw1Segment(Vecw2, Vecw1) → Edge3'Vector(Midpoint[Vecw2, Vecw1], Vecw2) → w1Vector(Midpoint[Vecw1, Vecw2], Vecw1) → w2Text(((If[Case ≟ 1, "a", "w"] * "=") * Base1), (0, 0), true, true) → labelwVector(Corner[labelw, 1], Corner[labelw, 3]) → labelwsizeTranslate(Midpoint[Vecw2, Vecw1], Vector[((-labelwsize)) / 2 - (0, 0, (1 - fold) / 2)]) → posLabelwTranslate(Midpoint[Vecl1, Vecl2], Vector[(0.3, y(labellsize) / 2, 0)]) → posLabellText(labell, posLabell, true, true) → labellposText(("h=" * height), (0, 0), true, true, 0, 0) → labelhVector(Corner[labelh, 1], Corner[labelh, 3]) → labelhsizeText(("\hspace{6}" * labelw), posLabelw, true, true) → labelwposText(text3, (-4.5, Base2 / 2 + height + 4, 0), true, true) → onboardingSegmentsText(text5, (-6, Base2 / 2 + height + 4.2, 0), true, true) → onboardingSurfacesVector(V2' + (0, 0, height / 2), V2' + (0, 0, height)) → VecH1Text(labelh, V2' + (0, 0, height / 2 + y(labelhsize) / 2), true, true) → labelhposVector(Midpoint[Vecl1, Vecl2], Vecl2) → l1Vector(Midpoint[Vecl1, Vecl2], Vecl1) → l2Zip(If[nn ≟ expectedSurfaces + 1 ∧ calculate ≟ expectedSurfaces + 1, "+\;", "\phantom{+\;}"] + (Element[{"\phantom{}", "\textsf{Triangle A}", "\textsf{Triangle B}", "\textsf{Rectangle C}", "\textsf{Triangle D}", "\textsf{Triangle E}", "\textsf{Triangle A}", "\textsf{Triangle B}", "\textsf{Triangle C}", "\textsf{Triangle D}", "\textsf{Triangle A}", "\textsf{Triangle B}", "\textsf{Triangle C}", "\textsf{Triangle D}"}, kk]), kk, selectedSurfaces, nn, Sequence[expectedSurfaces + 1]) → labelsToShowZip(If[nn ≟ expectedSurfaces + 1 ∧ calculate ≟ expectedSurfaces + 1, "+\;", "\phantom{+\;}"] + (Element[formulas, kk]), kk, selectedSurfaces, nn, Sequence[expectedSurfaces + 1]) → formulasToShowZip(nn - floor(nn), nn, resultPrismRounded) → resultsPrismOrderedDecZip(Split[Text[dd], {"."}], dd, resultsPrismOrderedDec) → resultsPrismOrderedDecTextZip(floor(nn), nn, resultsPrismOrdered) → resultsPrismOrderedFloorZip(If[kk ≟ 0, "", Text[kk]], kk, resultsPrismOrderedFloor) → l1_{1}Zip(If[Length[LL] ≥ 2, ("." * Element[LL, 2]), ""], LL, resultsPrismOrderedDecText) → l2_{1}Zip(Length[tt], tt, l2_{1}) → l3Zip(tt + (If[kk ≟ 0, "\phantom{.00}", kk ≟ 2, qq + "\phantom{0}", qq + ""]), kk, l3, tt, l1_{1}, qq, l2_{1}) → l4Midpoint(V2, (x(V5), y(V2), 0)) → Centh1Vector(Centh1, V2) → VecH1_{1}Vector(Centh1, (x(V5), y(V2), 0)) → VecH1_{2}Midpoint(V3, (x(V3), y(V7), 0)) → Centh2Vector(Centh2, V3) → VecH2_{1}Vector(Centh2, (x(V3), y(V7), 0)) → VecH2_{2}Vector(Corner[labelhgreen, 1], Corner[labelhgreen, 3]) → labelhgreensizeVector(Corner[labelhpink, 1], Corner[labelhpink, 3]) → labelhpinksizeText(labelhpink, Centh2 + (0, (1 / 2 * y(labelhpinksize))), true, true) → labelhpinkposText(labelhgreen, Centh1 - labelhgreensize / 2, true, true) → labelgreenposMidpoint(W2 + (1, 0), EPh3) → Centh3Vector(Centh3, Translate[W2, Vector[(1, 0)]]) → VecH3_{2}Vector(Centh4, Translate[W3, Vector[(0, 1)]]) → VecH4_{1}Vector(Centh4, Translate[W5, Vector[(0, 1)]]) → VecH4_{2}Vector(Centh3, EPh3) → VecH3_{1}Midpoint(H5_{1}, H5_{2}) → Centh5Vector(Centh5, H5_{1}) → VecHT_{1}Vector(Centh5, H5_{2}) → VecHT_{2}Vector(Corner[labelhblue, 1], Corner[labelhblue, 3]) → labelhbluesizeText(labelhblue, Centh3 + (0, y(labelhbluesize) / 2), true, true) → labelhblueposVector(Corner[labelhorange, 1], Corner[labelhorange, 3]) → labelhorangesizeText(labelhorange, Centh5 + (0, y(labelhorangesize) / 2), true, true) → labelhorangeposSegment(Midpoint[W3, W2], W5) → SegH42Segment(Midpoint[W3, W1], W6) → SegH43Text(labelh, Centh4 + (((-x(labelhsize)) + 1) / 2, y(labelhsize) + 0.5), true, true) → labelhredposSum(resultPrismRounded) → totalAreaTranslate(W1, Vector[W3, W6]) → W1'Vector(Midpoint[W1', W6], W1') → vecC1Vector(Midpoint[W1', W6], W6) → vecC2Vector(Corner[labelc, 1], Corner[labelc, 3]) → labelcsizeText(labelc, Midpoint[W1', W6] - (x(labelcsize), (-y(labelcsize))), true, true) → labelcposAngle(W1, W2, W3) → αAngle(W1, W3, W6) → βAngle(W2, W3, W5) → γAngle(W1, W2, W4) → δText("C", (-0.5, 0.5), true, true) → labelRect0Text("B", Midpoint[h1_{1}] + (0.3, 1.2), true, true) → labelTriaB0Text("D", Midpoint[h1_{2}] + (-1, 1.2), true, true) → labelTriaD0Text("A", Midpoint[h2_{1}], true, true) → labelTriaA0Text("E", Midpoint[h2_{2}] + (0, 1.3), true, true) → labelTriaE0Text("B", (0, 0), true, true) → label1TriaBText("D", Vertex[SegH41, 1], true, true) → label1TriaDText("A", Midpoint[SegH43], true, true) → label1TriaAText("C", Midpoint[SegH42] - (0.8, 0), true, true) → label1TriaCText(text1, Corner[text8, 1] + (0, 0.5), true, true, 1, -1) → text7Text(text9, Corner[text8, 2] + (0, 0.5), true, true, -1, -1) → text10
AI Drawing Prompt Reference
Draw a pyramid with a rectangular base and four triangular lateral faces that can unfold into a flat net. Also include a second pyramid with a triangular base (either isosceles or equilateral) that unfolds similarly. Show the nets with distinct face colors, label base edge lengths, slant heights, and overall height. Use a slider to control the folding angle, and display the sum of face areas as the total surface area. Add text annotations to guide the viewer in understanding that the surface area remains unchanged when unfolded.
The prompt above was compiled from the original drawing commands and is for reference only.