You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:15:33