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 axis_choice_button_Click(object sender, EventArgs e) // выбираем точки для поворота вокруг оси { if (axis_P1 != null) { axis_P1 = axis_P2 = null; redraw_image(); } is_axis = true; }
//Указать образующие private void pictureBox_MouseClick(object sender, MouseEventArgs e) { if (SetPoints.Checked) { my_point p = new my_point(e.X - centerX, centerY - e.Y, 0); points.Add(p); } 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 scaling(double xScale, double yScale, double zScale) // масштабирование { my_point center_P = center_point(); Matrix scale = scaleMatrix(xScale, yScale, zScale); Matrix displ1 = displMatrix(-center_P.X, -center_P.Y, -center_P.Z); Matrix displ2 = displMatrix(center_P.X, center_P.Y, center_P.Z); foreach (face f in shape) { foreach (my_point p in f.points) { p.updateFromVector(displ1.Multiple(p.getVector())); p.updateFromVector(scale.Multiple(p.getVector())); p.updateFromVector(displ2.Multiple(p.getVector())); } } }
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 pictureBox_MouseClick(object sender, MouseEventArgs e) { if (!is_axis || e.Button != System.Windows.Forms.MouseButtons.Left) { return; } if (axis_P1 == null) { axis_P1 = new my_point((e.X - centerX), (-e.Y + centerY), 0); draw_point(axis_P1); } else { axis_P2 = new my_point((e.X - centerX), (-e.Y + centerY), 0); draw_point(axis_P2); g.DrawLine(pen_axis, (int)Math.Round(axis_P1.X + centerX), (int)Math.Round(-axis_P1.Y + centerY), (int)Math.Round(axis_P2.X + centerX), (int)Math.Round(-axis_P2.Y + centerY)); is_axis = false; } pictureBox.Image = bmp; }
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); }
public void add(my_point p) { points.Add(p); }
private void draw_point(my_point p) // рисуем точку { g.FillEllipse(new SolidBrush(Color.Red), (int)Math.Round(p.X + centerX - 3), (int)Math.Round(-p.Y + centerY - 3), 6, 6); }
private void axis_del_button_Click(object sender, EventArgs e) // удаляем ось { axis_P1 = axis_P2 = null; redraw_image(); }
private void axis_rotate(my_point pt1, my_point pt2, double angle) // поворот вокруг оси { }
private void scaling(double xScale, double yScale, double zScale) // масштабирование { my_point center_P = center_point(); }