private void Rotate(double xangle, double yangle, double zangle) // поворот { Matrix mx = Transformations.RotateX(xangle); Matrix my = Transformations.RotateY(yangle); Matrix mz = Transformations.RotateZ(zangle); Matrix transform = mx.Multiple(my).Multiple(mz); foreach (Vector p in shape_points) { p.updateFromVector(transform.Multiple(p.getVector())); //p.updateFromVector(mx.Multiple(p.getVector())); //p.updateFromVector(my.Multiple(p.getVector())); //p.updateFromVector(mz.Multiple(p.getVector())); } }
private void CreateRotationFigure(object sender, EventArgs e) { shape.Clear(); int count = (int)countRotation.Value; double angle = (360 / count * Math.PI) / 180; Matrix m = Transformations.RotateY(angle); for (int c = 0; c < count; c++) { List <Vector> nextPoints = new List <Vector>(); for (int i = 0; i < points.Count; i++) { Vector p = new Vector(); 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 - 1]); Face f1 = new Face(); f1.add(points[i]); f1.add(nextPoints[i]); f1.add(nextPoints[i - 1]); f.color = Color.Blue; shape.Add(f); shape.Add(f1); } points = nextPoints; } points.Clear(); BuildPoints(); RedrawImage(); }