【问题标题】:create cartesian coordinate system c# windows forms drawingc# windows窗体绘图创建笛卡尔坐标系
【发布时间】:2015-07-22 01:20:16
【问题描述】:

我创建了简单的表格,现在我想在相对坐标中绘制单个对象(矩形、圆形、线条..)。 我这里的主要问题是在表格中间创建二维笛卡尔坐标系。有可能吗?怎么做??

主要问题是如何有效地将绝对坐标转换为相对坐标?如何创建自己的系统,以便获得数字(负数、正数,取决于象限)而不是像素的结果?

.

目前我用Cursor.Position.XCursor.Position.Y 制作了 MouseMove 事件来显示鼠标的当前位置,并将其显示在标签中。显示的坐标是像素,如何更改?我读过一些关于使用PointToClient 方法进行转换的内容,但我不太明白。

我被windows forms绑定了,因为我已经在win forms中做了一个程序,现在我只想给它添加这个功能。

谢谢

【问题讨论】:

  • 您是否尝试过使用变量来偏移当前位置? IE。 var offsetX = control.Width/2; (请记住,您需要确定如何处理奇数尺寸)
  • 这对我没有任何帮助...我设法创建了面板尺寸 1;1 并将其放在中间,然后我使用了 Point point = panel2.PointToClient(Cursor.Position); label1.Text = "Current coordinates: " + point.ToString(); 这是新奇且不太明确的解决方案我的问题,我想找到更好的解决方案

标签: c# winforms drawing cartesian-coordinates


【解决方案1】:

您最有可能寻找的是Graphics.TranslateTransformGraphics.ScaleTransform

private void Transform(PaintEventArgs e)
{
    e.Graphics.ScaleTransform(width, height);
    e.Graphics.TranslateTransform(xOffset, yOffset);
}

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

当然,您也可以自己处理所有这些。按表单的宽度和高度缩放您的输入/输出坐标,然后将其平移一半会得到相同的结果。

编辑- 为了增加一些清晰度,Windows 总是希望您的坐标为像素形式。您可以使用上述转换以不同的规模进行工作,然后转换为 Windows 期望的形式。

设置翻译应该很简单。如果你想要表格的中间,你只需要翻译一半的宽度和一半的高度。如何选择缩放坐标取决于您需要工作的范围(即-1.0 到 1.0、-0.5 到 0.5 等)。

【讨论】:

    猜你喜欢
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2021-04-14
    • 2016-12-10
    相关资源
    最近更新 更多