Advertisement
Matthen

Coprime Gears (corrected)

Jun 14th, 2013
441
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. sizes = {6, 3, 5.5, 3};
  2. gear[n_] := ((n + Cos[# n]^2) {Cos[#], Sin[#]}) &
  3. h = 15;
  4. Manipulate[
  5. Show[ParametricPlot[
  6. {
  7. RotationMatrix[
  8. sizes[[2]] \[Theta]/sizes[[1]]].(gear[sizes[[1]]][t]),
  9. RotationMatrix[-\[Theta] + Pi/(2 sizes[[2]])].(gear[sizes[[2]]][
  10. t]) + {sizes[[1]] + sizes[[2]] + 1, 0},
  11. RotationMatrix[
  12. sizes[[4]] \[Theta]/sizes[[3]]].(gear[sizes[[3]]][t]) + {0, -h},
  13. RotationMatrix[-\[Theta] + Pi/(2 sizes[[4]])].(gear[sizes[[4]]][
  14. t]) + {sizes[[3]] + sizes[[4]] + 1, -h}
  15. }
  16. , {t, 0, 2 Pi}, PlotStyle -> Thick,
  17. PlotRange -> {{-8, 16}, {-h - 10, 12}}, Axes -> None,
  18. MeshStyle -> None, Frame -> None],
  19. Graphics[
  20. {
  21. Darker@Blue, Disk[{0, 0}, 0.8],
  22. Darker@Purple, Disk[{sizes[[1]] + sizes[[2]] + 1, 0}, 0.8],
  23. Darker@Yellow, Disk[{0, -h}, 0.8],
  24. Darker@Green, Disk[{sizes[[3]] + sizes[[4]] + 1, -h}, 0.8],
  25. Red, PointSize[Large],
  26. Point[{sizes[[1]] + sizes[[2]] + 1, 0} +
  27. RotationMatrix[-\[Theta] + Pi/(2 sizes[[2]])].{sizes[[2]] + 1,
  28. 0}], Darker@Red,
  29. Table[
  30. Block[{p},
  31. p =
  32. sizes[[1]] RotationMatrix[
  33. sizes[[2]] \[Theta]/sizes[[1]] -
  34. Pi (i + 0.5)/sizes[[1]]].{1, 0};
  35. If[Mod[i, 2 sizes[[2]], 1] == 3, {Point[p]}, {}]
  36. ]
  37. , {i, 0, \[Theta] sizes[[2]]/Pi}],
  38.  
  39. Red, PointSize[Large],
  40. Point[{sizes[[3]] + sizes[[4]] + 1, -h} +
  41. RotationMatrix[-\[Theta] + Pi/(2 sizes[[4]])].{sizes[[4]] + 1,
  42. 0}], Orange,
  43. Table[
  44. Block[{p},
  45. p = {0, -h} +
  46. sizes[[3]] RotationMatrix[
  47. sizes[[4]] \[Theta]/sizes[[3]] -
  48. Pi (i + 0.5)/sizes[[3]]].{1, 0};
  49. If[Mod[i, 2 sizes[[4]], 1] == 3, {Point[p]}, {}]
  50. ]
  51. , {i, 0, \[Theta] sizes[[4]]/Pi}]
  52.  
  53. }
  54. ]
  55. ],
  56.  
  57. {\[Theta], 0, 22 Pi}
  58. ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement