Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.48 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <glib/gtypes.h> // srsly guys?
  4. #include <gts.h>
  5.  
  6. void mandelbulb(gdouble **a, GtsCartesianGrid g, guint i, gpointer data)
  7. {
  8. guint j, k, n;
  9. gdouble x, y, z = g.z;
  10. gdouble xi, yi, zi;
  11. gdouble r, theta, phi, power = 8;
  12. gdouble *row;
  13.  
  14. for(k = 0, y = g.y; k < g.ny; k++, y += g.dy)
  15. {
  16. row = a[k];
  17. for(j = 0, x = g.x; j < g.nx; j++, x += g.dx)
  18. {
  19. xi = 0;
  20. yi = 0;
  21. zi = 0;
  22. for(n = 0; n < 6; n++)
  23. {
  24. r = sqrt(xi * xi + yi * yi + zi * zi);
  25. theta = atan2(sqrt(xi * xi + yi * yi), zi);
  26. phi = atan2(yi, xi);
  27. xi = pow(r, power) * sin(theta * power) * cos(phi * power) + x;
  28. yi = pow(r, power) * sin(theta * power) * sin(phi * power) + y;
  29. zi = pow(r, power) * cos(theta * power) + z;
  30. }
  31. row[j] = sqrt(xi * xi + yi * yi + zi * zi);
  32. if(!isfinite(row[j]))
  33. row[j] = G_MAXDOUBLE;
  34. }
  35. }
  36. }
  37.  
  38. int main(int argc, char **argv)
  39. {
  40. GtsCartesianGrid grid;
  41. GtsSurface *s;
  42.  
  43. grid.nx = 1000;
  44. grid.ny = 1000;
  45. grid.nz = 1000;
  46. grid.x = -1.2;
  47. grid.y = -1.2;
  48. grid.z = -1.2;
  49. grid.dx = 2.4 / grid.nx;
  50. grid.dy = 2.4 / grid.ny;
  51. grid.dz = 2.4 / grid.nz;
  52. s = gts_surface_new(gts_surface_class(), gts_face_class(),
  53. gts_edge_class(), gts_vertex_class());
  54. gts_isosurface_tetra(s, grid, (GtsIsoCartesianFunc)mandelbulb, NULL, 1e308);
  55. fprintf(stderr, "Origional surface:\n");
  56. gts_surface_print_stats(s, stderr);
  57. gts_surface_write(s, stdout);
  58. return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement