Rotating Cube in Python <2>
2. Python으로 변경하기 전에…
이제 코드에 대한 이해는 끝났다. C 코드를 Python으로 옮겨적는 일만 남았다.
같아야 할 부분과 달라질 부분을 정리해보면…
같아야 할 부분
- 각종 수학 함수들
- 전역변수
달라져야 할 부분
- buffer(buffer, zBuffer)들의 선언방식
- 컬러를 넣기 위한 부분
이 점에 유의하며 옮겨보았다.
3. Python으로 변경
Link : 여기에서 코드 전문 확인
이걸 옮기면서 크게 바뀌는 부분은 없었기에 딱히 어렵진 않았다.
굳이 어려웠던 부분을 꼽자면 buffer
와 zBuffer
가 무엇을 뜻하는 것인지 헤맨 부분인데, 아무래도 이걸 말하는 것 같았다.
그럼에도 달라진 부분을 소개하자면 원본 코드의 main 부분인데
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
while(True):
buffer = [backgroundASCIICode] * (width * height)
zBuffer = [0] * (width * height)
cubeWidth = 20
horizontalOffset = 0.5 * cubeWidth
for cubeX in np.arange(-cubeWidth,cubeWidth,incrementSpeed):
for cubeY in np.arange(-cubeWidth,cubeWidth,incrementSpeed):
calculateOnSurface(cubeX,cubeY,-cubeWidth,'\033[95m' + '@' + '\033[0m')
calculateOnSurface(cubeWidth,cubeY,cubeX,'\033[34m'+ '$' + '\033[0m')
calculateOnSurface(-cubeWidth,cubeY,-cubeX,'\033[32m' + '~' + '\033[0m')
calculateOnSurface(-cubeX,cubeY,cubeWidth,'\033[38;5;208m' + '#' + '\033[0m')
calculateOnSurface(cubeX,-cubeWidth,-cubeY,'\033[38;5;159m' + ';' + '\033[0m')
calculateOnSurface(cubeX,cubeWidth,cubeY,"+" + '\033[0m')
## 이하 생략
굳이 정신사납게 큐브가 3개나 돌아가도록 하진 않고 하나만 돌아가는 대신 큐브의 면 마다 다른 색을 배정했다.
1
'\033[95m' + '@' + '\033[0m'
이처럼 표현하고자 하는 Ascii 문자를 설정하고, 앞 뒤로 원하는 색에 대한 정보를 입력해주면 된다.
나는 여기서 출력에 색 입히는 법을 보고 했다. 문자 뿐만 아니라 배경에도 색을 넣을 수 있다고 하니 꽤나 유용할지도?
4. 결과
꽤나 잘 돌아간다. 각 면에 색도 잘 입혀졌고, 뒷면이 보이는 부분을 더 잘 볼 수 있어서 큐브에 입체감을 더해주는듯.
원래대로라면 뒷면이 아예 안보여야 정상이지만, 코드 상에서 앞면 픽셀 위치와 뒷면 픽셀 위치가 완전하게 커버되지는 않는 모양이다.
아무튼 생각보다 잘 돼서 기분이 좋았다.