gpt4 book ai didi

在等距投影中将 3D 坐标转换为 2D

转载 作者:太空宇宙 更新时间:2023-11-04 01:27:25 25 4
gpt4 key购买 nike

我在将 3D 坐标转换为 2D 然后在 C 中打印等距投影中的所有点时遇到问题。

我试过这个:

u = x / z;
v = y / z;

但是当 z = 0 时,我的函数进入无限循环。

我还在谷歌上找到了一些东西,但这对负 Z 不起作用(我想要 Z > 0 时的颠簸和 Z < 0 时的坑)

这是我的工作方式。我的函数得到一个看起来像这样的文件

0 0 0 0 0 0 0 0 0 0
0 9 9 9 9 9 9 9 9 0
0 9 9 9 9 9 9 9 9 0
0 9 9 9 -5 -5 9 9 9 0
0 9 9 9 -5 -5 9 9 9 0
0 9 9 9 -5 -5 9 9 9 0
0 9 9 9 -5 -5 9 9 9 0
0 9 9 9 9 9 9 9 9 0
0 9 9 9 9 9 9 9 9 0
0 0 0 0 0 0 0 0 0 0

数字代表 z 坐标,原点 (0;0;0) 位于左上角。

最佳答案

听起来你在混淆概念。只有当您将 3D 原点视为您的相机,并且将 z=1 平面视为您的屏幕时,除以第三坐标才有意义。在那种情况下,z=0 的点被投影到无穷大。通常你有一个视锥体来裁剪这样的无限坐标。如果您的输入预期有 z=0,那将无法工作。

无论如何,它不是isometric ,因为 z 轴扮演的角色与所有其他轴不同。等距投影是平行投影的特例,而您的划分建议使用中心投影,除非它是平面投影变换后的去均匀化步骤。

对于等距投影,我建议您改为尝试以下方法:

u = x*cos(α) + y*cos(α+120°) + z*cos(α-120°)
v = x*sin(α) + y*sin(α+120°) + z*sin(α-120°)

尽管对于 C,您必须转换为弧度。 α 将旋转您的 View ,选择您想要对齐的东西。如果您选择 α 作为 30° 的倍数,您将得到相当不错的数字,仅包含一个简单的平方根。 sin/cos 对简单地描述了彼此成 120° 的三个单位长度 vector 。您将这些用作 3D 单位 vector 的图像。如果愿意,您也可以将其写成矩阵乘以 vector 乘法。

关于在等距投影中将 3D 坐标转换为 2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28607713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com