我阅读了一篇关于规范化设备坐标的文章(在德国DGL维基上),并提供了以下示例: “我们假设我们有一个尺寸为1024像素(宽度)和768像素高度的视口。具有绝对坐标P(350/210)的绝对坐标P(350/210)的点P将在标准化坐标P(-0,32 / -0)中这些坐标现在可以通过将标准化设备坐标(类似于矢量缩放)与视口大小相乘来投影到视口(800x600)上。在这种情况下,结果将是P(273/164)。
不知何故,我无法理解如何获得所提供的结果(我的意思是273/164和-0,32 / -0,59 ......有人可以向我解释如何计算坐标吗?
P.S。 :这是文章 - https://wiki.delphigl.com/index.php/Normalisierte_Ger%C3%A4tekoordinate
谢谢!
答案 0 :(得分:1)
那篇文章肯定缺乏描述。我可以让你在那里的一部分;也许有更多数学的人可以帮助完成。
根据this answer,将非标准化坐标转换为标准化坐标的公式为:
(其中Cx / y =坐标X / Y; Sx / y =屏幕X / Y;以及Nx / y =标准化X / Y)。
将示例的数字插入:
Nx = (350/1024) * 2 - 1 = -0.31640625
Ny = 1 - (210/768) * 2 = 0.453125
......或(-.36,0.45)。
扭转这一点以获得新的坐标:
Cx = (1 + -0.31640625) / 2 * 800 = 273.4375
Cy = (1 - 0.453125) / 2 * 600 = 164.0625
请注意,Y值不匹配。这可能是因为我的计算没有考虑宽高比,应该是因为这些屏幕的宽高比为0.75,而NDC为1. This SO answer也可能有所帮助。