List<Point> p1 = new List<Point> {
new Point(10,10),
new Point(10,100),
new Point(100,100),
new Point(100,10),
new Point(10,10)
};
List<Point> p2 = new List<Point> {
new Point(20,20),
new Point(20,90),
new Point(90,90),
new Point(90,20),
new Point(20,20)
};
List<Point> p3 = new List<Point> {
new Point(30,30),
new Point(30,80),
new Point(80,80),
new Point(80,30),
new Point(30,30)
};
List<Point> pa = new List<Point>();
pa.AddRange(p1);
pa.AddRange(p2);
pa.AddRange(p3);
pa.Add(new Point(80, 30));
pa.Add(new Point(90, 20));
pa.Add(new Point(100, 10));
Graphics g = this.CreateGraphics();
g.FillPolygon(new SolidBrush(Color.Red), pa.ToArray());
这个算法的思路有没有问题,虽然画出的图形是想要的,但总感觉逻辑不对,请高手们指点一下
new Point(10,10),
new Point(10,100),
new Point(100,100),
new Point(100,10),
new Point(10,10)
};
List<Point> p2 = new List<Point> {
new Point(20,20),
new Point(20,90),
new Point(90,90),
new Point(90,20),
new Point(20,20)
};
List<Point> p3 = new List<Point> {
new Point(30,30),
new Point(30,80),
new Point(80,80),
new Point(80,30),
new Point(30,30)
};
List<Point> pa = new List<Point>();
pa.AddRange(p1);
pa.AddRange(p2);
pa.AddRange(p3);
pa.Add(new Point(80, 30));
pa.Add(new Point(90, 20));
pa.Add(new Point(100, 10));
Graphics g = this.CreateGraphics();
g.FillPolygon(new SolidBrush(Color.Red), pa.ToArray());
这个算法的思路有没有问题,虽然画出的图形是想要的,但总感觉逻辑不对,请高手们指点一下
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.FillPolygon(new SolidBrush(Color.Red), pa.ToArray());
} private void button1_Click(object sender, EventArgs e)
{
List<Point> p1 = new List<Point> {
new Point(10,10),
new Point(10,100),
new Point(100,100),
new Point(100,10),
new Point(10,10)
};
List<Point> p2 = new List<Point> {
new Point(20,20),
new Point(20,90),
new Point(90,90),
new Point(90,20),
new Point(20,20)
};
List<Point> p3 = new List<Point> {
new Point(30,30),
new Point(30,80),
new Point(80,80),
new Point(80,30),
new Point(30,30)
};
pa.RemoveAll();
pa.AddRange(p1);
pa.AddRange(p2);
pa.AddRange(p3);
pa.Add(new Point(80, 30));
pa.Add(new Point(90, 20));
pa.Add(new Point(100, 10));
this.Refresh();
}
g.FillPolygon(new SolidBrush(Color.Red), pa.ToArray(),System.Drawing.Drawing2D.FillMode.Alternate);可能主要原理是GDI的XOR(异或绘图),可以自己MSDN上查查