curly_motion.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include "common/sketchbook.hpp"
  2. float back_and_forth(float x)
  3. {
  4. x = 1 - motion::cubic_curve(1-x);
  5. return cos(x*common::tau) * (1-x);
  6. }
  7. float forth_and_back(float x)
  8. {
  9. x = 1 - motion::cubic_curve(1-x);
  10. return sin(x*common::tau) * (1-x);
  11. }
  12. constexpr auto point_size = float2::one(10);
  13. float2 point{};
  14. movement<float2, motion::cubic_curve> movement_down{500ms, {300.f,0.f}, {300.f,200.f}};
  15. movement<float, back_and_forth> movement_x{2000ms, 200, 300};
  16. movement<float, forth_and_back> movement_y{2000ms, 200, 300};
  17. void start(Program& program)
  18. {
  19. program.draw_loop = [](auto frame, auto delta)
  20. {
  21. // frame.begin_sketch()
  22. // .rectangle(rect{ frame.size })
  23. // .fill(0xffffff_rgb)
  24. // ;
  25. { auto sketch = frame.begin_sketch();
  26. sketch.ellipse(rect{point_size, point, common::half});
  27. sketch.line_width(1).outline(0x555555_rgb);
  28. }
  29. { auto sketch = frame.begin_sketch();
  30. sketch.ellipse(rect{point_size, float2{200.f,200.f}, common::half});
  31. sketch.line_width(1).outline(0x550000_rgb);
  32. }
  33. { auto sketch = frame.begin_sketch();
  34. sketch.ellipse(rect{point_size, float2{300.f,300.f}, common::half});
  35. sketch.line_width(1).outline(0x005500_rgb);
  36. }
  37. // TODO: implement and use ensemble within symphony here
  38. if(!movement_down.done())
  39. {
  40. movement_down.move(point, delta);
  41. }
  42. else
  43. {
  44. movement_y.move(point.y(), delta);
  45. movement_x.move(point.x(), delta);
  46. }
  47. };
  48. }