private Polygon3D generateSection(Color color, double initialAngle, double angle) { List<Point3D> upperVertices = new List<Point3D>(); List<Point3D> lowerVertices = new List<Point3D>(); int upperRadius = 200; int lowerRadius = 150; Point3D initialUpperPoint = new Point3D(0, upperRadius, 0); Point3D initialLowerPoint = new Point3D(0, lowerRadius, 0); initialUpperPoint.Rotate(Axes.Z, initialAngle); initialLowerPoint.Rotate(Axes.Z, initialAngle); int steps = (int)radToDeg(angle); for (int i = 0; i <= steps; i++) { Point3D upperPoint = initialUpperPoint.Clone(); Point3D lowerPoint = initialLowerPoint.Clone(); double rotationAngle = angle / steps * i; upperPoint.Rotate(Axes.Z, rotationAngle); lowerPoint.Rotate(Axes.Z, rotationAngle); upperVertices.Add(upperPoint); lowerVertices.Add(lowerPoint); } lowerVertices.Reverse(); upperVertices.AddRange(lowerVertices); return new Polygon3D(upperVertices, color); }
private static Point getPointOnScreen(Point3D point3D, int width, int height) { Point pointOnScreen = new Point(width / 2, height / 2); pointOnScreen.X += (int)point3D.X; pointOnScreen.Y -= (int)point3D.Y; return pointOnScreen; }