Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中调整多边形的大小?_C#_.net_Gdi+_System.drawing - Fatal编程技术网

C# 如何在C中调整多边形的大小?

C# 如何在C中调整多边形的大小?,c#,.net,gdi+,system.drawing,C#,.net,Gdi+,System.drawing,我使用以下代码绘制多边形: 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); 如何调整多边形的大小,如下所示 你有几个

我使用以下代码绘制多边形:

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);
如何调整多边形的大小,如下所示


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

double resizeValue = 1.5;
points.Select(x => new Point(x.X*resizeValue, x.Y*resizeValue);
我认为这种方式很容易理解。可能是更好的方法,但如果这就是你所做的一切,可能就足够了。

试试以下方法:

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

var mx=g.Transform.Clone();

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.Transform=mx;
它在不同的位置以不同的大小绘制相同形状的多边形


我添加的红色批注

您需要更改点中的值。查看System.Drawing.Matrix类和Graphics.Transform属性。@Rotem:请帮助我使用System.Drawing.Matrix和Graphics.Transform来调整多边形的大小。@ahmadimahsa在绘制任何内容之前,请查看surface.ScaleTransform和surface.TranslateTransform。下一个问题是如何从多边形的中心调整大小,而不是从多边形的中心调整大小[0,0]:我想使用多边形中心调整大小。只想注意,只有在不需要多边形共享同一中心的情况下,它才会起作用。否则,您还需要执行简单的转换。您至少可以添加或减去一个值。x.x*resizeValue+translation,其中转换可以是任何int。也可以对Y执行此操作。如果这是OpenGL,您只需将其乘以具有正确属性的矩阵,但事实并非如此。TranslateTransform中的100100是多边形的中心吗?您知道您的多边形是三角形,如果要在其周围绘制,需要先计算中心。我在winforms中添加了一个打印输出示例作为示例。请注意,var状态=g.Save;和g.Restorestate;可用于将比例转换恢复为默认值。