我在做c#项目。我发现了一个问题,无法找到这个问题的答案,这就是为什么我在这里发帖/ 我正在c#中实现程序平面图生成。首先,我需要在给定点上绘制多边形以生成网格。积分可以是正面的也可以是负面积分将浮动。
从Microsoft文档我可以为浮动正点绘制多边形,但是当我将点更改为负数时,它不会在表单上绘制任何内容。
此方法id绘制x,y在角落中坐标0,0。
代码示例 public void DrawPolygonPointF(PaintEventArgs e) {
// Create pen.
Pen blackPen = new Pen(Color.Black, 3);
// Create points that define polygon.
PointF point1 = new PointF(50.0F, 50.0F);
PointF point2 = new PointF(100.0F, 25.0F);
PointF point3 = new PointF(200.0F, 5.0F);
PointF point4 = new PointF(250.0F, 50.0F);
PointF point5 = new PointF(300.0F, 100.0F);
PointF point6 = new PointF(350.0F, 200.0F);
PointF point7 = new PointF(250.0F, 250.0F);
PointF[] curvePoints =
{
point1,
point2,
point3,
point4,
point5,
point6,
point7
};
// Draw polygon curve to screen.
e.Graphics.DrawPolygon(blackPen, curvePoints);
}
我有负坐标值,例如pointF(300,-250)此方法没有为负坐标值绘制任何内容。 所以请给我简要的解决方案,因为我对绘图知之甚少。
谢谢
答案 0 :(得分:2)
在C#0,0中是屏幕的左上角。所以负值不在表单的左边或顶边。您需要将坐标从坐标空间转换为表格。要放置0,0死点,你可以这样做:
int screenX = myX + windowWidth / 2;
int screenY = myY + windowHeight / 2;
答案 1 :(得分:2)
建立@pquest给出的答案,以及新添加的示例代码,做一个真实的" GDI转换看起来像这样:
// Create pen.
Pen blackPen = new Pen(Color.Black, 3);
// Create points that define polygon.
PointF point1 = new PointF(50.0F, 50.0F);
PointF point2 = new PointF(100.0F, 25.0F);
PointF point3 = new PointF(200.0F, 5.0F);
<...snip...>
//Apply a translation Transformation to move 0,0 to the center of the
//window. You can now draw your points with negative values, without doing
//any addition to them.
int screenX = windowWidth / 2;
int screenY = windowHeight / 2;
e.Graphics.TranslateTransform((float) screenX, (float) screenY);
// Draw polygon curve to screen.
e.Graphics.DrawPolygon(blackPen, curvePoints);
GDI转换非常强大。您可以使用它们来移动点,水平或垂直翻转点,缩小或缩小,像平行四边形一样扭曲,甚至旋转。所有这些都可以组合成所谓的转换矩阵,以获得一些非常酷的结果。 更多示例可以在MSDN找到。
答案 2 :(得分:2)
这对我这个问题很有帮助。 你只需要在你的代码中添加几行代码。
int windowWidth = this.ClientSize.Width;
int windowHeight = this.ClientSize.Height;
int screenX = windowWidth / 2;
int screenY = windowHeight / 2;
e.Graphics.TranslateTransform((float)screenX, (float)screenY);