我试图用e.Graphics.DrawPolygon (或DrawLine)绘制一些多边形和线条。但是,我在指定坐标绘制位置时遇到了一些小问题。我使用一个PictureBox事件来绘制它。这些元素相对于彼此绘制正确(创建所需的最终图片),但似乎总是在PictureBox的左上角绘制。当创建要绘制的点时,当我试图将坐标相乘时,它会在相同的位置绘制它,但是更大(大小被乘以,而不是位置坐标)。这是我的代码:
//some for loop
{
//getting the coordinates
Point toAdd = new Point((int)xCoord, (int)yCoord); // creating the point from originaly a double, here i tried to multiply..
tmpPoints.Add(toAdd); // tmpPoints is a List<Point>
}
points.Add(tmpPoints.ToArray()); //List<Point[]>
drawBuffer = points; //saving to a public List<Point[]>
points.Clear();
this.Invalidate();这里是pictureBox1_Paint方法的一部分:
for (int i = 0; i < drawBuffer.Count; i++)
{
//some other stuff like deciding which color to use, not very important
Brush br = new SolidBrush(polyColor);
e.Graphics.FillPolygon(br, drawBuffer[i]);
brush.Dispose();
}我用断点检查过,坐标是相同的比率( 100像素宽仍然是100像素宽),它们在坐标x 3000和y 1500处,但它只是在左上角绘制自己。当我将坐标乘以3次(见我乘以的地方的代码)时,它会在同一个地方绘制,但3倍大(在检查和弦之后没有意义.)所以,我的问题是-我如何正确地设置位置,或者有没有其他方法来做到这一点?就像这样(我知道,这是胡说八道,只是个例子)
foreach(Polygon poly in e.Graphics) { poly.Location = new Point(poly.Location.X * 2, poly.Location.Y * 2); }
发布于 2013-09-18 14:17:51
当你繁衍
poly.Location = new Point(poly.Location.X * 2, poly.Location.Y * 2);添加时正在执行拉伸操作
poly.Location = new Point(poly.Location.X + 50, poly.Location.Y +50);您正在执行翻译操作。
发布于 2013-09-18 14:28:43
当将点的坐标相乘时,它们在画布的左上角点(0,0)周围缩放:

为了使它围绕它的中心(我想你希望它这样工作),你需要计算出多边形的某种中心。为了简单起见,它甚至可以是在X和Y轴上坐标的算术平均值。如果您已经有了中心的坐标,那么通过将每个点的坐标转换为由中心坐标生成的反向矢量(如果您在此操作之后绘制它--多边形的中心位于坐标系的中心),情况将是这样的:

现在,做你的缩放:

然后用多边形的中心坐标向量将它移回:

发布于 2013-09-18 14:22:03
如果您想在不修改存储的弦的情况下移动everything,那么只需在绘制之前翻译图形:
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.TranslateTransform(100, 100); // shift the origin somehow
// ... draw the polygons as before ...
}https://stackoverflow.com/questions/18874231
复制相似问题