如何计算从屏幕坐标到等距屏幕坐标的转换?

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)

(可能您必须根据您的坐标系方向将括号中的符号组合从 (+-)(++) 更改为 (++)(-+)