private void button4_Click(object sender, EventArgs e) { shape.Clear(); int count = (int)countRotation.Value; double angle = (360 / count * Math.PI) / 180; Matrix m = rotationYMatrix(angle); for (int c = 0; c < count; c++) { List <my_point> nextPoints = new List <my_point>(); for (int i = 0; i < points.Count; i++) { my_point p = new my_point(); p.updateFromVector(m.Multiple(points[i].getVector())); nextPoints.Add(p); } for (int i = 1; i < points.Count; i++) { face f = new face(); f.add(points[i - 1]); f.add(points[i]); f.add(nextPoints[i]); f.add(nextPoints[i - 1]); shape.Add(f); } points = nextPoints; } points.Clear(); redraw_image(); }
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 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_cube() { double h = 50; my_point p1 = new my_point(0, 0, 0); my_point p2 = new my_point(h, 0, 0); my_point p3 = new my_point(h, 0, h); my_point p4 = new my_point(0, 0, h); my_point p5 = new my_point(0, h, 0); my_point p6 = new my_point(h, h, 0); my_point p7 = new my_point(h, h, h); my_point p8 = new my_point(0, h, h); 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(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(p6); f3.add(p5); shape.Add(f3); face f4 = new face(); f4.add(p2); f4.add(p6); f4.add(p7); f4.add(p3); shape.Add(f4); face f5 = new face(); f5.add(p7); f5.add(p3); f5.add(p4); f5.add(p8); shape.Add(f5); face f6 = new face(); f6.add(p4); f6.add(p8); f6.add(p5); f6.add(p1); shape.Add(f6); }
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 button1_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { shape.Clear(); var read = new System.IO.StreamReader(openFileDialog1.FileName); string text; int n = Int32.Parse(read.ReadLine()); shape = new List <face>(); for (int i = 0; i < n; i++) { text = read.ReadLine(); string[] coords = text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); face f = new face(); for (int j = 0; j < coords.Count(); j += 3) { f.add(new my_point(double.Parse(coords[j]), double.Parse(coords[j + 1]), double.Parse(coords[j + 2]))); } shape.Add(f); } read.Dispose(); redraw_image(); } }