Advertisement
Chris_M_Thomasson

My attempt at Roger Bagulas L-system

Jan 30th, 2017
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.35 KB | None | 0 0
  1. /*
  2. read all for further reference:
  3.  
  4. https://plus.google.com/101799841244447089430/posts/QboKwsJRJYb
  5. */
  6.  
  7. void rb_dual_spiral(
  8.     ct::plot2d& plot, // our visual plotter
  9.     unsigned int irecur,
  10.     unsigned int irecur_max,
  11.     ct_complex p0,
  12.     ct_complex p1
  13. ) {
  14.     //F+F+FF+FF+FFFFF+FF+FF+F+F
  15.  
  16.     if (irecur >= irecur_max) return;
  17.  
  18.     ct_complex dif = p1 - p0;
  19.     ct_float unit = (std::abs(dif) / 5) / std::abs(dif);
  20.  
  21.  
  22.     dif = p1 - p0;
  23.     ct_complex ml0 = {
  24.         p0.real() + dif.real() * unit * 1,
  25.         p0.imag() + dif.imag() * unit * 1
  26.     };
  27.  
  28.     ct_complex ml1 = {
  29.         p0.real() + dif.real() * unit * 2,
  30.         p0.imag() + dif.imag() * unit * 2
  31.     };
  32.  
  33.     ct_complex ml2 = {
  34.         p0.real() + dif.real() * unit * 3,
  35.         p0.imag() + dif.imag() * unit * 3
  36.     };
  37.  
  38.     ct_complex ml3 = {
  39.         p0.real() + dif.real() * unit * 4,
  40.         p0.imag() + dif.imag() * unit * 4
  41.     };
  42.  
  43.  
  44.     dif = p1 - p0;
  45.     ct_complex lp0 = {
  46.         p0.real() + -dif.imag() * unit * 2,
  47.         p0.imag() + dif.real() * unit * 2
  48.     };
  49.  
  50.  
  51.     dif = lp0 - p0;
  52.     ct_complex lp1 = {
  53.         lp0.real() + dif.imag() * 1,
  54.         lp0.imag() + -dif.real() * 1
  55.     };
  56.  
  57.  
  58.     dif = lp1 - lp0;
  59.     ct_complex lp2 = {
  60.         lp1.real() + dif.imag() * .5,
  61.         lp1.imag() + -dif.real() * .5
  62.     };
  63.  
  64.  
  65.     dif = lp2 - lp1;
  66.     ct_complex lp3 = {
  67.         lp2.real() + dif.imag() * 1,
  68.         lp2.imag() + -dif.real() * 1
  69.     };
  70.  
  71.  
  72.     ////
  73.     dif = p1 - p0;
  74.     ct_complex rp0 = {
  75.         p1.real() + -dif.imag() * unit * 2,
  76.         p1.imag() + dif.real() * unit * 2
  77.     };
  78.  
  79.  
  80.     dif = rp0 - p1;
  81.     ct_complex rp1 = {
  82.         rp0.real() + -dif.imag() * 1,
  83.         rp0.imag() + dif.real() * 1
  84.     };
  85.  
  86.  
  87.     dif = rp1 - rp0;
  88.     ct_complex rp2 = {
  89.         rp1.real() + -dif.imag() * .5,
  90.         rp1.imag() + dif.real() * .5
  91.     };
  92.  
  93.  
  94.     dif = rp2 - rp1;
  95.     ct_complex rp3 = {
  96.         rp2.real() + -dif.imag() * 1,
  97.         rp2.imag() + dif.real() * 1
  98.     };
  99.  
  100.     plot.line(p0, ml0, CT_RGBF(0, 0, 0));
  101.     plot.line(ml0, ml1, CT_RGBF(0, 0, 0));
  102.     plot.line(ml1, ml2, CT_RGBF(0, 0, 0));
  103.     plot.line(ml2, ml3, CT_RGBF(0, 0, 0));
  104.     plot.line(ml3, p1, CT_RGBF(0, 0, 0));
  105.    
  106.     plot.line(p0, lp0, CT_RGBF(1, 0, 0));
  107.     plot.line(lp0, lp1, CT_RGBF(1, 0, 0));
  108.     plot.line(lp1, lp2, CT_RGBF(1, 0, 0));
  109.     plot.line(lp2, lp3, CT_RGBF(1, 0, 0));
  110.  
  111.     plot.line(p1, rp0, CT_RGBF(1, 0, 1));
  112.     plot.line(rp0, rp1, CT_RGBF(1, 0, 1));
  113.     plot.line(rp1, rp2, CT_RGBF(1, 0, 1));
  114.     plot.line(rp2, rp3, CT_RGBF(1, 0, 1));
  115.  
  116.     rb_dual_spiral(plot, irecur + 1, irecur_max, p0, ml0);
  117.     rb_dual_spiral(plot, irecur + 1, irecur_max, ml0, ml1);
  118.     rb_dual_spiral(plot, irecur + 1, irecur_max, ml1, ml2);
  119.     rb_dual_spiral(plot, irecur + 1, irecur_max, ml2, ml3);
  120.     rb_dual_spiral(plot, irecur + 1, irecur_max, ml3, p1);
  121.  
  122.     rb_dual_spiral(plot, irecur + 1, irecur_max, lp0, p0);
  123.     rb_dual_spiral(plot, irecur + 1, irecur_max, lp1, lp0);
  124.     rb_dual_spiral(plot, irecur + 1, irecur_max, lp2, lp1);
  125.     rb_dual_spiral(plot, irecur + 1, irecur_max, lp3, lp2);
  126.  
  127.     rb_dual_spiral(plot, irecur + 1, irecur_max, p1, rp0);
  128.     rb_dual_spiral(plot, irecur + 1, irecur_max, rp0, rp1);
  129.     rb_dual_spiral(plot, irecur + 1, irecur_max, rp1, rp2);
  130.     rb_dual_spiral(plot, irecur + 1, irecur_max, rp2, rp3);
  131.    
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement