Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void line(
- ct::plot::cairo::plot_2d& plot,
- ct::vector_spice::field_vector& field,
- glm::vec2 p0,
- glm::vec2 p1,
- ct::plot::cairo::pixel color,
- unsigned long n
- ) {
- glm::vec2 dif = p1 - p0;
- float normal_base = 1.f / (n - 1);
- //plot.line(p0, p1, color);
- for (unsigned long i = 0; i < n; ++i)
- {
- float normal = normal_base * i;
- glm::vec2 pn0 = p0 + dif * normal;
- //plot.circle_filled(pn0, .05, color);
- field.push_back({ { pn0, 0 }, -1 });
- }
- }
- void koch(
- ct::plot::cairo::plot_2d& plot,
- ct::vector_spice::field_vector& field,
- unsigned long ri,
- unsigned long rn,
- glm::vec2 p0,
- glm::vec2 p1,
- unsigned long n
- ) {
- if (ri >= rn) return;
- glm::vec2 dif = p1 - p0;
- glm::vec2 dif_perp = { -dif.y, dif.x };
- glm::vec2 dif_mid = p0 + dif * 1.f / 2.f;
- float scale = 1.f / 3.f;
- glm::vec2 k0 = p0;
- glm::vec2 k1 = k0 + dif * scale;
- glm::vec2 k2 = dif_mid + dif_perp * scale;
- glm::vec2 k3 = p1 - dif * scale;
- glm::vec2 k4 = p1;
- /*
- plot.line(k0, k1, CT_RGBF(1, 0, 0));
- plot.line(k1, k2, CT_RGBF(0, 1, 0));
- plot.line(k2, k3, CT_RGBF(0, 0, 1));
- plot.line(k3, k4, CT_RGBF(0, 1, 1));
- */
- unsigned long line_n = 5;
- line(plot, field, k0, k1, CT_RGBF(1, 0, 0), line_n);
- line(plot, field, k1, k2, CT_RGBF(0, 1, 0), line_n);
- line(plot, field, k2, k3, CT_RGBF(0, 0, 1), line_n);
- line(plot, field, k3, k4, CT_RGBF(0, 1, 1), line_n);
- koch(plot, field, ri + 1, rn, k0, k1, n);
- koch(plot, field, ri + 1, rn, k1, k2, n);
- koch(plot, field, ri + 1, rn, k2, k3, n);
- koch(plot, field, ri + 1, rn, k3, k4, n);
- }
Advertisement
Add Comment
Please, Sign In to add comment