如何计算从屏幕坐标到等距屏幕坐标的转换?
How to calculate transformation from screen coordinates to isometric screen coordinates?
我有二维坐标:
0, 0
200, 0
200, 100
400, 100
400, 200
0, 200
坐标代表以下形状:
但我想动态计算转换为等距投影的每个点的屏幕坐标。
所以我有字面屏幕坐标的坐标列表,我想从中生成屏幕坐标,代表形状的等距 'version'。
请注意,我不想计算 'isometric world' 中的坐标,我想获取文字屏幕坐标。
(旋转 45 度,垂直缩放 0.5)
屏幕上每个带问号的点在哪里?
很可能有些坐标会变成负数,但这没关系。这可以通过计算偏移量来逻辑解决,使得最左边的 x 坐标为零。
rotated 45 degrees, and scaled vertically by 0.5
这是仿射变换:
按旋转中心 (xc, yc) 坐标移动
旋转
通过 xc 和一些 yc 向后移动(您可能需要另一个 y 移动以与屏幕边缘对齐)
按 y 轴缩放
sq = Sqrt(2)/2 //Cos and Sin of 45
x_new = xc + (x_old - xc) * sq - (y_old - yc) * sq
y_new = 0.5 * (yc + (x_old - xc) * sq + (y_old - yc) * sq)
(可能您必须根据您的坐标系方向将括号中的符号组合从 (+-)(++)
更改为 (++)(-+)
)
我有二维坐标:
0, 0
200, 0
200, 100
400, 100
400, 200
0, 200
坐标代表以下形状:
但我想动态计算转换为等距投影的每个点的屏幕坐标。 所以我有字面屏幕坐标的坐标列表,我想从中生成屏幕坐标,代表形状的等距 'version'。 请注意,我不想计算 'isometric world' 中的坐标,我想获取文字屏幕坐标。 (旋转 45 度,垂直缩放 0.5)
屏幕上每个带问号的点在哪里? 很可能有些坐标会变成负数,但这没关系。这可以通过计算偏移量来逻辑解决,使得最左边的 x 坐标为零。
rotated 45 degrees, and scaled vertically by 0.5
这是仿射变换:
按旋转中心 (xc, yc) 坐标移动
旋转
通过 xc 和一些 yc 向后移动(您可能需要另一个 y 移动以与屏幕边缘对齐)
按 y 轴缩放
sq = Sqrt(2)/2 //Cos and Sin of 45
x_new = xc + (x_old - xc) * sq - (y_old - yc) * sq
y_new = 0.5 * (yc + (x_old - xc) * sq + (y_old - yc) * sq)
(可能您必须根据您的坐标系方向将括号中的符号组合从 (+-)(++)
更改为 (++)(-+)
)