43 auto getPos = [&](
double t) ->
point_2t {
44 double decay = r * std::exp(-d * t);
46 ox + decay * std::sin(t),
47 oy + decay * std::sin(n * t + std::numbers::pi / 2.0)
51 auto getVelocity = [&](
double t) ->
point_2t {
52 double e_dt = std::exp(-d * t);
54 double vx = r * e_dt * (std::cos(t) - d * std::sin(t));
55 double vy = r * e_dt * (n * std::cos(n * t + std::numbers::pi / 2.0) - d * std::sin(n * t + std::numbers::pi / 2.0));
60 int steps =
static_cast<int>(cycles * 64);
61 double max_t = cycles * 2.0 * std::numbers::pi;
62 double dt = max_t / steps;
63 double kappa = dt / 3.0;
65 auto [start_x, start_y] = getPos(0);
66 std::string path = std::format(
"M {:.2f} {:.2f}", start_x, start_y);
68 for (
int i = 0; i < steps; ++i)
71 double t1 = (i + 1) * dt;
73 auto [p0x, p0y] = getPos(t0);
74 auto [v0x, v0y] = getVelocity(t0);
75 auto [p1x, p1y] = getPos(t1);
76 auto [v1x, v1y] = getVelocity(t1);
79 double c1x = p0x + kappa * v0x;
80 double c1y = p0y + kappa * v0y;
81 double c2x = p1x - kappa * v1x;
82 double c2y = p1y - kappa * v1y;
84 path += std::format(
" C {:.2f} {:.2f}, {:.2f} {:.2f}, {:.2f} {:.2f}",
85 c1x, c1y, c2x, c2y, p1x, p1y);
99 double p2,
double d,
double cycles)
101 auto [ox, oy] = origin;
103 auto getPos = [&](
double t) ->
point_2t {
104 double decay = r * std::exp(-d * t);
106 double x = ox + decay * std::sin(t);
108 double y = oy + (decay / 2.0) * (std::sin(n1 * t + std::numbers::pi / 2.0) + std::sin(n2 * t + p2));
112 auto getVelocity = [&](
double t) ->
point_2t {
113 double e_dt = std::exp(-d * t);
114 double vx = r * e_dt * (std::cos(t) - d * std::sin(t));
116 double vy = (r / 2.0) * e_dt * (
117 (n1 * std::cos(n1 * t + std::numbers::pi / 2.0) - d * std::sin(n1 * t + std::numbers::pi / 2.0)) +
118 (n2 * std::cos(n2 * t + p2) - d * std::sin(n2 * t + p2))
123 int steps =
static_cast<int>(cycles * 120);
124 double dt = (cycles * 2.0 * std::numbers::pi) / steps;
125 double kappa = dt / 3.0;
127 auto [sx, sy] = getPos(0);
128 std::string path = std::format(
"M {:.2f} {:.2f}", sx, sy);
130 for (
int i = 0; i < steps; ++i) {
131 double t0 = i * dt, t1 = (i + 1) * dt;
132 auto [p0x, p0y] = getPos(t0);
auto [v0x, v0y] = getVelocity(t0);
133 auto [p1x, p1y] = getPos(t1);
auto [v1x, v1y] = getVelocity(t1);
135 path += std::format(
" C {:.2f} {:.2f}, {:.2f} {:.2f}, {:.2f} {:.2f}",
136 p0x + kappa * v0x, p0y + kappa * v0y,
137 p1x - kappa * v1x, p1y - kappa * v1y, p1x, p1y);