【问题标题】:C# fill polygon (triangle)C# 填充多边形(三角形)
【发布时间】:2014-02-10 18:14:22
【问题描述】:

我在绘制两个多边形时遇到问题。 我想填充两个三角形,但一个大于第二个。 我在 winforms 中使用 UserControl。 代码:

Point[] DOWN = new Point[] {new Point(0, 0), new Point(10, 0), new Point(5, 5)};
Point[] UP = new Point[] { new Point(0, 15), new Point(10, 15), new Point(5, 10) };

protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            SolidBrush brush = new SolidBrush(Color.FromArgb(253, 198, 19));       
            e.Graphics.FillPolygon(brush, DOWN);
            e.Graphics.FillPolygon(brush, UP);
            brush.Dispose();
        }

问题出在哪里?

【问题讨论】:

    标签: c# winforms drawing draw


    【解决方案1】:

    尝试设置 PixelOffsetMode 属性:

    e.Graphics.PixelOffsetMode = PixelOffsetMode.Half;
    using (SolidBrush brush = new SolidBrush(Color.FromArgb(253, 198, 19))) {
      e.Graphics.FillPolygon(brush, DOWN);
      e.Graphics.FillPolygon(brush, UP);
    }
    

    结果:

    【讨论】:

      【解决方案2】:

      尝试保持逆时针顺序并从最高点开始:

      new Point(5, 10), new Point(10, 15), new Point(0, 15)
      

      告诉我们这是否有帮助。有时这些算法在边界条件下表现不佳。

      【讨论】:

      • 问题依然存在 :(