private void button10_Click(object sender, EventArgs e) { penType = "3d"; textBox1.Text = "U、I实现绕X轴旋转;H、J实现绕Y周旋转;K、L实现绕Z轴旋转;再次单击‘自由变换’停止转动"; double a = 80;//边长为2a p1[0] = new point3(-a, -a, -a); p1[1] = new point3(a, -a, -a); p1[2] = new point3(a, a, -a); p1[3] = new point3(-a, a, -a); p1[4] = new point3(-a, -a, a); p1[5] = new point3(a, -a, a); p1[6] = new point3(a, a, a); p1[7] = new point3(-a, a, a); f1[0] = new face(4); f1[0].setedge(0, 0); f1[0].setedge(1, 3); f1[0].setedge(2, 2); f1[0].setedge(3, 1);//后面 f1[1] = new face(4); f1[1].setedge(0, 4); f1[1].setedge(1, 5); f1[1].setedge(2, 6); f1[1].setedge(3, 7);//前面 f1[2] = new face(4); f1[2].setedge(0, 0); f1[2].setedge(1, 4); f1[2].setedge(2, 7); f1[2].setedge(3, 3); //左面 f1[3] = new face(4); f1[3].setedge(0, 1); f1[3].setedge(1, 2); f1[3].setedge(2, 6); f1[3].setedge(3, 5); //右面 f1[4] = new face(4); f1[4].setedge(0, 3); f1[4].setedge(1, 7); f1[4].setedge(2, 6); f1[4].setedge(3, 2);//顶面 f1[5] = new face(4); f1[5].setedge(0, 0); f1[5].setedge(1, 1); f1[5].setedge(2, 5); f1[5].setedge(3, 4); ;//底面 for (int i = 0; i < p1.Length; i++) { p2[i] = new point3(p1[i].x, p1[i].y, p1[i].z); } //pictureBox1.Refresh(); Graphics g = pictureBox1.CreateGraphics(); drawc(g); }
public void multiM() { point3[] pt2 = new point3[m_num]; for (int i = 0; i < m_num; i++) { pt2[i] = new point3(pt[i].x, pt[i].y, pt[i].z); } for (int j = 0; j < m_num; j++) { pt[j].x = pt2[j].x * transM[0, 0] + pt2[j].y * transM[0, 1] + pt2[j].z * transM[0, 2] + pt2[j].w * transM[0, 3]; pt[j].y = pt2[j].x * transM[1, 0] + pt2[j].y * transM[1, 1] + pt2[j].z * transM[1, 2] + pt2[j].w * transM[1, 3]; pt[j].z = pt2[j].x * transM[2, 0] + pt2[j].y * transM[2, 1] + pt2[j].z * transM[2, 2] + pt2[j].w * transM[2, 3]; pt[j].w = pt2[j].x * transM[3, 0] + pt2[j].y * transM[3, 1] + pt2[j].z * transM[3, 2] + pt2[j].w * transM[3, 3]; } }
public void rotateMZ(double angle, point3 p) { tranM(-p.x, -p.y, -p.z); rotateMZ(angle); tranM(p.x, p.y, p.z); }
public void scaleM(double sx, double sy, double sz, point3 p) { tranM(-p.x, -p.y, -p.z); scaleM(sx, sy, sz); tranM(p.x, p.y, p.z); }
//图形变换 private void Form1_KeyDown(object sender, KeyEventArgs e) { //try //{ if (penType == "2d") { switch (e.KeyCode) { case Keys.S: List<Point> p = new List<Point>(); for (int i = 0; i < tranglePoints.Count; i++) { p.Add(new Point(tranglePoints[i].X, tranglePoints[i].Y + 5)); } tranglePoints = p; button11_Click(sender, e); break; case Keys.D: List<Point> pLeft = new List<Point>(); for (int i = 0; i < tranglePoints.Count; i++) { pLeft.Add(new Point(tranglePoints[i].X + 5, tranglePoints[i].Y)); } tranglePoints = pLeft; button11_Click(sender, e); break; case Keys.W: List<Point> pUp = new List<Point>(); for (int i = 0; i < tranglePoints.Count; i++) { pUp.Add(new Point(tranglePoints[i].X, tranglePoints[i].Y - 5)); } tranglePoints = pUp; button11_Click(sender, e); break; case Keys.A: List<Point> pRight = new List<Point>(); for (int i = 0; i < tranglePoints.Count; i++) { pRight.Add(new Point(tranglePoints[i].X - 5, tranglePoints[i].Y)); } tranglePoints = pRight; button11_Click(sender, e); break; case Keys.Z: List<Point> pClockwise = new List<Point>(); for (int i = 0; i < tranglePoints.Count; i++) { pClockwise.Add(new Point((int)(tranglePoints[i].X * Math.Cos(Math.PI / 36) - tranglePoints[i].Y * Math.Sin(Math.PI / 36)), (int)(tranglePoints[i].X * Math.Sin(Math.PI / 36) + tranglePoints[i].Y * Math.Cos(Math.PI / 36)))); } tranglePoints = pClockwise; button11_Click(sender, e); break; case Keys.X: List<Point> pCounterclockwise = new List<Point>(); for (int i = 0; i < tranglePoints.Count; i++) { pCounterclockwise.Add(new Point((int)(tranglePoints[i].X * Math.Cos(-Math.PI / 36) - tranglePoints[i].Y * Math.Sin(-Math.PI / 36)), (int)(tranglePoints[i].X * Math.Sin(-Math.PI / 36) + tranglePoints[i].Y * Math.Cos(-Math.PI / 36)))); } tranglePoints = pCounterclockwise; button11_Click(sender, e); break; case Keys.V: List<Point> pZoomin = new List<Point>(); for (int i = 0; i < tranglePoints.Count; i++) { pZoomin.Add(new Point((int)(tranglePoints[i].X * 1.1), (int)(tranglePoints[i].Y * 1.1))); } tranglePoints = pZoomin; button11_Click(sender, e); break; case Keys.B: List<Point> pZoomout = new List<Point>(); for (int i = 0; i < tranglePoints.Count; i++) { pZoomout.Add(new Point((int)(tranglePoints[i].X * 0.9), (int)(tranglePoints[i].Y * 0.9))); } tranglePoints = pZoomout; button11_Click(sender, e); break; default: break; } Console.WriteLine(); } if(penType=="3d") { tr = new trans3(p2, p2.Length); switch (e.KeyCode) { case Keys.U: alf = -10; tr.rotateMX(alf); break; case Keys.I: alf = 10; tr.rotateMX(alf); break; case Keys.H: belta = -10; tr.rotateMY(belta); break; case Keys.J: belta = 10; tr.rotateMY(belta); break; case Keys.K: belta = -10; tr.rotateMZ(belta); break; case Keys.L: belta = 10; tr.rotateMZ(belta); break; case Keys.R: for (int i = 0; i < p1.Length; i++) { p2[i] = new point3(p1[i].x, p1[i].y, p1[i].z); } break; default: break; } pictureBox1.Refresh(); Graphics g = pictureBox1.CreateGraphics(); drawc(g); } // } //catch (Exception ec) //{ // MessageBox.Show(ec.Message, "超出画图边界!"); //} }