ldh_007
回答者
回答于 2026-10-21
屏幕坐标系与笛卡尔坐标系的差异在于原点位置和Y轴方向。屏幕坐标系原点(0,0)在左上角,Y轴正方向向下;目标笛卡尔坐标系原点在左下角,Y轴正方向向上。X轴方向两者一致,因此只需对Y坐标进行翻转。
转换公式
- 新X = 原X
- 新Y = 屏幕高度 - 1 - 原Y
其中“屏幕高度”指当前参考区域(如屏幕或窗口客户区)的总像素行数,减1是因为像素索引从0开始。
易语言代码示例
.版本 2
.子程序 屏幕转笛卡尔, , 公开
.参数 原X, 整数型
.参数 原Y, 整数型
.参数 参考高度, 整数型
.参数 新X, 整数型, 参考
.参数 新Y, 整数型, 参考
新X = 原X
新Y = 参考高度 - 1 - 原Y
若以整个屏幕为参考,可通过取屏幕高度()获取参考高度;若以某窗口客户区为参考,则使用取用户区高度()。
适用条件
- 适用于二维平面内的像素坐标映射。
- 参考高度必须在坐标转换前准确获取,窗口大小改变时需重新获取。
常见误区
- 忘记减1:若屏幕高度为1080,有效Y坐标范围是0至1079。不减1会导致计算出的Y坐标超出边界。
- 混淆参考区域:将屏幕高度用于窗口内坐标转换,导致结果偏移。应确保参考高度与实际坐标来源的区域一致。
- 忽略DPI缩放:在高DPI设置下,逻辑像素与物理像素可能不一致,需确认所取高度值对应的是哪种像素单位。