Chris_M_Thomasson

multijulia for Paul

Feb 16th, 2022
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  1. namespace ct_multi_julia_experimental
  2. {
  3. typedef std::complex<float> ct_complex;
  4.  
  5. void manifest(
  6. ct::plot::cairo::plot_2d& plot
  7. ) {
  8. std::cout << "\ct_multi_julia_experimental::manifest()\n";
  9. std::cout << "__________________________________________\n\n";
  10.  
  11. {
  12. unsigned long n = 20000000;
  13.  
  14. std::array<ct_complex, 3> julia_sets;
  15.  
  16. float radius = 3.f;
  17.  
  18. {
  19.  
  20. float angle_base = CT_PI2 / julia_sets.size();
  21. float radius_base = radius / julia_sets.size();
  22.  
  23. for (unsigned long i = 0; i < julia_sets.size(); ++i)
  24. {
  25. float angle = angle_base * i;
  26. float radius = radius_base * i;
  27.  
  28. ct_complex p0_normal = {
  29. std::cos(angle + std::sin(angle * 1.f)),
  30. std::sin(angle)
  31. };
  32.  
  33. p0_normal *= radius;
  34.  
  35. std::cout << "[" << i << "] = " << p0_normal << "\n";
  36.  
  37. julia_sets[i] = p0_normal;
  38. }
  39. }
  40.  
  41. ct_complex z = { 4, 4 };
  42.  
  43. for (unsigned long i = 0; i < n; ++i)
  44. {
  45. // gain random's
  46. std::size_t rand_julia_set = std::rand() % julia_sets.size();
  47. float rand_root = std::rand() / (RAND_MAX - 0.f);
  48.  
  49. // choose julia set
  50. ct_complex& julia = julia_sets[rand_julia_set];
  51.  
  52. // root logic
  53. ct_complex dif = z - julia;
  54.  
  55. ct_complex root = { 0, 0 };
  56.  
  57. // select roots
  58. if (rand_root < 0.5f)
  59. {
  60. root = std::sqrt(dif);
  61. }
  62.  
  63. else
  64. {
  65. root = -std::sqrt(dif);
  66. }
  67.  
  68.  
  69. // plot
  70. {
  71. glm::vec2 point = { z.real(), z.imag() };
  72. //plot.set_pixelf(point, CT_RGBF(1, 0, 0));
  73.  
  74.  
  75. ct::plot::cairo::pixel* pixel = plot.get_pixelf(point);
  76.  
  77. if (pixel)
  78. {
  79. if (pixel->r < 255 - 16)
  80. {
  81. pixel->r += 16;
  82. }
  83.  
  84. pixel->g += 1;
  85. pixel->b += 5;
  86. }
  87.  
  88. }
  89.  
  90.  
  91. // update loop
  92. z = root;
  93.  
  94.  
  95. //std::cout << "[" << i << "] = " << julia << "\n";
  96. //std::cout << "[" << i << "] = " << root << "\n";
  97. }
  98. }
  99. }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment