水倒入圆柱:体积—高度关系的建模与变化

水倒入圆柱:体积—高度关系的建模与变化
几何画板及绘图内容加载中,请稍等……
2020-09-18 18:01
本范例通过“向圆柱内注水”的可视化过程,展示圆柱内水的体积与水面高度之间的对应关系,并观察量随时间(或注入过程参数)的变化。核心数学概念包括:圆柱几何的体积与高度比例关系、把参数变化映射到几何量(h 与 vol)的函数/导数分析,以及用于描述极值或变化趋势的数值计算思想。作图在 GeoGebra 中综合使用了多种几何对象与度量:用 Derivative 表示导数刻画变化率(与注入速度相关的瞬时变化);用 Max 结合相关量(如最大高度/半径尺度)用于趋势与极值判断;几何骨架由 Circle、Line、Intersect、Segment、Ellipse、Polygon、Arc、Rotate 等建立圆柱横截面及几何辅助结构;用 OrthogonalLine、Angle、Distance 实现角度与长度等度量;再通过 Sequence 生成随参数变化的数值序列,并用 IntegralBetween 表示在区间上的累积量(对应从“注入开始到当前”的体积/高度累计效应);同时使用 Vector、Text 对关键量与方向进行标注说明。该内容适合中学高阶拓展到本科微积分/建模入门阶段,用于课堂演示、建模训练与可视化理解体积-高度关系。

GeoGebra 命令及参数

  1. Derivative(w) → r
  2. Max(r, 0, tmax) → maxrpt
  3. Circle(pcenter, 5) → pcircle
  4. Line(pcenter, (x(pcenter) + 1, y(pcenter))) → phline
  5. Intersect(pcircle, phline, 2) → phlinept
  6. Rotate(phlinept, pth, pcenter) → phlinept2
  7. Line(pcenter, phlinept2) → phline3
  8. Intersect(pcircle, phline3, 1) → ppt1
  9. OrthogonalLine(ppt1, phline3) → phline4
  10. Point(phline4) → ptippt1
  11. Circle(pcenter, ptipcircleradius) → ptipcircle
  12. Segment(pcenter, ptippt1) → ptipline
  13. Intersect(ptipcircle, ptipline) → ptippt,
  14. Distance(ptippt, pcenter) → ptipradius
  15. Angle(phlinept, pcenter, phlinept2) → pourangle
  16. Point({cradius, 0}) → cpt1
  17. Point({(-cradius), 0}) → cpt2
  18. Point({(-cradius), cheight}) → cpt3
  19. Segment(cpt2, cpt3) → cleftseg
  20. Point({0, wheight}) → wheightpt
  21. Point({cradius, wheight}) → wheightpt1
  22. Point({(-cradius), wheight}) → wheightpt2
  23. Point({0, cheight - cscalemin}) → cptellipsemidtop
  24. Ellipse((x(cpt) - 0.02, cheight), (x(cpt3) + 0.02, cheight), cptellipsemidtop) → cellipsetop
  25. Segment(cpt1, cpt) → crightseg
  26. Point({0, wheight - (cscalemax - (wheight / cheight * cscalerange))}) → wptellipsemid
  27. Ellipse((x(wheightpt1) - 0.02, wheight), (x(wheightpt2) + 0.02, wheight), wptellipsemid) → wellipsetop
  28. Point({0, (-cscalemax)}) → cptellipsemidbottom
  29. Ellipse((x(cpt1) - 0.02, 0), (x(cpt2) + 0.02, 0), cptellipsemidbottom) → cellipsebottom
  30. Polygon(wheightpt1, cpt1, cpt2, wheightpt2) → cwater, wheightpt1_1, cpt1_1, cpt2_1, wheightpt2_1
  31. Arc(cellipsebottom, cpt2, cpt1) → warcbottom
  32. Arc(wellipsetop, wheightpt1, wheightpt2) → warctop
  33. Point({((sscale * rscale) * r(t)), wheight}) → spt1
  34. Point({(((-sscale) * rscale) * r(t)), wheight}) → spt2
  35. Circle(pcenter, ptipradius - (((spscale * rscale) * ptipradius) * r(t))) → scircle
  36. Intersect(scircle, ptipline) → spt3,
  37. Polygon(ptippt, spt3, spt1, spt2) → swater, ptippt_1, spt3_1, spt1_1, spt2_1
  38. Point({0, wheight - (0.2 * (cscalemax - (wheight / cheight * cscalerange)))}) → sellipsept
  39. Ellipse(spt1, spt2, sellipsept) → sellipse
  40. Arc(sellipse, spt2, spt1) → sarc
  41. Arc(sellipse, spt2, spt1) → ssplash
  42. Arc(cellipsetop, cpt3, cpt) → cellipsetoparc
  43. Sequence(hstart + (k * dh), k, 0, n) → wheights
  44. Sequence(Point[{0, Element[wheights, k] - (cscalemax - (Element[wheights, k] / cheight * cscalerange))}], k, 2, n + 1) → wellipsemidpts
  45. Sequence(Ellipse[((-cradius) + 0.02, Element[wheights, k]), (cradius - 0.02, Element[wheights, k]), Element[wellipsemidpts, k - 1]], k, 2, n + 1) → wellipses
  46. Arc(cellipsebottom, cpt2, cpt1) → carcbottom
  47. Sequence(Arc[Element[wellipses, k], ((-cradius), Element[wheights, k + 1]), (cradius, Element[wheights, k + 1])], k, 1, n) → warcfront
  48. Sequence(Arc[Element[wellipses, k], (cradius, Element[wheights, k + 1]), ((-cradius), Element[wheights, k + 1])], k, 1, n) → warcback
  49. IntegralBetween(whitetopline, efuntop, (-cradius), cradius) → whitetop
  50. IntegralBetween(efunbottom, whitebottomline, (-cradius), cradius) → whitebottom
  51. Point({0, hstart - (cscalemax - (hstart / cheight * cscalerange))}) → wptstartellipsemid
  52. Ellipse(((-cradius) + 0.02, hstart), (cradius - 0.02, hstart), wptstartellipsemid) → wstartellipse
  53. Arc(wstartellipse, ((-cradius) + 0.02, hstart), (cradius - 0.02, hstart)) → wstartfrontellipse
  54. Arc(wstartellipse, (cradius - 0.02, hstart), ((-cradius) + 0.02, hstart)) → wstartbackellipse
  55. Sequence(Segment[((-cradius) - 0.36, Element[wheights, k]), ((-cradius) - 0.08, Element[wheights, k])], k, 1, n + 1) → hlines
  56. Sequence(Vector[((-cradius) - 0.22, Element[wheights, k]), ((-cradius) - 0.22, Element[wheights, k + 1])], k, 1, n) → wvecs
  57. Vector(((-cradius) - 0.22, (n * dh) + hstart), ((-cradius) - 0.22, wheight)) → wlastvec
  58. Segment(((-cradius) - 0.08, 0), ((-cradius) - 0.36, 0)) → wstartline
  59. Segment(((-cradius) - 0.36, wheight), ((-cradius) - 0.08, wheight)) → hendline
  60. Polygon(((-2 * cradius), ((j + 1) * dh) + hstart + 0.008), ((-2 * cradius), 10), ((-cradius) + 0.006, 10), ((-cradius) + 0.006, ((j + 1) * dh) + hstart + 0.008)) → cwhitetoprec, wr3, wr4, wr5, wr6
  61. Polygon(((-2 * cradius), (j * dh) + hstart - 0.008), ((-2 * cradius), -10), ((-cradius) + 0.006, -10), ((-cradius) + 0.006, (j * dh) + hstart - 0.008)) → cwhitebottomrec, f, g, h, i
  62. Polygon(((2 * cradius), (j * dh) + hstart - 0.008), ((2 * cradius), -10), (cradius - 0.006, -10), (cradius - 0.006, (j * dh) + hstart - 0.008)) → cwhitebottomrecright, wr11, wr12, wr1, wr2
  63. Polygon(((2 * cradius), ((j + 1) * dh) + hstart + 0.008), ((2 * cradius), 10), (cradius - 0.006, 10), (cradius - 0.006, ((j + 1) * dh) + hstart + 0.008)) → cwhiteroprecright, k, l, q, c
  64. Vector(((-cradius) - 0.22, 0), ((-cradius) - 0.22, hstart)) → wstartvec
  65. Vector(((-cradius) - 0.22, hstart), ((-cradius) - 0.22, wheight)) → wvec
  66. Segment(((-cradius) - 0.08, hstart), ((-cradius) - 0.36, hstart)) → hstartline
  67. Polygon((qxloc + ((p * dh) * j) - qos, -10), (qxloc - 2, -10), (qxloc - 2, 10), (qxloc + hstart + (j * dh) - qos, 10), (qxloc + hstart + (j * dh) - qos, qhloc - 0.16), (qxloc + ((p * dh) * j) - qos, qvloc + 0.16)) → qwhitebefore, d, e, f_1, g_1, h_1, i_1
  68. Polygon((qxloc + ((p * dh) * (j + 1)) + qos, -10), ((-2 * cradius), -10), ((-2 * cradius), 10), (qxloc + hstart + ((j + 1) * dh) + qos, 10), (qxloc + hstart + ((j + 1) * dh) + qos, qhloc - 0.16), (qxloc + ((p * dh) * (j + 1)) + qos, qvloc + 0.16)) → qwhiteafter, s, j_1, k_1, l_1, m_1, n_1
  69. Sequence(Point[{-0.18, y(Element[wellipsemidpts, k]) + (y(Element[wellipsemidpts, k + 1]) - y(Element[wellipsemidpts, k])) / 2 + 0.12}], k, 1, n) → cdvlabelpts
  70. Sequence(Text["\Delta v", Element[cdvlabelpts, k], true, true], k, 1, n) → cdvlabels
  71. Point({-0.18, y(wptstartellipsemid) + (y(Element[wellipsemidpts, 1]) - y(wptstartellipsemid)) / 2 + 0.12}) → cdvlabelstartpt
  72. Point({-0.18, y(Element[wellipsemidpts, n]) + (y(wptellipsemid) - y(Element[wellipsemidpts, n])) / 2 + 0.12}) → cdvlabelendpt
  73. Text("\Delta v", cdvlabelstartpt, true, true) → cdvlabelstart
  74. Text("\Delta v", cdvlabelendpt, true, true) → cdvlabelend
  75. Sequence(Point[{(-cradius) - 0.7, Element[wheights, k] + dh / 2 + 0.12}], k, 1, n) → cdhlabelpts
  76. Sequence(Text["\Delta h", Element[cdhlabelpts, k], true, true], k, 1, n) → cdhlabels
  77. Point({(-cradius) - 0.7, Element[wheights, n + 1] + (wheight - Element[wheights, n + 1]) / 2 + 0.12}) → cdhlabelendpt
  78. Text("\Delta h", cdhlabelendpt, true, true) → cdhlabelend
  79. Sequence(Point[{qxloc + Element[wheights, k] + (1 / 2 * dh) - 0.12, qhloc + 0.34}], k, 1, n) → qdhlabelpts
  80. Point({qxloc + Element[wheights, n + 1] + (wheight - Element[wheights, n + 1]) / 2 - 0.12, qhloc + 0.34}) → qdhlabelendpt
  81. Sequence(Text["\Delta h", Element[qdhlabelpts, k], true, true], k, 1, n) → qdhlabels
  82. Text("\Delta h", qdhlabelendpt, true, true) → qdhlabelend
  83. Sequence(Point[{qxloc + ((p * dh) * (k - 1 / 2)) - 0.135, qvloc - 0.16}], k, 1, n) → qdvlabelpts
  84. Point({qxloc + ((p * dh) * n) + (vol - ((p * dh) * n)) / 2 - 0.135, qvloc - 0.16}) → qdvlabelendpt
  85. Text("\Delta v", qdvlabelendpt, true, true) → qdvlabelend
  86. Sequence(Text["\Delta v", Element[qdvlabelpts, k], true, true], k, 1, n) → qdvlabels
  87. Point({-0.26, hstart + (wheight - hstart) / 2 + 0.07}) → cvlabelpt
  88. Text("\Delta v", cvlabelpt, true, true) → cvlabel
  89. Point({(-cradius) - 0.85, hstart + (wheight - hstart) / 2 + 0.2}) → chlabelpt
  90. Text("\Delta h", chlabelpt, true, true) → chlabel
  91. Point({qxloc + vol / 2 - 0.18, qvloc - 0.14}) → qvlabelpt
  92. Text("\Delta v", qvlabelpt, true, true) → qvlabel
  93. Point({qxloc + hstart + (wheight - hstart) / 2 - 0.17, qhloc + 0.38}) → qhlabelpt
  94. Text("\Delta h", qhlabelpt, true, true) → qhlabel
  95. Segment((qxloc + vol, qvloc + 0.16), (qxloc + vol, qvloc - 0.16)) → qvendline
  96. Vector((qxloc, qvloc), (qxloc + vol, qvloc)) → qvvec
  97. Segment((qxloc, qvloc + 0.16), (qxloc, qvloc - 0.16)) → qvstartline
  98. Segment((qxloc + wheight, qhloc - 0.16), (qxloc + wheight, qhloc + 0.16)) → qhendline
  99. Vector((qxloc + hstart, qhloc), (qxloc + wheight, qhloc)) → qhvec
  100. Segment((qxloc + hstart, qhloc - 0.16), (qxloc + hstart, qhloc + 0.16)) → qhstartline
  101. Segment((qxloc, qhloc - 0.16), (qxloc, qhloc + 0.16)) → qwstartline
  102. Segment((qxloc + vol, qvloc + 0.16), (qxloc + wheight, qhloc - 0.16)) → quplinelast
  103. Segment((qxloc, qvloc + 0.16), (qxloc + hstart, qhloc - 0.16)) → quplinefirst
  104. Segment((qxloc + hstart + vol, qhloc + 0.16), (qxloc + hstart + vol, qhloc - 0.16)) → qonhendline
  105. Sequence(Segment[(qxloc + hstart + (k * vol), qhloc + 0.16), (qxloc + hstart + (k * vol), qhloc - 0.16)], k, 0, m) → qonhlines
  106. Segment((qxloc + vol, qvloc + 0.16), (qxloc + hstart + vol, qhloc - 0.16)) → qonhendupline
  107. Sequence(Segment[(qxloc + Element[wheights, k], qhloc - 0.16), (qxloc + Element[wheights, k], qhloc + 0.16)], k, 1, n + 1) → qhlines
  108. Sequence(Vector[(qxloc + ((p * dh) * k), qvloc), (qxloc + ((p * dh) * (k + 1)), qvloc)], k, 0, n - 1) → qvvecs
  109. Vector((qxloc + ((p * dh) * n), qvloc), (qxloc + vol, qvloc)) → qvlastvec
  110. Sequence(Segment[(qxloc + ((p * dh) * k), qvloc + 0.16), (qxloc + ((p * dh) * k), qvloc - 0.16)], k, 0, n) → qvlines
  111. Sequence(Segment[(qxloc + ((p * dh) * k), qvloc + 0.16), (qxloc + Element[wheights, k + 1], qhloc - 0.16)], k, 0, n) → quplines
  112. Vector((qxloc + vol, qvloc), (qxloc + vol, qvloc + wheight - hstart)) → quphvec
  113. Sequence(Point[{qxloc + ((p * dh) * k), qvloc + dh}], k, 1, n) → qupvecpts
  114. Sequence(Point[{qxloc + Element[wheights, k], qhloc}], k, 2, n + 1) → qhvecendpts
  115. Sequence(Point[{x(Element[qhvecendpts, k]) + (rot * (x(Element[qupvecpts, k]) - x(Element[qhvecendpts, k]))), y(Element[qhvecendpts, k]) + (rot * (y(Element[qupvecpts, k]) - y(Element[qhvecendpts, k])))}], k, 1, n) → qhvecpts
  116. Sequence(Vector[((dh * cos(π + rota)) + x(Element[qhvecpts, k]), (dh * sin(π + rota)) + y(Element[qhvecpts, k])), Element[qhvecpts, k]], k, 1, n) → qhrotvecs
  117. Point({qxloc + wheight, qhloc}) → qhlastpt
  118. Point({qxloc + vol, qvloc + wheight - (n * dh) - hstart}) → quplastpt
  119. Point({x(qhlastpt) + (rot * (x(quplastpt) - x(qhlastpt))), y(qhlastpt) + (rot * (y(quplastpt) - y(qhlastpt)))}) → qhlastvecpt
  120. Vector(((qhlastveclength * cos(π + rota)) + x(qhlastvecpt), (qhlastveclength * sin(π + rota)) + y(qhlastvecpt)), qhlastvecpt) → qhlastrotvec
  121. Vector((((dh + hstart) * cos(π + rota)) + qxloc + hstart + dh - (rot * (hstart + dh)), ((dh + hstart) * sin(π + rota)) + qhloc - (rot * (qhloc - (qvloc + dh)))), ((dh * cos(π + rota)) + qxloc + hstart + dh - (rot * (hstart + dh)), (dh * sin(π + rota)) + qhloc - (rot * (qhloc - (qvloc + dh))))) → qhstartvec

AI 绘图提示语参考

绘制一个圆柱倒水的动态几何剖面:先画圆柱侧视的圆(圆心在水平中心线上,半径为常量),再取经过圆心的切/水平参考线,并用旋转得到一组相关直线交点作为入水方向。以该方向与圆的交点构造圆弧表示液面上边界,并在圆柱内部用多段折线/多边形表示水体。给出竖直的高度位置点,沿高度生成一列由椭圆构成的“液面截面”带;每个高度截面用上下两条椭圆弧与底部圆弧拼成顶部波形。最后加入从高度位置到圆周的连段与测量量的可视化标注弧线,体现水高随体积变化的几何建模过程。
以上提示语为根据原始绘图命令整理而来,仅供参考。