在Python3.x中,使用透视图将三维数组投影到二维数组上
我有一个3d数组/列表作为坐标系。我想在terminal/cmd窗口中显示简单的东西,如具有3d效果的线条或立方体。目前,我只是将z值(与第一个平面的距离)映射到一些ASCII字符以模拟深度。但在现实世界中,光被一个点捕捉,而不是一个平面。这给了它一个视角。我读过一些投影方法,但找不到任何适合我需要的文章。我知道这是非常缓慢的,使用np等将使它更快,但我想在(有点)纯Python中这样做。我有一个完整的类,但我只发布重要的函数。以下是我到目前为止得到的信息: 将3d压缩为2d的功能:(d2代表2d) 我该如何重写这篇文章,使其具有前瞻性? 下面是一个示例,其中一行从(3,7,16)到(90,90,90),数组大小为100x100x100:在Python3.x中,使用透视图将三维数组投影到二维数组上,python,arrays,3d,console,projection,Python,Arrays,3d,Console,Projection,我有一个3d数组/列表作为坐标系。我想在terminal/cmd窗口中显示简单的东西,如具有3d效果的线条或立方体。目前,我只是将z值(与第一个平面的距离)映射到一些ASCII字符以模拟深度。但在现实世界中,光被一个点捕捉,而不是一个平面。这给了它一个视角。我读过一些投影方法,但找不到任何适合我需要的文章。我知道这是非常缓慢的,使用np等将使它更快,但我想在(有点)纯Python中这样做。我有一个完整的类,但我只发布重要的函数。以下是我到目前为止得到的信息: 将3d压缩为2d的功能:(d2代表2
但是如果是立方体的话,图片看起来就像一个正方形。这就是我的问题。你必须在等式中添加透视变换和相机位置,请参阅OpenGL文档了解数学知识,使用字符屏幕显示像素并不能提供太多分辨率
depthASCII = list("@%#*+=-:. ")
def d2(self, arr):
intervall = len(self.depthAscii)/self.depth
nA = [["" for x in range(self.width)] for y in range(self.height)]
for x in range(self.width):
for y in range(self.height):
try:
if self.pixel in arr[x][y]:
nA[x][y] = self.depthAscii[int(self.field[x][y].index(self.pixel)*intervall)]
else:
nA[x][y] = " "
except:
raise
return nA