Advertisement
lucianb

SphereGeometry3D

Jan 7th, 2023
1,002
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.62 KB | None | 0 0
  1. using System;
  2. using System.Windows.Media;
  3. using System.Windows.Media.Media3D;
  4. using System.Diagnostics;
  5.  
  6. namespace Sphere3D
  7. {
  8.     class SphereGeometry3D : RoundMesh3D
  9.     {
  10.         protected override void CalculateGeometry()
  11.         {
  12.             int e;
  13.             double segmentRad = Math.PI / 2 / (n + 1);
  14.             int numberOfSeparators = 4 * n + 4;
  15.  
  16.             points = new Point3DCollection();
  17.             triangleIndices = new Int32Collection();
  18.  
  19.             for (e = -n; e <= n; e++)
  20.             {
  21.                 double r_e = r * Math.Cos(segmentRad * e);
  22.                 double y_e = r * Math.Sin(segmentRad * e);
  23.  
  24.                 for (int s = 0; s <= (numberOfSeparators - 1); s++)
  25.                 {
  26.                     double z_s = r_e * Math.Sin(segmentRad * s) * (-1);
  27.                     double x_s = r_e * Math.Cos(segmentRad * s);
  28.                     points.Add(new Point3D(x_s, y_e, z_s));
  29.                 }
  30.             }
  31.             points.Add(new Point3D(0, r, 0));
  32.             points.Add(new Point3D(0, -1 * r, 0));
  33.  
  34.             for (e = 0; e < 2 * n; e++)
  35.             {
  36.                 for (int i = 0; i < numberOfSeparators; i++)
  37.                 {
  38.                     triangleIndices.Add(e * numberOfSeparators + i);
  39.                     triangleIndices.Add(e * numberOfSeparators + i +
  40.                                         numberOfSeparators);
  41.                     triangleIndices.Add(e * numberOfSeparators + (i + 1) %
  42.                                         numberOfSeparators + numberOfSeparators);
  43.  
  44.                     triangleIndices.Add(e * numberOfSeparators + (i + 1) %
  45.                                         numberOfSeparators + numberOfSeparators);
  46.                     triangleIndices.Add(e * numberOfSeparators +
  47.                                        (i + 1) % numberOfSeparators);
  48.                     triangleIndices.Add(e * numberOfSeparators + i);
  49.                 }
  50.             }
  51.  
  52.             for (int i = 0; i < numberOfSeparators; i++)
  53.             {
  54.                 triangleIndices.Add(e * numberOfSeparators + i);
  55.                 triangleIndices.Add(e * numberOfSeparators + (i + 1) %
  56.                                     numberOfSeparators);
  57.                 triangleIndices.Add(numberOfSeparators * (2 * n + 1));
  58.             }
  59.  
  60.             for (int i = 0; i < numberOfSeparators; i++)
  61.             {
  62.                 triangleIndices.Add(i);
  63.                 triangleIndices.Add((i + 1) % numberOfSeparators);
  64.                 triangleIndices.Add(numberOfSeparators * (2 * n + 1) + 1);
  65.             }
  66.         }
  67.  
  68.         public SphereGeometry3D()
  69.         { }
  70.     }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement