【问题标题】:how to resize polygon in C#?如何在 C# 中调整多边形的大小?
【发布时间】:2013-10-22 21:00:35
【问题描述】:

我用这段代码绘制多边形:

Graphics surface;
surface = this.CreateGraphics();
SolidBrush brush = new SolidBrush(Color.Olive);
Point[] points = { new Point(50, 50), new Point(250, 50), new Point(50, 250) };
surface.FillPolygon(brush, points);

如何调整多边形的大小类似于以下?

Pic

【问题讨论】:

  • 您需要更改积分中的值。
  • 查看System.Drawing.Matrix 类和Graphics.Transform 属性。
  • @Rotem:请帮助我使用 System.Drawing.Matrix 和 Graphics.Transform 来调整多边形大小。
  • 在绘制任何东西之前先查看surface.ScaleTransform()surface.TranslateTransform()

标签: c# .net gdi+ system.drawing


【解决方案1】:

试试这个:

var g  = e.Graphics;
var points=new PointF[] { new PointF(0, 0), new PointF(1, 0), new PointF(0, 1) };

var st=g.SaveState();

g.TranslateTransform(100f, 100f);
g.ScaleTransform(40f, 40f);
g.FillPolygon(Brushes.Olive, points);
g.Transform=mx;

g.TranslateTransform(300f, 100f);
g.ScaleTransform(80f, 80f);
g.FillPolygon(Brushes.MediumOrchid, points);
g.Restore(st);

在不同位置绘制相同形状、大小不同的多边形。

(我添加的红色注释)

【讨论】:

  • 在 TranslateTransform 中做 100,100 是多边形的中心吗?
  • 你知道你的多边形是一个三角形,如果你想在它周围画,首先需要计算中心。
  • 我在winforms中添加了一个示例打印输出作为示例。
  • 请注意,var state = g.Save();g.Restore(state); 可用于将比例转换恢复为默认值。
【解决方案2】:

您有几个选择。一个简单而愚蠢的解决方案是使用 linq:

double resizeValue = 1.5;
points.Select(x => new Point(x.X*resizeValue, x.Y*resizeValue);

我认为这种方式很容易理解。可能是更好的方法,但如果这就是你正在做的,它可能就足够了。

【讨论】:

  • 下一个问题是如何从多边形中心调整大小,而不是从 [0,0] :)
  • 我想使用多边形的中心来调整大小。
  • 只是想指出,只有当您不需要多边形共享同一个中心时,它才会起作用。否则,您还需要执行简单的翻译。
  • 您至少也可以添加或减去一个值。 x.X*resizeValue+translation,其中翻译可以是任何 int。也为 Y 做这件事。如果这是 OpenGL,您只需将其乘以具有正确属性的某个矩阵,但事实并非如此。
猜你喜欢
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
相关资源
最近更新 更多