- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我创建了简单的形式,现在我想在相对坐标中绘制单个对象(矩形、圆、线..)。我这里的主要问题是在表单中间创建二维笛卡尔坐标系。这可能吗?如何做??
主要问题是如何高效地将绝对坐标转换为相对坐标?如何创建我自己的系统以便获得数字结果(负数、正数取决于象限)而不是像素数?
.
目前我用Cursor.Position.X
、Cursor.Position.Y
制作了 MouseMove 事件来显示鼠标的当前位置,并将其显示在标签中。显示的坐标是像素,怎么改?我读过一些有关使用 PointToClient
方法进行转换的内容,但我并不十分理解。
我依赖于 Windows 窗体,因为我已经在 win 窗体中制作了一个程序,现在我只想将此功能添加到其中。
谢谢
最佳答案
您最有可能寻找的是 Graphics.TranslateTransform
和 Graphics.ScaleTransform
.
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 等)。
关于c# - 创建笛卡尔坐标系 C# Windows 窗体绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31544195/
我是一名优秀的程序员,十分优秀!