Rainbow Pendulum Waves

Rainbow Pendulum Waves
Loading the math board and drawing, please wait…
2021-09-24 19:13
In collections Pendulum simulations
This example demonstrates a wave-like motion generated by multiple pendulums with varying lengths, creating a rainbow-colored wave pattern through phase differences. The core mathematical concepts include simple harmonic motion, the relationship between period and the square root of length, phase difference, and wave superposition. Construction highlights: using GeoGebra commands such as Rotate, Sphere, Zip, Sequence, Length, Translate, and Segment, the model builds 16 pendulum objects (L1 to L16), each controlled by an angle variable (angle1 to angle16). A button (button1) and sliders drive the animation, enabling dynamic simulation of the swinging motion. Suitable for middle school physics or mathematics classes to illustrate simple harmonic motion, wave phenomena, and parametric animation design, as well as for university-level physics demonstrations. By adjusting pendulum lengths and initial angles, students can intuitively observe wave formation and propagation.

GeoGebra Commands & Parameters

  1. Rotate(Segment[O, (posx, posy)], π / 2, xAxis) → s
  2. Rotate((posx, posy), π / 2, xAxis) → P
  3. Sphere(P, 1) → sph
  4. Zip("angle" + (Text[k]), k, Ln) → LnamAng
  5. Zip("angleV" + (Text[k]), k, Ln) → LnamAngV
  6. Zip("angleA" + (Text[k]), k, Ln) → LnamAngA
  7. Sequence(k, k, 0, 0.15, 0.01) → Ldiff, {0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.060000000000000005, 0.07, 0.08, 0.09, 0.09999999999999999, 0.10999999999999999, 0.11999999999999998, 0.12999999999999998, 0.13999999999999999, 0.15}
  8. Length(Ldiff) → size
  9. Translate(Rotate[((L1 * sin(angle1)), ((-L1) * cos(angle1))), π / 2, xAxis], Vector[(0, 1, 0)]) → P1
  10. Zip(Vector[(0, 0, 0), (0, k, 0)], k, Ln) → Lv
  11. Zip(Translate[O, Vector[v]], Vector[v], Lv) → TO
  12. Segment((0, 1, 0), P1) → segment1
  13. Translate(Rotate[((L2 * sin(angle2)), ((-L2) * cos(angle2))), π / 2, xAxis], Vector[(0, 2, 0)]) → P2
  14. Segment((0, 2, 0), P2) → segment2
  15. Translate(Rotate[((L3 * sin(angle3)), ((-L3) * cos(angle3))), π / 2, xAxis], Vector[(0, 3, 0)]) → P3
  16. Segment((0, 3, 0), P3) → segment3
  17. Translate(Rotate[((L4 * sin(angle4)), ((-L4) * cos(angle4))), π / 2, xAxis], Vector[(0, 4, 0)]) → P4
  18. Segment((0, 4, 0), P4) → segment4
  19. Translate(Rotate[((L5 * sin(angle5)), ((-L5) * cos(angle5))), π / 2, xAxis], Vector[(0, 5, 0)]) → P5
  20. Segment((0, 5, 0), P5) → segment5
  21. Translate(Rotate[((L6 * sin(angle6)), ((-L6) * cos(angle6))), π / 2, xAxis], Vector[(0, 6, 0)]) → P6
  22. Segment((0, 6, 0), P6) → segment6
  23. Translate(Rotate[((L7 * sin(angle7)), ((-L7) * cos(angle7))), π / 2, xAxis], Vector[(0, 7, 0)]) → P7
  24. Segment((0, 7, 0), P7) → segment7
  25. Translate(Rotate[((L8 * sin(angle8)), ((-L8) * cos(angle8))), π / 2, xAxis], Vector[(0, 8, 0)]) → P8
  26. Segment((0, 8, 0), P8) → segment8
  27. Translate(Rotate[((L9 * sin(angle9)), ((-L9) * cos(angle9))), π / 2, xAxis], Vector[(0, 9, 0)]) → P9
  28. Segment((0, 9, 0), P9) → segment9
  29. Translate(Rotate[((L10 * sin(angle10)), ((-L10) * cos(angle10))), π / 2, xAxis], Vector[(0, 10, 0)]) → P10
  30. Segment((0, 10, 0), P10) → segment10
  31. Translate(Rotate[((L11 * sin(angle11)), ((-L11) * cos(angle11))), π / 2, xAxis], Vector[(0, 11, 0)]) → P11
  32. Segment((0, 11, 0), P11) → segment11
  33. Translate(Rotate[((L12 * sin(angle12)), ((-L12) * cos(angle12))), π / 2, xAxis], Vector[(0, 12, 0)]) → P12
  34. Segment((0, 12, 0), P12) → segment12
  35. Translate(Rotate[((L13 * sin(angle13)), ((-L13) * cos(angle13))), π / 2, xAxis], Vector[(0, 13, 0)]) → P13
  36. Segment((0, 13, 0), P13) → segment13
  37. Translate(Rotate[((L14 * sin(angle14)), ((-L14) * cos(angle14))), π / 2, xAxis], Vector[(0, 14, 0)]) → P14
  38. Segment((0, 14, 0), P14) → segment14
  39. Translate(Rotate[((L15 * sin(angle15)), ((-L15) * cos(angle15))), π / 2, xAxis], Vector[(0, 15, 0)]) → P15
  40. Segment((0, 15, 0), P15) → segment15
  41. Translate(Rotate[((L16 * sin(angle16)), ((-L16) * cos(angle16))), π / 2, xAxis], Vector[(0, 16, 0)]) → P16
  42. Segment((0, 16, 0), P16) → segment16
  43. Zip((9.81 * (120 / (((2 * π) * (13.44 + k + 1))))^(2)), k, Ln) → Llength
  44. Sphere(P1, 0.5) → S1
  45. Sphere(P2, 0.5) → S2
  46. Sphere(P3, 0.5) → S3
  47. Sphere(P4, 0.5) → S4
  48. Sphere(P5, 0.5) → S5
  49. Sphere(P6, 0.5) → S6
  50. Sphere(P7, 0.5) → S7
  51. Sphere(P8, 0.5) → S8
  52. Sphere(P9, 0.5) → S9
  53. Sphere(P10, 0.5) → S10
  54. Sphere(P11, 0.5) → S11
  55. Sphere(P12, 0.5) → S12
  56. Sphere(P13, 0.5) → S13
  57. Sphere(P14, 0.5) → S14
  58. Sphere(P15, 0.5) → S15
  59. Sphere(P16, 0.5) → S16
  60. Segment(Q0, Q1) → top
  61. Segment(Q0', Q0'') → top'
  62. Segment(Q1', Q1'') → top''
  63. Segment(Q1', Q3) → leg1
  64. Segment(Q1'', Q4) → leg2
  65. Segment(Q0', Q5) → leg3
  66. Segment(Q0'', Q6) → leg4

AI Drawing Prompt Reference

Create a rainbow wave pattern with 16 pendulums of different lengths, where the length of each pendulum is determined by its position, with initial angles angle1 to angle16. The motion of the pendulums is achieved through rotation and translation, with spheres of radius 0.5 representing the pendulum ends. The length of each pendulum is calculated using the formula 9.81 * (120 / (2π * (13.44 + k + 1)))^2, where k ranges from 0 to 0.15 with a step of 0.01. The motion of the pendulums is controlled by angles angle1 to angle16.
The prompt above was compiled from the original drawing commands and is for reference only.