Calculating Pyramid Surface Area with Nets

Calculating Pyramid Surface Area with Nets
Loading the math board and drawing, please wait…
2023-09-19 20:44
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

  1. Shuffle(Sequence[3, 5]) → heights, {5, 3, 4}
  2. Shuffle(Append[Sequence[3, 6], 3]) → Bases1, {3, 4, 6, 3, 5}
  3. Shuffle(Sequence[3, 4]) → Bases2, {3, 4}
  4. If(countQuestion ≟ 0, 3, Element[Bases1, Mod[countQuestion, Length[Bases1]] + 1]) → Base1
  5. If(countQuestion ≟ 0, 3, Element[Bases2, Mod[countQuestion, Length[Bases2]] + 1]) → Base2
  6. If(countQuestion ≟ 0, 4, Min[Element[heights, Mod[countQuestion, Length[heights]] + 1], 6 - Base2]) → height
  7. Polygon({(((-Base1)) / 2, ((-Base2)) / 2), (Base1 / 2, ((-Base2)) / 2), (Base1 / 2, Base2 / 2), (((-Base1)) / 2, Base2 / 2)}) → RectBase
  8. Pyramid(RectBase, (0, 0, height)) → a, face1, face3, face4, face2, edge1, edge2, edge3, edge4
  9. Net(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, face01
  10. Segment((Base1 / 2, 0), V5) → h1_{2}
  11. 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]}) → TrianBaseR
  12. Polygon((((-Base1)) / 2, ((-Base2)) / 2), (Base1 / 2, ((-Base2)) / 2), 3) → TrianBaseE
  13. Translate(Centroid[TrianBaseE], Vector[(0, 0, height)]) → apE
  14. Segment((0, Base2 / 2), V7) → h2_{1}
  15. Segment((((-Base1)) / 2, 0), V8) → h1_{1}
  16. Translate((Base1 / 2, Base2 / 2, 0), Vector[(0, 0, height)]) → apR
  17. Pyramid(If[right, TrianBaseR, TrianBaseE], If[right, apR, apE]) → b, face5, face7, face6, edge7, edge9, edge10
  18. Net(b, fold) → net1, W1, facet4, EdgeT1, EdgeT2, EdgeT3, EdgeT7, EdgeT8, EdgeT9, EdgeT4, EdgeT5, EdgeT6, W2, W3, W4, W5, W6, facet1, facet2, facet3
  19. Segment(Midpoint[W2, W1], W3) → SegH3
  20. Segment(Midpoint[W1, W2], W4) → SegH41
  21. Zip(Element[resultsPrism, kk], kk, selectedSurfaces) → resultsPrismOrdered
  22. Zip(round(nn, 2), nn, resultsPrismOrdered) → resultPrismRounded
  23. Mod(countQuestion, 2) → Case
  24. Segment((0, ((-Base2)) / 2), V6) → h2_{2}
  25. Translate((Base1 / 2, Base2 / 2, 0), Vector[(1 + (fold * height), 0, 0)]) → V2'
  26. Vector(V2' + (0, 0, height / 2), V2') → VecH2
  27. Translate((Base1 / 2, Base2 / 2, 0), Vector[(1 + (fold * If[Case ≟ 0, Length[h1_{1}], height]), 0, 0)]) → Vecl2
  28. Translate((Base1 / 2, ((-Base2)) / 2, 0), Vector[(1 + (fold * If[Case ≟ 0, Length[h1_{1}], height]), 0, 0)]) → Vecl1
  29. Text(((If[Case ≟ 1, "b", "l"] * "=") * Base2), PointLabell, true, true) → labell
  30. Vector(Corner[labell, 1], Corner[labell, 3]) → labellsize
  31. Shuffle(Sequence[1, 3]) → posVerts, {2, 1, 3}
  32. Text(Base1, (-1, ((-Base2)) / 2, -0.5 + fold / 2), true, true) → labelBase1folded
  33. Append("", Sequence["=", ii, 1, expectedSurfaces]) → equalList
  34. Text(Base2, (Base1 / 2, Base2 / 2, -0.5 + fold / 2), true, true) → labelBase2folded
  35. Translate((((-Base1)) / 2, ((-Base2)) / 2, 0), Vector[(0, -1 - (fold * (-1 + Base2 / 2 + If[Case ≟ 0, Length[h2_{2}], height])), 0)]) → Vecw2
  36. Translate((Base1 / 2, ((-Base2)) / 2, 0), Vector[(0, -1 - (fold * (-1 + Base2 / 2 + If[Case ≟ 0, Length[h2_{2}], height])), 0)]) → Vecw1
  37. Segment(Vecw2, Vecw1) → Edge3'
  38. Vector(Midpoint[Vecw2, Vecw1], Vecw2) → w1
  39. Vector(Midpoint[Vecw1, Vecw2], Vecw1) → w2
  40. Text(((If[Case ≟ 1, "a", "w"] * "=") * Base1), (0, 0), true, true) → labelw
  41. Vector(Corner[labelw, 1], Corner[labelw, 3]) → labelwsize
  42. Translate(Midpoint[Vecw2, Vecw1], Vector[((-labelwsize)) / 2 - (0, 0, (1 - fold) / 2)]) → posLabelw
  43. Translate(Midpoint[Vecl1, Vecl2], Vector[(0.3, y(labellsize) / 2, 0)]) → posLabell
  44. Text(labell, posLabell, true, true) → labellpos
  45. Text(("h=" * height), (0, 0), true, true, 0, 0) → labelh
  46. Vector(Corner[labelh, 1], Corner[labelh, 3]) → labelhsize
  47. Text(("\hspace{6}" * labelw), posLabelw, true, true) → labelwpos
  48. Text(text3, (-4.5, Base2 / 2 + height + 4, 0), true, true) → onboardingSegments
  49. Text(text5, (-6, Base2 / 2 + height + 4.2, 0), true, true) → onboardingSurfaces
  50. Vector(V2' + (0, 0, height / 2), V2' + (0, 0, height)) → VecH1
  51. Text(labelh, V2' + (0, 0, height / 2 + y(labelhsize) / 2), true, true) → labelhpos
  52. Vector(Midpoint[Vecl1, Vecl2], Vecl2) → l1
  53. Vector(Midpoint[Vecl1, Vecl2], Vecl1) → l2
  54. Zip(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]) → labelsToShow
  55. Zip(If[nn ≟ expectedSurfaces + 1 ∧ calculate ≟ expectedSurfaces + 1, "+\;", "\phantom{+\;}"] + (Element[formulas, kk]), kk, selectedSurfaces, nn, Sequence[expectedSurfaces + 1]) → formulasToShow
  56. Zip(nn - floor(nn), nn, resultPrismRounded) → resultsPrismOrderedDec
  57. Zip(Split[Text[dd], {"."}], dd, resultsPrismOrderedDec) → resultsPrismOrderedDecText
  58. Zip(floor(nn), nn, resultsPrismOrdered) → resultsPrismOrderedFloor
  59. Zip(If[kk ≟ 0, "", Text[kk]], kk, resultsPrismOrderedFloor) → l1_{1}
  60. Zip(If[Length[LL] ≥ 2, ("." * Element[LL, 2]), ""], LL, resultsPrismOrderedDecText) → l2_{1}
  61. Zip(Length[tt], tt, l2_{1}) → l3
  62. Zip(tt + (If[kk ≟ 0, "\phantom{.00}", kk ≟ 2, qq + "\phantom{0}", qq + ""]), kk, l3, tt, l1_{1}, qq, l2_{1}) → l4
  63. Midpoint(V2, (x(V5), y(V2), 0)) → Centh1
  64. Vector(Centh1, V2) → VecH1_{1}
  65. Vector(Centh1, (x(V5), y(V2), 0)) → VecH1_{2}
  66. Midpoint(V3, (x(V3), y(V7), 0)) → Centh2
  67. Vector(Centh2, V3) → VecH2_{1}
  68. Vector(Centh2, (x(V3), y(V7), 0)) → VecH2_{2}
  69. Vector(Corner[labelhgreen, 1], Corner[labelhgreen, 3]) → labelhgreensize
  70. Vector(Corner[labelhpink, 1], Corner[labelhpink, 3]) → labelhpinksize
  71. Text(labelhpink, Centh2 + (0, (1 / 2 * y(labelhpinksize))), true, true) → labelhpinkpos
  72. Text(labelhgreen, Centh1 - labelhgreensize / 2, true, true) → labelgreenpos
  73. Midpoint(W2 + (1, 0), EPh3) → Centh3
  74. Vector(Centh3, Translate[W2, Vector[(1, 0)]]) → VecH3_{2}
  75. Vector(Centh4, Translate[W3, Vector[(0, 1)]]) → VecH4_{1}
  76. Vector(Centh4, Translate[W5, Vector[(0, 1)]]) → VecH4_{2}
  77. Vector(Centh3, EPh3) → VecH3_{1}
  78. Midpoint(H5_{1}, H5_{2}) → Centh5
  79. Vector(Centh5, H5_{1}) → VecHT_{1}
  80. Vector(Centh5, H5_{2}) → VecHT_{2}
  81. Vector(Corner[labelhblue, 1], Corner[labelhblue, 3]) → labelhbluesize
  82. Text(labelhblue, Centh3 + (0, y(labelhbluesize) / 2), true, true) → labelhbluepos
  83. Vector(Corner[labelhorange, 1], Corner[labelhorange, 3]) → labelhorangesize
  84. Text(labelhorange, Centh5 + (0, y(labelhorangesize) / 2), true, true) → labelhorangepos
  85. Segment(Midpoint[W3, W2], W5) → SegH42
  86. Segment(Midpoint[W3, W1], W6) → SegH43
  87. Text(labelh, Centh4 + (((-x(labelhsize)) + 1) / 2, y(labelhsize) + 0.5), true, true) → labelhredpos
  88. Sum(resultPrismRounded) → totalArea
  89. Translate(W1, Vector[W3, W6]) → W1'
  90. Vector(Midpoint[W1', W6], W1') → vecC1
  91. Vector(Midpoint[W1', W6], W6) → vecC2
  92. Vector(Corner[labelc, 1], Corner[labelc, 3]) → labelcsize
  93. Text(labelc, Midpoint[W1', W6] - (x(labelcsize), (-y(labelcsize))), true, true) → labelcpos
  94. Angle(W1, W2, W3) → α
  95. Angle(W1, W3, W6) → β
  96. Angle(W2, W3, W5) → γ
  97. Angle(W1, W2, W4) → δ
  98. Text("C", (-0.5, 0.5), true, true) → labelRect0
  99. Text("B", Midpoint[h1_{1}] + (0.3, 1.2), true, true) → labelTriaB0
  100. Text("D", Midpoint[h1_{2}] + (-1, 1.2), true, true) → labelTriaD0
  101. Text("A", Midpoint[h2_{1}], true, true) → labelTriaA0
  102. Text("E", Midpoint[h2_{2}] + (0, 1.3), true, true) → labelTriaE0
  103. Text("B", (0, 0), true, true) → label1TriaB
  104. Text("D", Vertex[SegH41, 1], true, true) → label1TriaD
  105. Text("A", Midpoint[SegH43], true, true) → label1TriaA
  106. Text("C", Midpoint[SegH42] - (0.8, 0), true, true) → label1TriaC
  107. Text(text1, Corner[text8, 1] + (0, 0.5), true, true, 1, -1) → text7
  108. Text(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.