如何转换设备坐标(左上角为原点)为数学常用的习惯坐标,既左下角为原点

chinabull 2002-09-03 09:38:07
如何转换设备坐标(左上角为原点)为数学常用的习惯坐标,既左下角为原点,我混淆了许多的东西。有谁愿意帮帮我?谢谢
...全文
463 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kx-gaowei 2002-09-29
  • 打赏
  • 举报
回复
楼上所言极是,虚心接受。
alexxing 2002-09-04
  • 打赏
  • 举报
回复
楼上的不对,不仅仅是平移,而且符号其实是反的

简单地说是: (x,y) -> (x,h-y)

但考虑到比例就不能这么简单了,必须有个完整的模型
kx-gaowei 2002-09-04
  • 打赏
  • 举报
回复
屏幕坐标原点 *--------|------------|--
| | |
| | |
|--------* 点P (x,y) | h
| | |
数学坐标原点 *--------|------------|--

可以看出将屏幕坐标转换到数学坐标,实际上就是把原点垂直下移了h的距离.
若p的屏幕坐标为(x,y)
如图可知其数学坐标 为(x,y+h)
在其他象限也都是一样的情况.
alexxing 2002-09-04
  • 打赏
  • 举报
回复
你的屏幕坐标系肯定在一个矩形里吧,假设为

struct TScreenRect {
int left, top, right, bottom; //这四个应该知道啥意思吧?
} ScreenRect;

你的数学坐标系也应该是一个矩形范围(不光有原点的问题,还有坐标比例的问题呢,这两者分不开的):

struct TMathRect {
double xo, yo, xmax, ymax;
} MathRect;

现在你想,将两个矩形互相对应

(xo, yo) <==> (left, bottom) //不是 (left, top)
(xmax, ymax) <==> (right, top) //不是 (right, bottom)


所谓坐标系变换,就是将两个坐标系的任意点对应起来:

假设屏幕点为

struct TScreenPoint {
int x, y;
};

数学点为

struct TMathPoint {
double x, y;
};

那么 TScreenPoint -> TMathPoint 的变换公式为:
...

TMathPoint -> TScreenPoint 的变换公式为:
...

我已经帮你把思路理清了,具体公式,学过中学解析几何的就应该能推出来,你自己锻炼吧,我不想剥夺你解决问题后的成就感
chinabull 2002-09-03
  • 打赏
  • 举报
回复
但是我还要读鼠标的坐标的。我觉得是不是仅仅用平移能行吗?
网络咖啡 2002-09-03
  • 打赏
  • 举报
回复
记得Y坐标要倒置,y=-y
chinabull 2002-09-03
  • 打赏
  • 举报
回复
我是这方面的菜鸟,能具体说说吗/十分感谢!
网络咖啡 2002-09-03
  • 打赏
  • 举报
回复
原点平移,很简单的

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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