用展开图(网)计算金字塔表面积

用展开图(网)计算金字塔表面积
几何画板及绘图内容加载中,请稍等……
2023-09-19 20:44
该范例通过“把金字塔展开成展开图(net)”的方式,逐步演示如何计算三角形底面与矩形底面金字塔的总表面积。核心数学概念包括立体几何、曲面展开、底面与侧面的面积求和、以及用几何构造得到各个侧面三角形的边与高。作图与互动要点:先构造金字塔的底面与对应侧面,通过 Net、Pyramid 与 Polygon 生成展开面;使用 Segment、Midpoint 与 Vector/Translate/Angle 辅助确定折痕与面的位置关系;再用 If 与 Shuffle 等逻辑实现不同类型(如矩形底或三角底)的选择与参数切换;最后用 Sum 对各面面积(如 face1~face4、face01/face02 等)进行合计得到表面积,同时用 Text 和 Append 输出计算过程与结果。适合6-8年级立体几何教学,用于面积与展开图的探究活动,也可作为“用网或公式求表面积”的练习/讲评素材。

GeoGebra 命令及参数

  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 绘图提示语参考

绘制一个可展开的棱锥体,展示其表面积计算过程。图形包含一个矩形底面和四个三角形侧面,侧面可沿底边折叠展开成平面网。同时绘制一个三角形底面的棱锥,其底面可为等腰或等边三角形,侧面也可展开。展开后的网中,各面用不同颜色区分,并标注底边长度、斜高和总高度。通过滑动条控制折叠程度,并显示各面面积之和作为总表面积。图形旁附有文字说明,引导观察展开前后面积不变。
以上提示语为根据原始绘图命令整理而来,仅供参考。