Adding and Subtracting Integers with Balloons and Sandbags

Adding and Subtracting Integers with Balloons and Sandbags
Loading the math board and drawing, please wait…
2023-02-14 10:10
This interactive activity demonstrates integer addition and subtraction through the manipulation of balloons and sandbags. The key mathematical concepts involve positive and negative numbers, direction, and position changes. Construction uses GeoGebra commands such as Shuffle, RandomUniform, Polygon, and animation features to create dynamic models. Suitable for students in grades 6-8 for hands-on learning and concept reinforcement.

GeoGebra Commands & Parameters

  1. Shuffle(Flatten[{Sequence[Rotate[(6.5, 3.25), (((-1)^(n) * 30) * n°), (6.5, 4.5)], n, 1, 6], Sequence[Rotate[(6.5, 2), (((-1)^(n) * 20) * n°), (6.5, 4.5)], n, 1, 9], Sequence[Rotate[(6.5, 3.25), (((-1)^(n) * 30) * n°), (6.5, 4.5)], n, 7, 12], Sequence[Rotate[(6.5, 2), (((-1)^(n) * 20) * n°), (6.5, 4.5)], n, 10, 18]}]) → balloonStartUnShuffled, {(5.875, 5.582531754730549), (8.106969024216347, 6.415111107797445), (8.665063509461095, 5.75), (7.582531754730549, 5.125), (7.582531754730548, 3.875), (5.417468245269452, 5.125000000000001), (8.96201938253052, 4.934120444167326), (6.500000000000001, 3.25), (5.875, 3.4174682452694514), (4.893030975783651, 2.5848888922025557), (6.5, 5.75), (5.25, 4.5), (4.334936490538903, 3.25), (7.125, 5.582531754730548), (8.96201938253052, 4.065879555832674), (7.3550503583141715, 2.1507684480352287), (4.334936490538903, 5.749999999999999), (4.03798061746948, 4.934120444167326), (5.417468245269452, 3.875), (6.499999999999999, 2), (5.6449496416858285, 6.849231551964771), (7.355050358314172, 6.84923155196477), (5.6449496416858285, 2.1507684480352287), (8.106969024216347, 2.584888892202555), (7.75, 4.5), (8.665063509461097, 3.2500000000000018), (6.5, 7), (4.893030975783651, 6.415111107797445), (4.037980617469479, 4.065879555832675), (7.125000000000001, 3.4174682452694523)}
  2. RandomUniform(0, 0.99, 250) → allRandomSeeds, {0.503853512517073, 0.7491111701492235, 0.8442527536337929, 0.4921483817071251, 0.8375961156112641, 0.6568427521197299, 0.609819764304549, 0.7511134210471476, 0.21101441771551252, 0.3683922655296436, 0.7156928479753363, 0.5113385770061567, 0.7060700318307322, 0.0021556776285795577, 0.5505780431148576, 0.045915346394319434, 0.8230031786207095, 0.5007064796958661, 0.5087705086707899, 0.2174346943892503, 0.17606723675165864, 0.8840649058810164, 0.2182261432318514, 0.2995973947989045, 0.6205752727468329, 0.8293919253214111, 0.0407733623560389, 0.09212092763834852, 0.6554221514786751, 0.4028707348280854, 0.5118852511465564, 0.5141733983078179, 0.040118609253080466, 0.4262082819773261, 0.14277425604575858, 0.7374535000468433, 0.45868449303090514, 0.33279666436175126, 0.5163509847548121, 0.7568620620362925, 0.7944963465519358, 0.10711958161271502, 0.2608051773689834, 0.4544735130297443, 0.570370025779852, 0.3954708578870268, 0.2302214393830906, 0.08121799345562064, 0.7767819636603904, 0.7164724691160198, 0.5807342390740972, 0.19032253040999353, 0.918193697269224, 0.08623664267311155, 0.8432554663350166, 0.11713624938144755, 0.0029415782673552727, 0.37531183392922096, 0.729775327078474, 0.14147832266445395, 0.5560898360627231, 0.332784101697298, 0.6796411170012074, 0.7210983652436165, 0.4270180508618833, 0.9070764794869446, 0.2250602363082825, 0.2682277270323478, 0.5543239159280636, 0.4730950494178332, 0.021353746698596673, 0.06552637444380097, 0.5298717129978552, 0.24141651254647378, 0.1472025616803171, 0.3929936863420067, 0.7215006746443676, 0.14719356958276925, 0.5532834973756854, 0.9036124062021141, 0.6800321041421806, 0.3143749642830807, 0.8142837511812776, 0.7526342264508614, 0.3407733646559731, 0.10469419360481774, 0.26931192626465544, 0.2434909966652849, 0.8627157985926341, 0.8306757309007897, 0.37919030072944365, 0.1623298229403252, 0.48005870995363137, 0.1376401852761594, 0.7660174479842649, 0.303121059959084, 0.3405646847841549, 0.9813599842053247, 0.5107322101072489, 0.08617690958442539, 0.7335622505171573, 0.5156237079341588, 0.5381891137639914, 0.6547450596417046, 0.14715959406785806, 0.7675133685476685, 0.8164722033510113, 0.3871044144222482, 0.32941887735882863, 0.6776803767323077, 0.6078286829602608, 0.025292349369004232, 0.6518637666748603, 0.7583260091917172, 0.5426954272022108, 0.4962306260124898, 0.9157530255954273, 0.07295037781146235, 0.5558205326634509, 0.8265938175441992, 0.5420512363510357, 0.34922755262548355, 0.594449492434236, 0.1892775781192458, 0.664963586750838, 0.34959814807653516, 0.8929490433952908, 0.8267752694556303, 0.8462740976734937, 0.7733396252969968, 0.1560842102313255, 0.34516013001405893, 0.27353769054588095, 0.41898287851053095, 0.23444316159291897, 0.1816964530168705, 0.049424231731910066, 0.556987569866692, 0.26022092531400154, 0.34936676099363817, 0.10219864603561113, 0.9195721814066026, 0.7397280350418357, 0.8128031394845736, 0.25844355007446895, 0.06751386758565449, 0.17058120367183158, 0.9322497209909817, 0.6186922734875855, 0.20259091153524866, 0.8765631047827966, 0.11525933491805027, 0.07463748435295056, 0.36913554107993046, 0.41160442992230295, 0.6898410911866033, 0.7330164374164682, 0.8388973709862068, 0.35624652752666197, 0.03772677559335418, 0.5661469248583154, 0.6600872454231625, 0.7852839025069269, 0.522312566147315, 0.7423986538869815, 0.3540792196255298, 0.7540655850170126, 0.3526590412984837, 0.4916325313891629, 0.7917928802312191, 0.7731514169317661, 0.7726956220403896, 0.020826162064310694, 0.5362610922490813, 0.42667271096407855, 0.6234772995770582, 0.7337267745419906, 0.768307452789304, 0.0688397703659346, 0.8459796832965336, 0.6254333847564936, 0.6086162369968618, 0.405566887878767, 0.9724950369753023, 0.5283080070454441, 0.26177138322670584, 0.20415294914694473, 0.44620515142351513, 0.5195513523297717, 0.19607430150267427, 0.5733600813107073, 0.9109587239750202, 0.0031513700218749594, 0.43711984475042487, 0.559073734925516, 0.8266686649334103, 0.9497237713309669, 0.6432174411981179, 0.3270084269387239, 0.6900719835735651, 0.027011298491107477, 0.7267888505079765, 0.11363832134900193, 0.7358577417522261, 0.2914945703604786, 0.4178571049037389, 0.35968777163298654, 0.9693700552959139, 0.5176900548199194, 0.27366051044088735, 0.7071076991442704, 0.799231973920847, 0.3862712726065986, 0.38228334020296223, 0.4604933060654686, 0.8063119106936841, 0.5851473863555019, 0.1479896786483445, 0.887365571148918, 0.6244679628364376, 0.1590693152516553, 0.31167923189424773, 0.35864303013338567, 0.15845729156106408, 0.1732055515445325, 0.7115540384426994, 0.3709722379804371, 0.8852851279628705, 0.06444174629750812, 0.9566922348802741, 0.9863646781311243, 0.46709573925557585, 0.14090480340005465, 0.6297699415052588, 0.7318044593026806, 0.116469776413336, 0.5653989838324913, 0.45465500741351983, 0.8121457933028077, 0.108694878977569, 0.942063670506768, 0.3200160409479908, 0.06371066499457395, 0.950214337675382, 0.8676233707063931, 0.8714475429374168, 0.9535266303435326, 0.5580349610116893, 0.30909891052075406, 0.0019071600828481404}
  3. Shuffle({-9, -3, 2, 9}) → randomYCloudStarts, {-3, -9, 2, 9}
  4. Shuffle(Flatten[{Sequence[(6.5, -4.5) + ((2 * cos(n)), sin(n)), n, -6, 6], Sequence[(6.5, -4.5) + ((3 * cos(n)), (1.75 * sin(n))), n, -9, 9]}]) → bagStartUnShuffled, {(7.067324370926452, -5.458924274663138), (5.251559490358573, -2.9087295030550573), (8.761706763029913, -5.649726547757881), (3.5300225101986635, -4.746960014104768), (8.420340573300733, -4.779415498198926), (8.120906917604419, -5.972574223413819), (3.7666092143459693, -3.778792650826926), (8.120906917604419, -3.027425776586181), (5.667706326905715, -5.409297426825682), (9.380510859951098, -4.98897712184812), (8.5, -4.5), (8.420340573300733, -4.220584501801074), (3.7666092143459693, -5.221207349173074), (5.192712758272776, -3.7431975046920716), (6.063499898574159, -6.231376931590918), (4.5390691374091645, -3.1755956332111257), (5.667706326905715, -3.590702573174318), (4.5390691374091645, -5.824404366788874), (4.52001500679911, -4.358879991940133), (7.350986556389679, -6.178117480660492), (7.5806046117362795, -5.341470984807897), (4.52001500679911, -4.641120008059867), (7.5806046117362795, -3.6585290151921033), (9.380510859951098, -4.01102287815188), (7.067324370926452, -3.5410757253368614), (5.192712758272776, -5.256802495307928), (5.251559490358573, -6.091270496944943), (6.063499898574159, -2.768623068409082), (9.5, -4.5), (3.5300225101986635, -4.253039985895232), (7.350986556389679, -2.821882519339508), (8.761706763029913, -3.350273452242119)}
  5. Zip(Distance[n, y = -9], n, bagsDroppedCopy) → bagDropDistance
  6. Sequence(Sum[First[bagDropDistance, n]], n, 1, Length[bagDropDistance]) → bagDropDistanceCum
  7. Sequence(If[n > 1 ∧ animationDropSlider < bagDropDistanceCum(n - 1) ∨ n ≟ 1 ∧ animationDropSlider ≟ 0, 0, animationDropSlider < bagDropDistanceCum(n), animationDropSlider - If[n ≟ 1, 0, bagDropDistanceCum(n - 1)], bagDropDistance(n)], n, 1, Length[bagDropDistanceCum]) → bagDropAnimateSlider
  8. If(32 - Mod[numSandbagsTotalStatic, 32] < abs(numSandbagsStatic), {Mod[numSandbagsTotalStatic, 32] + 1, 32, abs(numSandbagsStatic) - (32 - Mod[numSandbagsTotalStatic, 32])}, {Mod[numSandbagsTotalStatic, 32] + 1, Mod[numSandbagsTotalStatic, 32] + abs(numSandbagsStatic), 0}) → bagsTake
  9. If(numSandbagsStatic < 0, Flatten[{Take[bagStartUnShuffled, bagsTake(1), bagsTake(2)], First[bagStartUnShuffled, bagsTake(3)]}], {}) → bagsDropped
  10. Zip((x(n), -8.85), n, bagsDropped) → bagDropListGround
  11. Zip(PartitionPoint[n, m, p, k], n, bagsDroppedCopy, m, bagDropListGround, p, bagDropAnimateSlider, k, bagDropDistance) → bagDropAnimatePoints
  12. Take(allRandomSeeds, randIndex, randIndex + numRandoms - 1) → currentRandomSeeds
  13. Sequence((100 + floor((allRandomSeeds(A) * 60))) / 10, A, 2, 51) → cloud1x, {14.4, 15, 12.9, 15, 13.9, 13.6, 14.5, 11.2, 12.2, 14.2, 13, 14.2, 10, 13.3, 10.2, 14.9, 13, 13, 11.3, 11, 15.3, 11.3, 11.7, 13.7, 14.9, 10.2, 10.5, 13.9, 12.4, 13, 13, 10.2, 12.5, 10.8, 14.4, 12.7, 11.9, 13, 14.5, 14.7, 10.6, 11.5, 12.7, 13.4, 12.3, 11.3, 10.4, 14.6, 14.2, 13.4}
  14. Sequence((-20 + floor((allRandomSeeds(A) * 40))) / 10, A, 52, 72) → cloud1y, {-1.3, 1.6, -1.7, 1.3, -1.6, -2, -0.5, 0.9, -1.5, 0.2, -0.7, 0.7, 0.8, -0.3, 1.6, -1.1, -1, 0.2, -0.2, -2, -1.8}
  15. Polygon(Zip[PixelsToPoint[Corner[1], Corner[3], Corner[5], A], A, {(pixelsLeft, pixelsTop), (pixelsLeft, y(Corner[5]) - pixelsBottom), Corner[5] - (pixelsRight, pixelsBottom), (x(Corner[5]) - pixelsRight, pixelsTop)}]) → borderBox
  16. Corner(5) → Dims
  17. Segment((0, 0), (0, 8)) → verticalLineTop
  18. Segment((0, 0), (0, -8)) → verticalLineBottom
  19. Polygon({BucketPoint + (1, 1), BucketPoint + (1, -1), BucketPoint + (-1, -1), BucketPoint + (-1, 1)}) → bucketArea
  20. If(Length[bagDropDistance] > 0, Sum[bagDropDistance], 1) → animationDropRange
  21. IndexOf(Element[KeepIf[n ≥ animationDropSlider, n, bagDropDistanceCum], 1], bagDropDistanceCum) → animationCount
  22. Zip(Circle[n, 1], n, cloud1Points) → cloud1
  23. Sequence((-20 + floor((allRandomSeeds(A) * 40))) / 10, A, 73, 93) → cloud2x, {0.1, -1.1, -1.5, -0.5, 0.8, -1.5, 0.2, 1.6, 0.7, -0.8, 1.2, 1, -0.7, -1.6, -1, -1.1, 1.4, 1.3, -0.5, -1.4, -0.1}
  24. Sequence((-10 + floor((allRandomSeeds(A) * 10))) / 10, A, 94, 114) → cloud2y, {-0.9, -0.3, -0.7, -0.7, -0.1, -0.5, -1, -0.3, -0.5, -0.5, -0.4, -0.9, -0.3, -0.2, -0.7, -0.7, -0.4, -0.4, -1, -0.4, -0.3}
  25. Zip(Circle[n, 1], n, cloud2Points) → cloud2
  26. Sequence((50 + floor((allRandomSeeds(A) * 50))) / 10, A, 115, 155) → cloud3x, {7.7, 7.4, 9.5, 5.3, 7.7, 9.1, 7.7, 6.7, 7.9, 5.9, 8.3, 6.7, 9.4, 9.1, 9.2, 8.8, 5.7, 6.7, 6.3, 7, 6.1, 5.9, 5.2, 7.7, 6.3, 6.7, 5.5, 9.5, 8.6, 9, 6.2, 5.3, 5.8, 9.6, 8, 6, 9.3, 5.5, 5.3, 6.8, 7}
  27. Sequence((-15 + floor((allRandomSeeds(A) * 30))) / 10, A, 155, 195) → cloud3y, {-0.3, 0.5, 0.6, 1, -0.5, -1.4, 0.1, 0.4, 0.8, 0, 0.7, -0.5, 0.7, -0.5, -0.1, 0.8, 0.8, 0.8, -1.5, 0.1, -0.3, 0.3, 0.7, 0.8, -1.3, 1, 0.3, 0.3, -0.3, 1.4, 0, -0.8, -0.9, -0.2, 0, -1, 0.2, 1.2, -1.5, -0.2, 0.1}
  28. Zip(Circle[n, 1], n, cloud3Points) → cloud3
  29. Polygon({(-3.5, 9), (-3.5, -9), (13.5, -9), (13.5, 9)}) → moveArea
  30. Polygon({(-3.5, 9), (-3.5, -9), (13.5, -9), (13.5, 9)}) → moveBorder
  31. Sequence((20 + floor((allRandomSeeds(A) * 40))) / 10, A, 195, 215) → cloud4x, {4.2, 5.3, 5.7, 4.5, 3.3, 4.7, 2.1, 4.9, 2.4, 4.9, 3.1, 3.6, 3.4, 5.8, 4, 3, 4.8, 5.1, 3.5, 3.5, 3.8}
  32. Sequence((-10 + floor((allRandomSeeds(A) * 20))) / 10, A, 216, 236) → cloud4y, {0.6, 0.1, -0.8, 0.7, 0.2, -0.7, -0.4, -0.3, -0.7, -0.7, 0.4, -0.3, 0.7, -0.9, 0.9, 0.9, -0.1, -0.8, 0.2, 0.4, -0.8}
  33. Zip(Circle[n, 1], n, cloud4Points) → cloud4
  34. Sequence(RandomPointIn[Circle[(6.5, 5), 2.5]], n, 1, 40) → balloonPoints, {(4.166850898618858, 4.618813171611889), (4.740986745676254, 3.563977444185191), (7.093645915082135, 4.716639902998579), (5.0376651967490025, 3.9076709746684903), (8.195853021651832, 6.390578615547718), (6.7992043750369575, 4.139888339997933), (6.7578045184545505, 2.585492286394267), (7.355749720523023, 5.568552625056579), (7.944908353329048, 3.0473980790431376), (7.568517293162504, 5.013020249488492), (4.01704839642357, 4.838552187377228), (6.2352961514871375, 4.374377842905806), (8.14070149482979, 5.923705689184024), (8.7758863836073, 4.164122184446975), (4.137014186959725, 4.942617016967092), (7.54021554667578, 6.328899568324715), (5.577688438344177, 4.724948792363318), (8.152236664217643, 6.70404112121904), (7.431420184625761, 2.750714823969317), (5.5671410247267525, 7.076544956257384), (4.55638279313643, 4.160987705153432), (4.096940345161136, 4.69519153100812), (8.892123548023617, 5.379367228584252), (7.151682344535949, 5.822399542459536), (8.934538633125754, 4.480182990646666), (7.238735190036262, 4.028000672552916), (7.44807055342595, 5.581004680083521), (8.496192997531468, 5.2306201743607375), (8.154467247676543, 3.1931804978465412), (5.576946336654584, 4.021666079744872), (5.535589954381583, 6.202445657776281), (7.0036747152372945, 2.6906960628632888), (5.114927899351384, 3.7880349075021194), (6.688974298666592, 5.9691939941587915), (5.565547972400178, 6.927128744275408), (7.380854842207836, 3.6786035367931005), (5.3664099838911685, 5.397983104746935), (5.747582038336503, 3.3960798265749297), (5.312421242931181, 2.931927903515411), (7.406915962273326, 6.282419063291712)}
  35. Zip(Circle[n, 1], n, balloonPoints) → balloons
  36. Zip(Circle[n, 1.1], n, balloonPoints) → balloonOutline
  37. Zip(Circle[n, 1], n, Sequence[BagsCenter + ((2 * cos(n)), sin(n)), n, -6, 6]) → bags
  38. Circle(BagsCenter, 1) → bagArea
  39. Zip(Circle[n, 1.1], n, Sequence[BagsCenter + ((2 * cos(n)), sin(n)), n, -6, 6]) → bagsOutline
  40. Polygon({BucketPoint + (1.1, 1.1), BucketPoint + (1.1, -1.1), BucketPoint + (-1.1, -1.1), BucketPoint + (-1.1, 1.1)}) → bucketOutline
  41. If(numSandbagsStatic > 0, Flatten[{Take[bagStartUnShuffled, bagsTake(1), bagsTake(2)], First[bagStartUnShuffled, bagsTake(3)]}], {}) → bagsAdded
  42. Zip(Segment[BucketPoint, n], n, bagsAdded) → bagStrings_{add}
  43. If(30 - Mod[numBalloonsTotalStatic, 30] < abs(numBalloonsStatic), {Mod[numBalloonsTotalStatic, 30] + 1, 30, abs(numBalloonsStatic) - (30 - Mod[numBalloonsTotalStatic, 30])}, {Mod[numBalloonsTotalStatic, 30] + 1, Mod[numBalloonsTotalStatic, 30] + abs(numBalloonsStatic), 0}) → balloonsTake
  44. If(numBalloonsStatic > 0, Flatten[{Take[balloonStartUnShuffled, balloonsTake(1), balloonsTake(2)], First[balloonStartUnShuffled, balloonsTake(3)]}], {}) → balloonsAdded
  45. Zip(Segment[BucketPoint, n], n, balloonsAdded) → balloonStrings_{add}
  46. If(numBalloonsStatic < 0, Flatten[{Take[balloonStartUnShuffled, balloonsTake(1), balloonsTake(2)], First[balloonStartUnShuffled, balloonsTake(3)]}], {}) → balloonsPopped
  47. Sequence(k + numRandomStart - floor(numMoveClouds), k, -3, 3) → listNumberLine, {6, 7, 8, 9, 10, 11, 12}
  48. Sequence(Segment[(-0.375, (2 * n)), (0.375, (2 * n))], n, -3, 3) → numLineSegs
  49. Sequence((x(TextAlign) + 0.2, (2 * n) + 0.45), n, -3, 3) → numLinePoints
  50. Zip(Text[If[n ≠ numRandomStart - floor(numMoveClouds), n, ""], m, true, true], n, listNumberLine, m, numLinePoints) → textsNumberLine
  51. Zip(Vector[BalloonMid, n], n, balloonsAdded) → balloonVecs
  52. CircleArc(BucketMiddleTop, (x(BucketPoint2) - 0.45, 0.55), (x(BucketPoint1) + 0.5, 0.55)) → bucketArc
  53. Zip(Segment[BucketPoint, n], n, balloonBgEnds) → balloonStrings
  54. Zip(Intersect[bucketArc, n], n, balloonStrings) → balloonStarts
  55. Zip(Intersect[bucketArc, n], n, balloonStrings_{add}) → balloonStart_{add}
  56. Zip(Segment[k, n], k, balloonStart_{add}, n, balloonsAdded) → balloonStringsShort_{add}
  57. Zip(Vector[BalloonMid, n], n, balloonsPopped) → balloonPopVecs
  58. Zip(Vector[BagMid, n], n, bagsAdded) → bagVecs
  59. Zip(Vector[BagMid, k], k, bagDropAnimatePoints) → bagDropVecs
  60. Zip(Translate[balloonPic, Vector[n]], Vector[n], balloonVecs) → balloonImages
  61. Zip(Translate[bangPic, Vector[n]], Vector[n], balloonPopVecs) → popImages
  62. Zip(Translate[bagPic, Vector[n]], Vector[n], bagDropVecs) → bagDropImages
  63. Zip(Translate[bagPic, Vector[n]], Vector[n], bagVecs) → bagImages
  64. Zip(Segment[k, n], k, balloonStarts, n, balloonBgEnds) → balloonStringsShort
  65. Zip(Segment[BucketPoint, n], n, bagBGEnds) → bagStrings

AI Drawing Prompt Reference

Create a dynamic integer addition and subtraction model using balloons and sandbags to represent positive and negative numbers. Start by drawing a border box, then randomly place some sandbags and balloons inside. The balloons and sandbags rotate around a central point to simulate addition and subtraction. There are lines connecting the balloons and sandbags to show their relationships. Finally, animate the movement of the sandbags and balloons to visually demonstrate the process of integer addition and subtraction.
The prompt above was compiled from the original drawing commands and is for reference only.