复杂多边形区域填充算法

ZHD10652593 2012-11-05 08:09:34
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());
这个算法的思路有没有问题,虽然画出的图形是想要的,但总感觉逻辑不对,请高手们指点一下
...全文
224 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
XBodhi. 2012-11-06
  • 打赏
  • 举报
回复
引用 3 楼 assky124 的回复:
有个比较完整的方法 g.FillPolygon(new SolidBrush(Color.Red), pa.ToArray(),System.Drawing.Drawing2D.FillMode.Alternate); 可能主要原理是GDI的XOR(异或绘图),可以自己MSDN上查查
顶。
assky124 2012-11-06
  • 打赏
  • 举报
回复
有个比较完整的方法 g.FillPolygon(new SolidBrush(Color.Red), pa.ToArray(),System.Drawing.Drawing2D.FillMode.Alternate); 可能主要原理是GDI的XOR(异或绘图),可以自己MSDN上查查
ZHD10652593 2012-11-06
  • 打赏
  • 举报
回复
1L说一下,这是什么原理,我总感觉这有点投机取巧的意思
mngzilin 2012-11-05
  • 打赏
  • 举报
回复
没啥问题,除了这句Graphics g = this.CreateGraphics();可以修改
        List<Point> pa = new List<Point>();
        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();
        }

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧