分数加法可视化练习

分数加法可视化练习
几何画板及绘图内容加载中,请稍等……
2022-07-11 17:22
本范例通过交互式图表帮助学生掌握分数加法。核心数学概念是异分母分数的加法,需要先通分再相加。构造方面使用了Circle绘制单位圆和扇形表示分数、Polygon绘制条形图、Segment和Translate实现条形和线段的平移动画、Sequence与Shuffle生成随机分数题目、InputBox接收学生输入、If和Element判断答案正确性。适合5-6年级学生使用,可作为课堂练习或课后巩固,帮助学生直观理解分数加法的算理。

GeoGebra 命令及参数

  1. Shuffle(Sequence[Random[2, 12], i, 1, 100]) → randomNosForNenner, {10, 9, 9, 3, 10, 4, 12, 5, 7, 7, 9, 3, 8, 9, 3, 5, 7, 7, 9, 9, 4, 9, 3, 6, 12, 4, 6, 9, 12, 12, 4, 7, 7, 10, 10, 7, 3, 6, 11, 9, 5, 9, 6, 2, 6, 6, 12, 4, 5, 11, 8, 11, 11, 4, 6, 9, 11, 11, 8, 6, 3, 11, 12, 10, 7, 12, 7, 2, 3, 6, 7, 4, 11, 12, 4, 2, 5, 5, 11, 9, 8, 8, 7, 4, 8, 12, 6, 3, 11, 4, 3, 3, 2, 7, 10, 4, 4, 9, 4, 9}
  2. If(questionCount ≟ 0, 6, Element[randomNosForNenner, Mod[questionCount, 100] + 1]) → nenner2
  3. Shuffle(Sequence[Random[1, nenner2 - 1], i, 1, 100]) → randomNosForZaehler2, {2, 3, 8, 1, 4, 8, 1, 6, 7, 8, 6, 7, 6, 6, 5, 7, 7, 3, 8, 4, 4, 8, 8, 3, 2, 7, 1, 4, 2, 3, 6, 4, 6, 8, 4, 6, 4, 8, 4, 6, 7, 4, 2, 5, 4, 8, 6, 6, 5, 6, 8, 8, 1, 8, 1, 1, 6, 1, 5, 1, 2, 3, 2, 2, 1, 2, 5, 2, 7, 8, 8, 2, 6, 7, 3, 1, 3, 2, 8, 5, 3, 6, 1, 2, 5, 3, 7, 3, 2, 2, 2, 3, 2, 3, 6, 7, 7, 3, 8, 8}
  4. If(questionCount ≟ 0, 3, Element[randomNosForZaehler2, Mod[questionCount, 100] + 1]) → zaehler2
  5. Shuffle(Sequence[Random[1, nenner2 - zaehler2], i, 1, 100]) → randomNosForZaehler3, {3, 3, 1, 3, 1, 3, 3, 4, 2, 3, 3, 4, 5, 3, 6, 6, 3, 6, 1, 4, 1, 1, 1, 1, 4, 6, 1, 4, 5, 3, 2, 6, 5, 3, 2, 2, 6, 5, 2, 6, 3, 3, 4, 5, 6, 5, 5, 3, 2, 4, 1, 2, 5, 2, 6, 1, 1, 6, 5, 2, 1, 3, 2, 3, 2, 6, 2, 6, 2, 4, 4, 3, 2, 5, 2, 3, 1, 6, 6, 6, 4, 1, 5, 4, 4, 4, 1, 5, 4, 2, 2, 1, 4, 6, 5, 1, 5, 3, 5, 1}
  6. If(questionCount ≟ 0, 2, If[nenner2 ≟ zaehler2, 0, Element[randomNosForZaehler3, Mod[questionCount, 100] + 1]]) → zaehler3
  7. Element(randomNosForZaehler3, Mod[questionCount, 100] + 1) → numY
  8. Element(randomNosForZaehler2, Mod[questionCount, 100] + 1) → numX
  9. If(isOne ≠ 1, aInput / bInput ≟ (zaehler2 + zaehler3) / nenner2, aInput ≟ za ∧ bInput ≟ nenner2) → corrErwGek
  10. If(SelectedElement[types] ≟ types(1), schiebeSectors1 ≠ 0 ∧ schiebeSectors2 ≠ 0, If[SelectedElement[types] ≟ types(2), schiebeStrecke1 ≠ 0 ∧ schiebeStrecke2 ≠ 0, If[SelectedElement[types] ≟ types(3), schiebeBalken1 ≠ 0 ∧ schiebeBalken2 ≠ 0]]) → fixedAlt
  11. Circle(A_1, C) → d
  12. Sequence(CircleSector[A_1, Rotate[K, (((-(i + 1)) * 2) * pi / nenner2), A_1], Rotate[K, (((-i) * 2) * pi / nenner2) - 0.0001, A_1]], i, 0, zaehler3 - 1) → sectors2
  13. Textfield(aInput) → InputBox1
  14. Textfield(bInput) → InputBox2
  15. Sequence(I + ((i * widthNennerBar / 12) * (1, 0)), i, 1, 12) → allowedPositionsNennerBar
  16. Point(allowedPositionsNennerBar) → PNenner
  17. Sequence(H_1 + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → allowedPositionsZaehlerBar1
  18. Point(allowedPositionsZaehlerBar1) → PZaehler1
  19. Sequence(H + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → allowedPositionsZaehlerBar
  20. Point(allowedPositionsZaehlerBar) → PZaehler
  21. Sequence(E + ((i * widthZaehlerBar / 12) * (1, 0)), i, -4, zaehler2, 0.5) → listeEx1
  22. If(isOne ≟ 1, (correct1 ∧ correct2 ∨ corrErwGek) ∧ ganzesInput ≟ 1, correct1 ∧ correct2 ∨ corrErwGek) → correct
  23. Polygon(PtopLeftCornerFeedback, PtopRightCornerFeedback, PbottomRightCornerFeedback, PbottomLeftCornerFeedback) → rectangleCorrect, ptopleftcornerfeedback, ptoprightcornerfeedback, pbottomrightcornerfeedback, pbottomleftcornerfeedback
  24. Append(true, Sequence[If[randomNosForZaehler2(i) ≟ randomNosForZaehler2(i - 1), false, true], i, 2, 100]) → stayX
  25. Append(true, Sequence[If[randomNosForZaehler3(i) ≟ randomNosForZaehler3(i - 1), false, true], i, 2, 100]) → stayY
  26. Remove(Sequence[If[stayX(i), randomNosForZaehler2(i), 0], i, 1, 100], Sequence[0, i, 1, 100]) → randomNosForXwithoutRepeat
  27. Remove(Sequence[If[stayY(i), randomNosForZaehler3(i), 0], i, 1, 100], Sequence[0, i, 1, 100]) → randomNosForYwithoutRepeat
  28. Element(randomNosForXwithoutRepeat, Mod[questionCount, Length[randomNosForXwithoutRepeat]] + 1) → numXwithoutRepeat
  29. Element(randomNosForYwithoutRepeat, Mod[questionCount, Length[randomNosForYwithoutRepeat]] + 1) → numYwithoutRepeat
  30. Circle(A, B) → c
  31. Segment(A, A + (Radius[c] * (0, 1))) → g
  32. Segment(I, I + (widthNennerBar * (1, 0))) → h
  33. Segment(H, H + (widthZaehlerBar * (1, 0))) → i
  34. Segment(H_1, H_1 + (widthZaehlerBar * (1, 0))) → j
  35. Sequence(Rotate[g, ((i * 2) * pi / nenner2), A], i, 0, nenner2 - 1) → StrechenLeftKreis
  36. Circle(A_2, D) → e
  37. Segment(A_1, A_1 + (Radius[d] * (0, 1))) → k
  38. Segment(A_2, A_2 + (Radius[e] * (0, 1))) → l
  39. Sequence(Rotate[k, ((i * 2) * pi / nenner2), A_1], i, 0, nenner2 - 1) → StreckenKreisMitte
  40. Sequence(Rotate[l, ((i * 2) * pi / nenner2), A_2], i, 0, nenner2 - 1) → StreckenKreisRechts
  41. Sequence(CircleSector[A, Rotate[KreisOben, (((-(i + 1)) * 2) * pi / nenner2), A], Rotate[KreisOben, (((-i) * 2) * pi / nenner2) - 0.0001, A]], i, 0, zaehler2 - 1) → sectors1
  42. Sequence(CircleSector[A_2, Rotate[J, (((-(i + 1)) * 2) * pi / nenner2), A_2], Rotate[J, (((-i) * 2) * pi / nenner2) - 0.0001, A_2]], i, 0, zaehler3 - 1) → sectors3_2
  43. Sequence(E + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → streckenStrecken1
  44. Sequence(F + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → streckenStrecken2
  45. Element(types, 4) → Text3
  46. Element(types, 4) → Text4
  47. Sequence(E + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, zaehler2) → streckenPunktLeft
  48. If(zaehler2 ≟ 1, E + ((1 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 2, E + ((2 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 3, E + ((3 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 4, E + ((4 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 5, E + ((5 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 6, E + ((6 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 7, E + ((7 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 8, E + ((8 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 9, E + ((9 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 10, E + ((10 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 11, E + ((11 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 12, E + ((12 / 12 * widthZaehlerBar) * (1, 0))]]]]]]]]]]]) → PExample
  49. Sequence(F + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → streckenPunktRight
  50. Sequence(F + ((i * widthZaehlerBar / 12) * (1, 0)), i, 1, zaehler3, 0.5) → listeEx2
  51. If(zaehler3 ≟ 1, F + ((1 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 2, F + ((2 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 3, F + ((3 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 4, F + ((4 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 5, F + ((5 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 6, F + ((6 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 7, F + ((7 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 8, F + ((8 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 9, F + ((9 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 10, F + ((10 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 11, F + ((11 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 12, F + ((12 / 12 * widthZaehlerBar) * (1, 0))]]]]]]]]]]]) → PExample1
  52. Last(streckenStrecken1) → referencePoint1
  53. Last(streckenStrecken2) → referencePoint2
  54. Segment(E, P1) → p
  55. Segment(F, P2) → q
  56. Segment(G, L) → r
  57. Segment(M, N) → s
  58. Sequence(Segment[(x(M) + t, y(M)), (x(M) + t, y(M) + 2)], t, 0, nenner2 / 2, 0.5) → balken2
  59. Sequence(Segment[(x(G) + t, y(G)), (x(G) + t, y(G) + 2)], t, 0, nenner2 / 2, 0.5) → balken1
  60. Sequence(L + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte1
  61. Sequence(G + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte2
  62. Sequence(N + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte3
  63. Sequence(M + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte4
  64. Last(balkenPunkte1) → LastBalkenPunkte1
  65. Last(balkenPunkte2) → LastBalkenPunkte2
  66. Last(balkenPunkte3) → LastBalkenPunkte3
  67. Last(balkenPunkte4) → LastBalkenPunkte4
  68. Point(LastBalkenPunkte1) → O
  69. Segment(L, O) → t
  70. Point(LastBalkenPunkte2) → P
  71. Segment(G, P) → a
  72. Point(LastBalkenPunkte4) → Q
  73. Segment(M, Q) → b
  74. Point(LastBalkenPunkte3) → R
  75. Segment(N, R) → f_1
  76. Sequence(Polygon[(i, 5), (i + 0.5, 5), (i + 0.5, 7), (i, 7)], i, -5, zaehler2 / 2 - 5.5, 0.5) → l1
  77. Sequence(Polygon[(i, 5), (i + 0.5, 5), (i + 0.5, 7), (i, 7)], i, 2, zaehler3 / 2 + 1.5, 0.5) → l2
  78. Translate(sectors1, (schiebeSectors1, 0)) → sectors1'
  79. Sequence(S + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → streckenStrecken3
  80. Last(streckenStrecken3) → referencePoint3
  81. Segment(S, P3) → g_1
  82. Segment(T, U) → i_1
  83. Sequence(Segment[(x(U) + t, y(U)), (x(U) + t, y(U) + 2)], t, 0, nenner2 / 2, 0.5) → balken3
  84. Sequence(T + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte5
  85. Sequence(U + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte6
  86. Last(balkenPunkte5) → LastBalkenPunkte5
  87. Last(balkenPunkte6) → LastBalkenPunkte6
  88. Point(LastBalkenPunkte5) → V
  89. Point(LastBalkenPunkte6) → W
  90. Segment(T, V) → j_1
  91. Segment(U, W) → k_1
  92. Sequence(Polygon[(i, 5), (i + 0.5, 5), (i + 0.5, 7), (i, 7)], i, 8, zaehler2 / 2 + 5.5, 0.5) → l3
  93. Translate(l1, (schiebeBalken1, 0)) → l1'
  94. Translate(l2, (schiebeBalken2, 0)) → l2'
  95. Translate(E, (schiebeStrecke1, 0)) → E'
  96. Translate(PExample, (schiebeStrecke1, 0)) → PExample'
  97. Translate(F, (schiebeStrecke2, 0)) → F'
  98. Translate(PExample1, (schiebeStrecke2, 0)) → PExample1'
  99. Last(balken1) → l4
  100. First(balken2) → l5
  101. Midpoint(strecke1) → Z
  102. Midpoint(strecke2) → B_1
  103. Last(balken2) → l6
  104. First(balken3) → l7
  105. Midpoint(strecke3) → C_1
  106. Midpoint(strecke4) → D_1
  107. Segment(Z, B_1) → h_1
  108. Segment(C_1, D_1) → l_1
  109. Midpoint(h_1) → E_1
  110. Midpoint(l_1) → F_1
  111. Last(streckenStrecken1) → l8
  112. First(streckenStrecken2) → l9
  113. Last(streckenStrecken2) → l10
  114. First(streckenStrecken3) → l11
  115. Point(l8) → G_1
  116. Point(l9) → I_1
  117. Segment(G_1, I_1) → m_1
  118. Point(l10) → J_1
  119. Point(l11) → K_1
  120. Segment(J_1, K_1) → n_1
  121. Midpoint(m_1) → L_1
  122. Midpoint(n_1) → M_1
  123. Translate(sectors2, ((-schiebeSectors2), 0)) → sectors2'
  124. Textfield(ganzesInput) → InputBox3
  125. Polygon(PtopLeftCornerFeedback_{1}, PtopRightCornerFeedback_{1}, PbottomRightCornerFeedback_{1}, PbottomLeftCornerFeedback_{1}) → rectangleCorrect_{1}, ptopleftcornerfeedback_{1}, ptoprightcornerfeedback_{1}, pbottomrightcornerfeedback_{1}, pbottomleftcornerfeedback_{1}
  126. Mirror(sectors2', x = 1.99) → sectors2''
  127. Last(streckenStrecken1) → l12
  128. Last(streckenStrecken2) → l13
  129. First(streckenStrecken2) → l14
  130. First(streckenStrecken3) → l15
  131. Last(streckenStrecken3) → l16
  132. First(streckenStrecken1) → l17
  133. Point(l29) → N_1
  134. Point(l22) → O_1
  135. Segment(N_1, O_1) → p_1
  136. Point(l24) → P_1
  137. Point(l18) → Q_1
  138. Segment(P_1, Q_1) → q_1
  139. Point(l26) → R_1
  140. Point(l20) → S_1
  141. Segment(R_1, S_1) → r_1
  142. Point(l25) → T_1
  143. Point(l19) → U_1
  144. Segment(T_1, U_1) → s_1
  145. Point(l27) → V_1
  146. Point(l23) → W_1
  147. Segment(V_1, W_1) → t_1
  148. Point(l28) → Z_1
  149. Point(l21) → B_2
  150. Segment(Z_1, B_2) → a_1
  151. Remove(streckenStrecken1, Last[streckenStrecken1]) → l30
  152. Remove(l30, First[l30]) → l31
  153. Remove(streckenStrecken2, Last[streckenStrecken2]) → l32
  154. Remove(l32, First[l32]) → l33
  155. Remove(streckenStrecken3, Last[streckenStrecken3]) → l34
  156. Remove(l34, First[l34]) → l35
  157. Segment((x(E) + 0.05, y(E)), (x(PExample) - 0.05, y(PExample))) → m
  158. Segment((x(E') + 0.05, y(E')), (x(PExample') - 0.05, y(PExample'))) → m'
  159. Segment((x(F) + 0.05, y(F)), (x(PExample1) - 0.05, y(PExample1))) → n
  160. Segment((x(F') + 0.05, y(F')), (x(PExample1') - 0.05, y(PExample1'))) → n'
  161. Length(g_1) → o
  162. Length(n) → u
  163. Length(j_1) → v
  164. Mirror(sectors2, x = 1.99) → sectors2'_{1}

AI 绘图提示语参考

画一个用于分数加法练习的可视化几何图:先在左侧做一个圆作为单位圆,并把它按分母的份数等分成若干扇形;再在圆的不同区域用若干圆弧扇形表示分子对应数量,并可通过旋转位置形成被加的部分。与此同时在右侧用一条水平条形作分子与分母的条形分段,条形被切成若干相同小段,用不同长度或位置对应两项分数,并用平移与对齐表现两部分逐步合并。最后在合并结果处给出矩形式反馈区域,并预留两处输入位置用于填写分数的分子与分母。
以上提示语为根据原始绘图命令整理而来,仅供参考。