(抱歉我语言不通)
我是 Python 的初学者,但我别无选择,我的项目需要它,而对于这个我必须通过编程创建 ascii 等距立方体。 我真的不知道该怎么做,所以我开始想找到“角”的坐标(不是正确的词,但是......)来绘制瓷砖
#what I expect really :
- for a 2 wide
.-⁻``⁻-.
.-⁻` `⁻-.
| |
| |
`⁻-. .-⁻`
`⁻-..-⁻`
- for 3 wide
.-⁻``⁻-.
.-⁻` `⁻-.
.-⁻` `⁻-.
| |
| |
`⁻-. .-⁻`
`⁻-. .-⁻`
`⁻-..-⁻`
# what I except for the beginning
- 2 wide
.-⁻``⁻-.
.-⁻` `⁻-.
`⁻-. .-⁻`
`⁻-..-⁻`
- 3 wide (,etc.)
.-⁻``⁻-.
.-⁻` `⁻-.
.-⁻` `⁻-.
`⁻-. .-⁻`
`⁻-. .-⁻`
`⁻-..-⁻`
我开始做什么
#! /usr/bin/env python
import numpy as np
x = 2 // number of tiles
y = 2 // idem
z = 2 // elevation, not used yet.
w = 4 // wideness of a tile (.-⁻` ---> 4 characters)
s = range ( x * y ) // just to apply a number to a corner
c = 0 // counter
def makeMatrix ( x, y ):
matrix = np.full ( y*2*h+z, x*2*w), '.', dtype=str )
return matrix
def getOut ():
global x, y, w, h, c
for i in range ( int(x) ):
for j in range ( int(y) ):
cx = ( j - i ) * w
cy = ( j + i )
dec = w
cx += dec
matrix[cy][cx] = str ( s[c] )
c += 1
return matrix
matrix = makeMatrix ( x, y )
print ( getOut () )
我找到了一些坐标,但它们在某种意义上是错误的。我有点困惑。 我已经在使用瓷砖了,但这次我真的不知道该怎么做…… 有什么想法吗?
最佳答案
这是我快速做出来的东西。它接受立方体的宽度和高度参数。因为边缘的坡度可能不同,所以它不能很好地处理不同的坡度;它只是为倾斜的边缘使用一个句点字符(和一个垂直边缘的管道)。这是代码:
from __future__ import division # For Python 2: make integer division produce float results. (Otherwise the cube is mangled.)
from math import sqrt
def draw_cube(width, height):
cube = [[' ']*width for row in range(height)]
vertices = {
'tc': (width//2, 0),
'tl': (0, int(.25*height)),
'tr': (width-1, int(.25*height)),
'cc': (width//2, int(.5*height)),
'bl': (0, int(.75*height)),
'br': (width-1, int(.75*height)),
'bc': (width//2, height-1)
}
edges = (
('tc', 'tl'),
('tc', 'tr'),
('tl', 'cc'),
('tl', 'bl'),
('tr', 'cc'),
('tr', 'br'),
('bl', 'bc'),
('br', 'bc'),
('cc', 'bc')
)
for edge in edges:
v1 = vertices[edge[0]]
v2 = vertices[edge[1]]
x1 = v1[0]
y1 = v1[1]
x2 = v2[0]
y2 = v2[1]
if x1 > x2: # Always moving left to right
x1, x2 = x2, x1
y1, y2 = y2, y1
try:
m = (y2-y1)/(x2-x1)
except ZeroDivisionError:
c = '|'
for yy in range(min(y1, y2), max(y1, y2)):
cube[yy][x1] = c
else:
c = '.'
yy = y1
for xx in range(x1, x2):
cube[int(yy)][xx] = c
yy += m
cube_str = '\n'.join(''.join(row) for row in cube)
return cube_str
x = draw_cube(40,20)
print(x)
打印:
.......
.... ....
.... ....
.... ....
.... ...
|... ...|
| .... .... |
| .... .... |
| .... .... |
| .... ... |
| | |
| | |
| | |
| | |
| | |
...... | ....
..... | .....
..... | .....
....|....
.
关于python - 带 python 的等距 ascii 立方体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33628566/