private void build_tetrahedron() { double h = Math.Sqrt(3) / 2 * 100; my_point p1 = new my_point(-50, -h / 2, 0); my_point p2 = new my_point(0, -h / 2, -h); my_point p3 = new my_point(50, -h / 2, 0); my_point p4 = new my_point(0, h / 2, 0); face f1 = new face(); f1.add(p1); f1.add(p2); f1.add(p3); shape.Add(f1); face f2 = new face(); f2.add(p1); f2.add(p4); f2.add(p2); shape.Add(f2); face f3 = new face(); f3.add(p4); f3.add(p2); f3.add(p3); shape.Add(f3); face f4 = new face(); f4.add(p1); f4.add(p4); f4.add(p3); shape.Add(f4); }
private void draw_face(face f) // рисуем грань { int n = f.points.Count - 1; int x1 = (int)Math.Round(f.points[0].X + centerX); int x2 = (int)Math.Round(f.points[n].X + centerX); int y1 = (int)Math.Round(-f.points[0].Y + centerY); int y2 = (int)Math.Round(-f.points[n].Y + centerY); g.DrawLine(pen_shape, x1, y1, x2, y2); for (int i = 0; i < n; i++) { x1 = (int)Math.Round(f.points[i].X + centerX); x2 = (int)Math.Round(f.points[i + 1].X + centerX); y1 = (int)Math.Round(-f.points[i].Y + centerY); y2 = (int)Math.Round(-f.points[i + 1].Y + centerY); g.DrawLine(pen_shape, x1, y1, x2, y2); } }
private void build_hexahedron() { my_point p1 = new my_point(-50, -50, -50); my_point p2 = new my_point(-50, 50, -50); my_point p3 = new my_point(50, 50, -50); my_point p4 = new my_point(50, -50, -50); my_point p5 = new my_point(-50, -50, 50); my_point p6 = new my_point(-50, 50, 50); my_point p7 = new my_point(50, 50, 50); my_point p8 = new my_point(50, -50, 50); face f1 = new face(); f1.add(p1); f1.add(p2); f1.add(p3); f1.add(p4); shape.Add(f1); face f2 = new face(); f2.add(p1); f2.add(p2); f2.add(p6); f2.add(p5); shape.Add(f2); face f3 = new face(); f3.add(p5); f3.add(p6); f3.add(p7); f3.add(p8); shape.Add(f3); face f4 = new face(); f4.add(p4); f4.add(p3); f4.add(p7); f4.add(p8); shape.Add(f4); face f5 = new face(); f5.add(p2); f5.add(p6); f5.add(p7); f5.add(p3); shape.Add(f5); face f6 = new face(); f6.add(p1); f6.add(p5); f6.add(p8); f6.add(p4); shape.Add(f6); }
private void build_dodecahedron() { double r = 100 * (3 + Math.Sqrt(5)) / 4; // радиус полувписанной окружности double x = 100 * (1 + Math.Sqrt(5)) / 4; // половина стороны пятиугольника в сечении my_point p1 = new my_point(0, -50, -r); my_point p2 = new my_point(0, 50, -r); my_point p3 = new my_point(x, x, -x); my_point p4 = new my_point(r, 0, -50); my_point p5 = new my_point(x, -x, -x); my_point p6 = new my_point(50, -r, 0); my_point p7 = new my_point(-50, -r, 0); my_point p8 = new my_point(-x, -x, -x); my_point p9 = new my_point(-r, 0, -50); my_point p10 = new my_point(-x, x, -x); my_point p11 = new my_point(-50, r, 0); my_point p12 = new my_point(50, r, 0); my_point p13 = new my_point(-x, -x, x); my_point p14 = new my_point(0, -50, r); my_point p15 = new my_point(x, -x, x); my_point p16 = new my_point(0, 50, r); my_point p17 = new my_point(-x, x, x); my_point p18 = new my_point(x, x, x); my_point p19 = new my_point(-r, 0, 50); my_point p20 = new my_point(r, 0, 50); face f1 = new face(); f1.add(p1); f1.add(p2); f1.add(p3); f1.add(p4); f1.add(p5); shape.Add(f1); face f2 = new face(); f2.add(p1); f2.add(p5); f2.add(p6); f2.add(p7); f2.add(p8); shape.Add(f2); face f3 = new face(); f3.add(p1); f3.add(p2); f3.add(p10); f3.add(p9); f3.add(p8); shape.Add(f3); face f4 = new face(); f4.add(p2); f4.add(p10); f4.add(p11); f4.add(p12); f4.add(p3); shape.Add(f4); face f5 = new face(); f5.add(p4); f5.add(p5); f5.add(p6); f5.add(p15); f5.add(p20); shape.Add(f5); face f6 = new face(); f6.add(p4); f6.add(p3); f6.add(p12); f6.add(p18); f6.add(p20); shape.Add(f6); face f7 = new face(); f7.add(p9); f7.add(p8); f7.add(p7); f7.add(p13); f7.add(p19); shape.Add(f7); face f8 = new face(); f8.add(p9); f8.add(p10); f8.add(p11); f8.add(p17); f8.add(p19); shape.Add(f8); face f9 = new face(); f9.add(p11); f9.add(p12); f9.add(p18); f9.add(p16); f9.add(p17); shape.Add(f9); face f10 = new face(); f10.add(p7); f10.add(p6); f10.add(p15); f10.add(p14); f10.add(p13); shape.Add(f10); face f11 = new face(); f11.add(p19); f11.add(p17); f11.add(p16); f11.add(p14); f11.add(p13); shape.Add(f11); face f12 = new face(); f12.add(p16); f12.add(p14); f12.add(p15); f12.add(p20); f12.add(p18); shape.Add(f12); }
private void build_octahedron() { double a = Math.Sqrt(3) / 2 * 100; double p = (a + a + 100) / 2; double h = 2 * Math.Sqrt(p * (p - 100) * (p - a) * (p - a)) / 100; my_point p1 = new my_point(0, -h, 0); my_point p2 = new my_point(-50, 0, -50); my_point p3 = new my_point(0, h, 0); my_point p4 = new my_point(50, 0, -50); my_point p5 = new my_point(-50, 0, 50); my_point p6 = new my_point(50, 0, 50); face f1 = new face(); f1.add(p2); f1.add(p3); f1.add(p4); shape.Add(f1); face f2 = new face(); f2.add(p2); f2.add(p1); f2.add(p4); shape.Add(f2); face f3 = new face(); f3.add(p2); f3.add(p3); f3.add(p5); shape.Add(f3); face f4 = new face(); f4.add(p2); f4.add(p1); f4.add(p5); shape.Add(f4); face f5 = new face(); f5.add(p4); f5.add(p3); f5.add(p6); shape.Add(f5); face f6 = new face(); f6.add(p4); f6.add(p1); f6.add(p6); shape.Add(f6); face f7 = new face(); f7.add(p5); f7.add(p3); f7.add(p6); shape.Add(f7); face f8 = new face(); f8.add(p5); f8.add(p1); f8.add(p6); shape.Add(f8); }
private void build_icosahedron() // икосаэдр { double r = 100 * (1 + Math.Sqrt(5)) / 4; // радиус полувписанной окружности my_point p1 = new my_point(0, -50, -r); my_point p2 = new my_point(0, 50, -r); my_point p3 = new my_point(50, r, 0); my_point p4 = new my_point(r, 0, -50); my_point p5 = new my_point(50, -r, 0); my_point p6 = new my_point(-50, -r, 0); my_point p7 = new my_point(-r, 0, -50); my_point p8 = new my_point(-50, r, 0); my_point p9 = new my_point(r, 0, 50); my_point p10 = new my_point(-r, 0, 50); my_point p11 = new my_point(0, -50, r); my_point p12 = new my_point(0, 50, r); face f1 = new face(); f1.add(p1); f1.add(p2); f1.add(p4); shape.Add(f1); face f2 = new face(); f2.add(p1); f2.add(p2); f2.add(p7); shape.Add(f2); face f3 = new face(); f3.add(p7); f3.add(p2); f3.add(p8); shape.Add(f3); face f4 = new face(); f4.add(p8); f4.add(p2); f4.add(p3); shape.Add(f4); face f5 = new face(); f5.add(p4); f5.add(p2); f5.add(p3); shape.Add(f5); face f6 = new face(); f6.add(p6); f6.add(p1); f6.add(p5); shape.Add(f6); face f7 = new face(); f7.add(p6); f7.add(p7); f7.add(p10); shape.Add(f7); face f8 = new face(); f8.add(p10); f8.add(p7); f8.add(p8); shape.Add(f8); face f9 = new face(); f9.add(p10); f9.add(p8); f9.add(p12); shape.Add(f9); face f10 = new face(); f10.add(p12); f10.add(p8); f10.add(p3); shape.Add(f10); face f11 = new face(); f11.add(p9); f11.add(p4); f11.add(p3); shape.Add(f11); face f12 = new face(); f12.add(p5); f12.add(p4); f12.add(p9); shape.Add(f12); face f13 = new face(); f13.add(p12); f13.add(p3); f13.add(p9); shape.Add(f13); face f14 = new face(); f14.add(p5); f14.add(p1); f14.add(p4); shape.Add(f14); face f15 = new face(); f15.add(p7); f15.add(p1); f15.add(p6); shape.Add(f15); face f16 = new face(); f16.add(p11); f16.add(p5); f16.add(p6); shape.Add(f16); face f17 = new face(); f17.add(p11); f17.add(p6); f17.add(p10); shape.Add(f17); face f18 = new face(); f18.add(p11); f18.add(p10); f18.add(p12); shape.Add(f18); face f19 = new face(); f19.add(p11); f19.add(p12); f19.add(p9); shape.Add(f19); face f20 = new face(); f20.add(p11); f20.add(p5); f20.add(p9); shape.Add(f20); }