C#实现立方体二测投影:如何选择正确的旋转角度?
二测投影(Dimetric Projection)的正确角度选择
我想要绘制立方体的二测投影,使用了如下旋转矩阵:
float p = 33f; float f =41f; float[,] rotation = { { (float)Math.Cos(f*Math.PI/180), (float)Math.Sin(p*Math.PI/180)*(float)Math.Cos(f*Math.PI/180), 0, 0 }, { 0, (float)Math.Cos(p*Math.PI/180), 0, 0 }, { (float)Math.Sin(f*Math.PI/180),((-(float)Math.Sin(p*Math.PI/180))* (float)Math.Cos(f*Math.PI/180)), 0, 0 }, {0, 0, 0, 1 } };
尝试使用33°和41°的角度,但得到的效果并非标准二测投影。已知正等测投影需选择35°和45°的角度,但未找到二测投影的角度关系,请问二测投影应选择哪些角度?
解答
二测投影的核心要求是两个轴向的缩放比例一致,第三个轴向为其一半,对应的标准角度参数如下:
- 对应代码中
p的俯仰角(绕X轴旋转):19.47°(精确值为arctan(1/3),换算后约19.4712°) - 对应代码中
f的偏航角(绕Y轴旋转):45°
这个角度组合能严格满足二测投影的轴缩放规则,让立方体的投影呈现标准的二等测视觉效果。
调整后的代码示例:
// 用精确计算值替代近似角度,效果更准确 float p = (float)(Math.Atan(1.0 / 3.0) * 180 / Math.PI); float f = 45f; float[,] rotation = { { (float)Math.Cos(f*Math.PI/180), (float)Math.Sin(p*Math.PI/180)*(float)Math.Cos(f*Math.PI/180), 0, 0 }, { 0, (float)Math.Cos(p*Math.PI/180), 0, 0 }, { (float)Math.Sin(f*Math.PI/180),((-(float)Math.Sin(p*Math.PI/180))* (float)Math.Cos(f*Math.PI/180)), 0, 0 }, {0, 0, 0, 1 } };
内容的提问来源于stack exchange,提问作者user14556999
相关产品推荐
相关产品推荐

