先来个等边倒三角形练手:
点1 0,0
点2 100,0
点3 cos(60),sin(60)
var p4 = new Point(); p4.X = 0; p4.Y = 0; var p5 = new Point(); p5.X = width; p5.Y = 0; a = 60; // 角度 var p6 = new Point(); p6.X = (int)(0 + width * (Math.Cos(Math.PI *a/180d))); p6.Y = (int)(0 + width * (Math.Sin(Math.PI *a/180d))); points[0] = p4; points[1] = p5; points[2] = p6; points[3] = p4; Graphics g = e.Graphics; var p = new Pen(Color.Black); g.DrawLines(p, points);
利用刚才的成果,绘制一个等边六角形:
var points = new Point[7]; var width = 100; int a = 60; var p1 = new Point(); p1.X = 0; p1.Y = (int)(0 + width * (Math.Sin(Math.PI * a / 180d))); var p2 = new Point(); p2.X = (int)(0 + width * (Math.Cos(Math.PI * a / 180d))); p2.Y = 0; var p3 = new Point(); p3.X = p2.X + width; p3.Y = 0; var p4 = new Point(); p4.X = p2.X + p3.X; p4.Y = (int)(0 + width * (Math.Sin(Math.PI * a / 180d))); var p5 = new Point(); p5.X = p3.X; p5.Y = p1.Y * 2; var p6 = new Point(); p6.X = p2.X; p6.Y = p5.Y; points[0] = p1; points[1] = p2; points[2] = p3; points[3] = p4; points[4] = p5; points[5] = p6; points[6] = p1; Graphics g = e.Graphics; var p = new Pen(Color.Black); g.DrawLines(p, points);
再来一个:
a = 30; var p1 = new Point(); p1.X = 0; p1.Y = (int)(0 + width * (Math.Sin(Math.PI * a / 180d))); var p2 = new Point(); p2.X = (int)(0 + width * (Math.Cos(Math.PI * a / 180d))); p2.Y = 0; var p3 = new Point(); p3.X = p2.X * 2; p3.Y = p1.Y; var p4 = new Point(); p4.X = p3.X; p4.Y = p3.Y + width; var p5 = new Point(); p5.X = p2.X; p5.Y = p4.Y + p1.Y; var p6 = new Point(); p6.X = 0; p6.Y = p1.Y + width; points[0] = p1; points[1] = p2; points[2] = p3; points[3] = p4; points[4] = p5; points[5] = p6; points[6] = p1;
最终效果图:
给六边形加两个内圆:
// 画一个内圆 var x = width - (int)(0 + width * (Math.Cos(Math.PI * a / 180d))); ; var y = 0; p.Color = Color.DarkBlue; g.DrawEllipse(p, x, y, (width - x) * 2, (width - x) * 2); // 画一个内圆 x = 0; y = width - (int)(0 + width * (Math.Cos(Math.PI * a / 180d))); p.Color = Color.Violet; g.DrawEllipse(p, x, y, (width - y) * 2, (width - y) * 2);