Advertisement
Ultimga

Untitled

Dec 10th, 2019
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.54 KB | None | 0 0
  1.         public Coord3D[] Sphere(int _radius, int _cutouts = 0)
  2.         {
  3.             List<Coord3D> coordinates = new List<Coord3D>();
  4.  
  5.             int radiusSquared = _radius * _radius;
  6.  
  7.             Coord3D[] cutoutOrigins = new Coord3D[_cutouts];
  8.             int[] cutoutRadiuses = new int[_cutouts];
  9.             for (int i = 0; i < _cutouts; i++)
  10.             {
  11.                 int xPos = getRandom().Next((int)(_radius * 2)) - _radius;
  12.                 int yPos = getRandom().Next((int)(_radius * 2)) - _radius;
  13.                 int zPos = getRandom().Next((int)(_radius * 2)) - _radius;
  14.                 Coord3D cutoutOrigin = new Coord3D( xPos, yPos, zPos );
  15.                 int cutoutRadius = getRandom().Next(4, (int)(_radius * 0.6f));
  16.                 cutoutRadius *= cutoutRadius;
  17.  
  18.                 cutoutOrigins[i] = cutoutOrigin;
  19.                 cutoutRadiuses[i] = cutoutRadius;
  20.             }
  21.  
  22.             Coord3D[] addOrigins = new Coord3D[_cutouts];
  23.             int[] addRadiuses = new int[_cutouts];
  24.             for (int i = 0; i < _cutouts; i++)
  25.             {
  26.                 int xPos = getRandom().Next((int)(_radius * 2)) - _radius;
  27.                 int yPos = getRandom().Next((int)(_radius * 2)) - _radius;
  28.                 int zPos = getRandom().Next((int)(_radius * 2)) - _radius;
  29.                 Coord3D cutoutOrigin = new Coord3D( xPos, yPos, zPos );
  30.                 int cutoutRadius = getRandom().Next(4, (int)(_radius * 0.6f));
  31.                 cutoutRadius *= cutoutRadius;
  32.  
  33.                 addOrigins[i] = cutoutOrigin;
  34.                 addRadiuses[i] = cutoutRadius;
  35.             }
  36.  
  37.             float xScale = ((float)getRandom().Next(30, 100)) / 100;
  38.             float yScale = ((float)getRandom().Next(30, 100)) / 100;
  39.             float zScale = ((float)getRandom().Next(30, 100)) / 100;
  40.  
  41.             //  Distance filled sphere
  42.             for (int x = -_radius; x < _radius; x++)
  43.             {
  44.                 for (int y = -_radius; y < _radius; y++)
  45.                 {
  46.                     for (int z = -_radius; z < _radius; z++)
  47.                     {
  48.                         Coord3D coord = new Coord3D(x * xScale, y * yScale, z * zScale);
  49.                         float distance = getDistance(x, y, z);
  50.                         if (distance < radiusSquared)
  51.                         {
  52.                             bool isCut = false;
  53.  
  54.                             for (int i = 0; i < _cutouts; i++)
  55.                             {
  56.                                 float cutoutDistance = getDistance(x - cutoutOrigins[i].x, y - cutoutOrigins[i].y, z - cutoutOrigins[i].z);
  57.                                 if (cutoutDistance < cutoutRadiuses[i])
  58.                                 {
  59.                                     isCut = true;
  60.                                     break;
  61.                                 }
  62.                             }
  63.  
  64.                             if (isCut == false)
  65.                             {
  66.                                 for (int i = 0; i < _cutouts; i++)
  67.                                 {
  68.                                     float cutoutDistance = getDistance(x - addOrigins[i].x, y - addOrigins[i].y, z - addOrigins[i].z);
  69.                                     if (cutoutDistance < addRadiuses[i])
  70.                                     {
  71.                                         coordinates.Add(coord);
  72.                                         break;
  73.                                     }
  74.                                 }
  75.                             }
  76.                         }
  77.                     }
  78.                 }
  79.             }
  80.  
  81.             return coordinates.ToArray();
  82.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement