C#之WinForm窗体的坐标零点能重新定义吗?

OneCoderr 2017-09-06 02:51:32
如题,我想重新定义winform窗体的坐标零点到左下角,以对应现实的机构坐标零点,方便模拟。请问有什么简单方法没有? 定义一个矩阵对应可以解决吗?
...全文
557 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
OneCoderr 2017-09-08
  • 打赏
  • 举报
回复
My god, 我只想解决一个小问题,没想到被扯到高大上,我还没达到那个层次。 不说了,搬砖去了。
  • 打赏
  • 举报
回复
至于说你的原始数据的 y 坐标改为从底向上的,那么本身并没有什么特别复杂的东西。比如说原始数据坐标是(x,y),你的图纸区域的高度是h,那么不过就是得到控件坐标(x, h-y) 而已,也就是把 y 坐标替换为 h-y 就行了。 真正的问题在于不要只被1分钟就学会的东西所蒙蔽。应该花点时间学习软件架构设计。
  • 打赏
  • 举报
回复
比如说你设计一个“图纸”控件,那么这个用户控件的坐标零点就是它们里边的各种图形元素的坐标零点,这个图纸用户控件可以放到其它用户控件中,或者直接放到窗体的任何布局内部。如果你满脑子只有“窗体”概念,那么岂不是把自己往绝路上引导?岂不是没学过控件(组件)设计开发技术?
  • 打赏
  • 举报
回复
“窗体的坐标零点”? 设计 UI 组件要有一些基础经验,要知道分层架构的基本机制。设计界面时是以控件为承载“坐标”的出发点,(用户)控件可以组合到其它(用户)控件里边。 窗体怎么能当作设计的基础呢?
kxyzjm62 2017-09-07
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
“窗体的坐标零点”? 设计 UI 组件要有一些基础经验,要知道分层架构的基本机制。设计界面时是以控件为承载“坐标”的出发点,(用户)控件可以组合到其它(用户)控件里边。 窗体怎么能当作设计的基础呢?
同意这个说法。写程序,首先是框架,层次结构。即使你真的要在窗体上画图,你也应该把窗体当做一个控件(画布)来对待,这样你的程序层次清晰。
mk_lucifer 2017-09-07
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
比如说你设计一个“图纸”控件,那么这个用户控件的坐标零点就是它们里边的各种图形元素的坐标零点,这个图纸用户控件可以放到其它用户控件中,或者直接放到窗体的任何布局内部。如果你满脑子只有“窗体”概念,那么岂不是把自己往绝路上引导?岂不是没学过控件(组件)设计开发技术?
这个说的很对。
mk_lucifer 2017-09-07
  • 打赏
  • 举报
回复
引用 13 楼 szcoolly 的回复:
扯了半天,好像g.ScaleTransform(1, -1);就可以达到自己想要的效果了。
你要指望用这种东西来完成,用WPF岂不更好,什么放大,缩小,旋转,不光Z轴旋转,X轴,Y轴旋转(向屏幕内侧)。你就是把图片弄成弯的都没问题,都有现成的方法让你用。。 但这都不是解决工程问题的方法,解决工程问题自建坐标系,抽象模型等一整套框架必须的,之后根本就没有用你这些东西的必要了。。这些都图形学上用来做特效的,完全用它就等着玩完,比如缩放线条宽窄不变,等等问题多了。
OneCoderr 2017-09-07
  • 打赏
  • 举报
回复
扯了半天,好像g.ScaleTransform(1, -1);就可以达到自己想要的效果了。
OneCoderr 2017-09-07
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
至于说你的原始数据的 y 坐标改为从底向上的,那么本身并没有什么特别复杂的东西。比如说原始数据坐标是(x,y),你的图纸区域的高度是h,那么不过就是得到控件坐标(x, h-y) 而已,也就是把 y 坐标替换为 h-y 就行了。 真正的问题在于不要只被1分钟就学会的东西所蒙蔽。应该花点时间学习软件架构设计。
承蒙5楼的教育,不想多说,可是接着又被8楼教育一下,这是神马节奏?不是每个人都是大神,总会有些不懂的要请教吧? form的0,0点在左上角,那么我想问可否把其0,0点设为左下角,这“软件架构设计”有啥关系? 而且因为我有较多计算,不想用处处h-y的方式,如果能重新定义坐标系,岂不是更方便?工程中重设坐标0点例子不要太多了!
cheng2005 2017-09-07
  • 打赏
  • 举报
回复
引用 10 楼 szcoolly 的回复:
[quote=引用 8 楼 wddw1986 的回复:] 幸亏没让你去做地球仪,不然你要跑到月亮上才能把地球的模样做出来。
这个问题很奇怪吗? 比如我画一条斜线, 我的机台的0,0,点在左下角,我想同时也在屏幕上模拟这条直线,所以我想请教一下能否把form或者其上控件pictureBox的0,0点也设在左下角。 这想和跑到月亮上才能把地球的模样做出来有联系吗? [/quote] 你在图纸上画一条线的时候会考虑桌子的摆放位置吗?比如在图纸上画一条横线,平行于你的水平X轴,这时你会考虑这条横线是否平行于桌面的边缘吗? 你要做的是在图纸上画你的线,而把图纸放到桌面上,才是相当于把图像显示在界面上。图纸有千千万万种画法,怎么把图纸显示在界面上只要按照你的规则转换一下而已。你现在不纠结于图纸上怎么画图,非要在桌面上画图,你不觉得别扭吗?
OneCoderr 2017-09-07
  • 打赏
  • 举报
回复
引用 8 楼 wddw1986 的回复:
幸亏没让你去做地球仪,不然你要跑到月亮上才能把地球的模样做出来。
这个问题很奇怪吗? 比如我画一条斜线, 我的机台的0,0,点在左下角,我想同时也在屏幕上模拟这条直线,所以我想请教一下能否把form或者其上控件pictureBox的0,0点也设在左下角。 这想和跑到月亮上才能把地球的模样做出来有联系吗?
OneCoderr 2017-09-07
  • 打赏
  • 举报
回复
引用 1 楼 summergo123321 的回复:
不可以。 你需要使用坐标转换, 转换主要包括,偏移,旋转。三种,前者是二维矢量,后者是标量。 通常的做法是,构建坐标系,全局坐标系,子节点的场景坐标系,绘图时统一向上转换为窗口坐标系,坐标系转换问题很简单了,上过初中的化,我相信你可以。
关于"坐标转换"能提供更多一些的详细信息吗?
cheng2005 2017-09-07
  • 打赏
  • 举报
回复
幸亏没让你去做地球仪,不然你要跑到月亮上才能把地球的模样做出来。
OneCoderr 2017-09-07
  • 打赏
  • 举报
回复
引用 1 楼 summergo123321 的回复:
不可以。 你需要使用坐标转换, 转换主要包括,偏移,旋转。三种,前者是二维矢量,后者是标量。 通常的做法是,构建坐标系,全局坐标系,子节点的场景坐标系,绘图时统一向上转换为窗口坐标系,坐标系转换问题很简单了,上过初中的化,我相信你可以。
能说详细点吗? 或者能给提供一个例子吗?
OneCoderr 2017-09-07
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
自己写一个转换函数 Point LgPtToScrPt(Point p) { Point pt = new Point(); pt.x = p.x; pt.y = this.Height - p.y; return pt; }
曾想过这样弄,不过我的图形比较复杂,还有各种计算,这样不好弄。 所以想找一个简单的方法把左下角设为0,0点,以对应我的机台。
threenewbee 2017-09-06
  • 打赏
  • 举报
回复
自己写一个转换函数 Point LgPtToScrPt(Point p) { Point pt = new Point(); pt.x = p.x; pt.y = this.Height - p.y; return pt; }
mk_lucifer 2017-09-06
  • 打赏
  • 举报
回复
不可以。 你需要使用坐标转换, 转换主要包括,偏移,旋转。三种,前者是二维矢量,后者是标量。 通常的做法是,构建坐标系,全局坐标系,子节点的场景坐标系,绘图时统一向上转换为窗口坐标系,坐标系转换问题很简单了,上过初中的化,我相信你可以。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧