使用C#的Windows Forms绘图创建笛卡尔坐标系

3
我创建了一个简单的表格,现在我想用相对坐标绘制单个对象(矩形、圆、线等)。我遇到的主要问题是如何在表格中央创建2D笛卡尔坐标系。这是否可能?如何做?
主要问题是如何高效地将绝对坐标转换为相对坐标?如何创建自己的系统,以便我可以得到数字结果(根据象限为正或负)而不是像素?
目前,我已经使用MouseMove事件显示鼠标的当前位置,并使用“Cursor.Position.X”、“Cursor.Position.Y”在标签中显示它。显示的坐标是像素,如何更改?我读到过使用“PointToClient”方法进行转换,但我真的不理解。
我被绑定在Windows Forms上,因为我已经在Win Forms中制作了一个程序,现在我只想添加此功能。
谢谢

你尝试过使用变量来偏移当前位置吗?例如,var offsetX = control.Width/2;(请记住,你需要确定如何处理奇数大小) - Tebc
这对我没有任何帮助...我设法创建了大小为1;1的面板并将其放在中间,然后我使用了Point point = panel2.PointToClient(Cursor.Position); label1.Text = "Current coordinates: " + point.ToString(); 这是一个新手和不太清晰的解决方案,我想找到更好的解决方案。 - dodoria1992
可能是flip coordinates when drawing to control的重复问题。 - TaW
1个回答

1
你最可能需要的是 Graphics.TranslateTransformGraphics.ScaleTransform。这两个方法与编程有关。请注意保留HTML标签,但不需要解释它们。
private void Transform(PaintEventArgs e)
{
    e.Graphics.ScaleTransform(width, height);
    e.Graphics.TranslateTransform(xOffset, yOffset);
}

您还需要确保所使用的任何绘图方法都有重载PointF结构或Single

当然,您也可以在自己的端上处理所有这些。通过将输入/输出坐标按窗体的宽度和高度进行缩放,然后平移一半,即可获得相同的结果。

编辑-为了增加一些清晰度,Windows始终希望您的坐标以像素形式呈现。您可以使用上述转换来在不同的比例尺度下工作,然后转换为Windows期望的形式。

设置平移应该很简单。如果您想要窗体的中心,只需平移半个宽度和半个高度即可。您选择如何缩放坐标将取决于您需要工作的范围(例如,-1.0到1.0,-0.5到0.5等)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接