分数加法可视化练习
几何画板及绘图内容加载中,请稍等……
本范例通过交互式图表帮助学生掌握分数加法。核心数学概念是异分母分数的加法,需要先通分再相加。构造方面使用了Circle绘制单位圆和扇形表示分数、Polygon绘制条形图、Segment和Translate实现条形和线段的平移动画、Sequence与Shuffle生成随机分数题目、InputBox接收学生输入、If和Element判断答案正确性。适合5-6年级学生使用,可作为课堂练习或课后巩固,帮助学生直观理解分数加法的算理。
GeoGebra 命令及参数
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}If(questionCount ≟ 0, 6, Element[randomNosForNenner, Mod[questionCount, 100] + 1]) → nenner2Shuffle(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}If(questionCount ≟ 0, 3, Element[randomNosForZaehler2, Mod[questionCount, 100] + 1]) → zaehler2Shuffle(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}If(questionCount ≟ 0, 2, If[nenner2 ≟ zaehler2, 0, Element[randomNosForZaehler3, Mod[questionCount, 100] + 1]]) → zaehler3Element(randomNosForZaehler3, Mod[questionCount, 100] + 1) → numYElement(randomNosForZaehler2, Mod[questionCount, 100] + 1) → numXIf(isOne ≠ 1, aInput / bInput ≟ (zaehler2 + zaehler3) / nenner2, aInput ≟ za ∧ bInput ≟ nenner2) → corrErwGekIf(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]]) → fixedAltCircle(A_1, C) → dSequence(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) → sectors2Textfield(aInput) → InputBox1Textfield(bInput) → InputBox2Sequence(I + ((i * widthNennerBar / 12) * (1, 0)), i, 1, 12) → allowedPositionsNennerBarPoint(allowedPositionsNennerBar) → PNennerSequence(H_1 + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → allowedPositionsZaehlerBar1Point(allowedPositionsZaehlerBar1) → PZaehler1Sequence(H + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → allowedPositionsZaehlerBarPoint(allowedPositionsZaehlerBar) → PZaehlerSequence(E + ((i * widthZaehlerBar / 12) * (1, 0)), i, -4, zaehler2, 0.5) → listeEx1If(isOne ≟ 1, (correct1 ∧ correct2 ∨ corrErwGek) ∧ ganzesInput ≟ 1, correct1 ∧ correct2 ∨ corrErwGek) → correctPolygon(PtopLeftCornerFeedback, PtopRightCornerFeedback, PbottomRightCornerFeedback, PbottomLeftCornerFeedback) → rectangleCorrect, ptopleftcornerfeedback, ptoprightcornerfeedback, pbottomrightcornerfeedback, pbottomleftcornerfeedbackAppend(true, Sequence[If[randomNosForZaehler2(i) ≟ randomNosForZaehler2(i - 1), false, true], i, 2, 100]) → stayXAppend(true, Sequence[If[randomNosForZaehler3(i) ≟ randomNosForZaehler3(i - 1), false, true], i, 2, 100]) → stayYRemove(Sequence[If[stayX(i), randomNosForZaehler2(i), 0], i, 1, 100], Sequence[0, i, 1, 100]) → randomNosForXwithoutRepeatRemove(Sequence[If[stayY(i), randomNosForZaehler3(i), 0], i, 1, 100], Sequence[0, i, 1, 100]) → randomNosForYwithoutRepeatElement(randomNosForXwithoutRepeat, Mod[questionCount, Length[randomNosForXwithoutRepeat]] + 1) → numXwithoutRepeatElement(randomNosForYwithoutRepeat, Mod[questionCount, Length[randomNosForYwithoutRepeat]] + 1) → numYwithoutRepeatCircle(A, B) → cSegment(A, A + (Radius[c] * (0, 1))) → gSegment(I, I + (widthNennerBar * (1, 0))) → hSegment(H, H + (widthZaehlerBar * (1, 0))) → iSegment(H_1, H_1 + (widthZaehlerBar * (1, 0))) → jSequence(Rotate[g, ((i * 2) * pi / nenner2), A], i, 0, nenner2 - 1) → StrechenLeftKreisCircle(A_2, D) → eSegment(A_1, A_1 + (Radius[d] * (0, 1))) → kSegment(A_2, A_2 + (Radius[e] * (0, 1))) → lSequence(Rotate[k, ((i * 2) * pi / nenner2), A_1], i, 0, nenner2 - 1) → StreckenKreisMitteSequence(Rotate[l, ((i * 2) * pi / nenner2), A_2], i, 0, nenner2 - 1) → StreckenKreisRechtsSequence(CircleSector[A, Rotate[KreisOben, (((-(i + 1)) * 2) * pi / nenner2), A], Rotate[KreisOben, (((-i) * 2) * pi / nenner2) - 0.0001, A]], i, 0, zaehler2 - 1) → sectors1Sequence(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_2Sequence(E + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → streckenStrecken1Sequence(F + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → streckenStrecken2Element(types, 4) → Text3Element(types, 4) → Text4Sequence(E + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, zaehler2) → streckenPunktLeftIf(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))]]]]]]]]]]]) → PExampleSequence(F + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → streckenPunktRightSequence(F + ((i * widthZaehlerBar / 12) * (1, 0)), i, 1, zaehler3, 0.5) → listeEx2If(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))]]]]]]]]]]]) → PExample1Last(streckenStrecken1) → referencePoint1Last(streckenStrecken2) → referencePoint2Segment(E, P1) → pSegment(F, P2) → qSegment(G, L) → rSegment(M, N) → sSequence(Segment[(x(M) + t, y(M)), (x(M) + t, y(M) + 2)], t, 0, nenner2 / 2, 0.5) → balken2Sequence(Segment[(x(G) + t, y(G)), (x(G) + t, y(G) + 2)], t, 0, nenner2 / 2, 0.5) → balken1Sequence(L + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte1Sequence(G + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte2Sequence(N + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte3Sequence(M + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte4Last(balkenPunkte1) → LastBalkenPunkte1Last(balkenPunkte2) → LastBalkenPunkte2Last(balkenPunkte3) → LastBalkenPunkte3Last(balkenPunkte4) → LastBalkenPunkte4Point(LastBalkenPunkte1) → OSegment(L, O) → tPoint(LastBalkenPunkte2) → PSegment(G, P) → aPoint(LastBalkenPunkte4) → QSegment(M, Q) → bPoint(LastBalkenPunkte3) → RSegment(N, R) → f_1Sequence(Polygon[(i, 5), (i + 0.5, 5), (i + 0.5, 7), (i, 7)], i, -5, zaehler2 / 2 - 5.5, 0.5) → l1Sequence(Polygon[(i, 5), (i + 0.5, 5), (i + 0.5, 7), (i, 7)], i, 2, zaehler3 / 2 + 1.5, 0.5) → l2Translate(sectors1, (schiebeSectors1, 0)) → sectors1'Sequence(S + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → streckenStrecken3Last(streckenStrecken3) → referencePoint3Segment(S, P3) → g_1Segment(T, U) → i_1Sequence(Segment[(x(U) + t, y(U)), (x(U) + t, y(U) + 2)], t, 0, nenner2 / 2, 0.5) → balken3Sequence(T + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte5Sequence(U + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte6Last(balkenPunkte5) → LastBalkenPunkte5Last(balkenPunkte6) → LastBalkenPunkte6Point(LastBalkenPunkte5) → VPoint(LastBalkenPunkte6) → WSegment(T, V) → j_1Segment(U, W) → k_1Sequence(Polygon[(i, 5), (i + 0.5, 5), (i + 0.5, 7), (i, 7)], i, 8, zaehler2 / 2 + 5.5, 0.5) → l3Translate(l1, (schiebeBalken1, 0)) → l1'Translate(l2, (schiebeBalken2, 0)) → l2'Translate(E, (schiebeStrecke1, 0)) → E'Translate(PExample, (schiebeStrecke1, 0)) → PExample'Translate(F, (schiebeStrecke2, 0)) → F'Translate(PExample1, (schiebeStrecke2, 0)) → PExample1'Last(balken1) → l4First(balken2) → l5Midpoint(strecke1) → ZMidpoint(strecke2) → B_1Last(balken2) → l6First(balken3) → l7Midpoint(strecke3) → C_1Midpoint(strecke4) → D_1Segment(Z, B_1) → h_1Segment(C_1, D_1) → l_1Midpoint(h_1) → E_1Midpoint(l_1) → F_1Last(streckenStrecken1) → l8First(streckenStrecken2) → l9Last(streckenStrecken2) → l10First(streckenStrecken3) → l11Point(l8) → G_1Point(l9) → I_1Segment(G_1, I_1) → m_1Point(l10) → J_1Point(l11) → K_1Segment(J_1, K_1) → n_1Midpoint(m_1) → L_1Midpoint(n_1) → M_1Translate(sectors2, ((-schiebeSectors2), 0)) → sectors2'Textfield(ganzesInput) → InputBox3Polygon(PtopLeftCornerFeedback_{1}, PtopRightCornerFeedback_{1}, PbottomRightCornerFeedback_{1}, PbottomLeftCornerFeedback_{1}) → rectangleCorrect_{1}, ptopleftcornerfeedback_{1}, ptoprightcornerfeedback_{1}, pbottomrightcornerfeedback_{1}, pbottomleftcornerfeedback_{1}Mirror(sectors2', x = 1.99) → sectors2''Last(streckenStrecken1) → l12Last(streckenStrecken2) → l13First(streckenStrecken2) → l14First(streckenStrecken3) → l15Last(streckenStrecken3) → l16First(streckenStrecken1) → l17Point(l29) → N_1Point(l22) → O_1Segment(N_1, O_1) → p_1Point(l24) → P_1Point(l18) → Q_1Segment(P_1, Q_1) → q_1Point(l26) → R_1Point(l20) → S_1Segment(R_1, S_1) → r_1Point(l25) → T_1Point(l19) → U_1Segment(T_1, U_1) → s_1Point(l27) → V_1Point(l23) → W_1Segment(V_1, W_1) → t_1Point(l28) → Z_1Point(l21) → B_2Segment(Z_1, B_2) → a_1Remove(streckenStrecken1, Last[streckenStrecken1]) → l30Remove(l30, First[l30]) → l31Remove(streckenStrecken2, Last[streckenStrecken2]) → l32Remove(l32, First[l32]) → l33Remove(streckenStrecken3, Last[streckenStrecken3]) → l34Remove(l34, First[l34]) → l35Segment((x(E) + 0.05, y(E)), (x(PExample) - 0.05, y(PExample))) → mSegment((x(E') + 0.05, y(E')), (x(PExample') - 0.05, y(PExample'))) → m'Segment((x(F) + 0.05, y(F)), (x(PExample1) - 0.05, y(PExample1))) → nSegment((x(F') + 0.05, y(F')), (x(PExample1') - 0.05, y(PExample1'))) → n'Length(g_1) → oLength(n) → uLength(j_1) → vMirror(sectors2, x = 1.99) → sectors2'_{1}
AI 绘图提示语参考
画一个用于分数加法练习的可视化几何图:先在左侧做一个圆作为单位圆,并把它按分母的份数等分成若干扇形;再在圆的不同区域用若干圆弧扇形表示分子对应数量,并可通过旋转位置形成被加的部分。与此同时在右侧用一条水平条形作分子与分母的条形分段,条形被切成若干相同小段,用不同长度或位置对应两项分数,并用平移与对齐表现两部分逐步合并。最后在合并结果处给出矩形式反馈区域,并预留两处输入位置用于填写分数的分子与分母。
以上提示语为根据原始绘图命令整理而来,仅供参考。