포스트

Rotating Cube in Python <2>

2. Python으로 변경하기 전에…

이제 코드에 대한 이해는 끝났다. C 코드를 Python으로 옮겨적는 일만 남았다.

같아야 할 부분과 달라질 부분을 정리해보면…

같아야 할 부분

  1. 각종 수학 함수들
  2. 전역변수

달라져야 할 부분

  1. buffer(buffer, zBuffer)들의 선언방식
  2. 컬러를 넣기 위한 부분

이 점에 유의하며 옮겨보았다.

3. Python으로 변경

Link : 여기에서 코드 전문 확인

이걸 옮기면서 크게 바뀌는 부분은 없었기에 딱히 어렵진 않았다.

굳이 어려웠던 부분을 꼽자면 bufferzBuffer가 무엇을 뜻하는 것인지 헤맨 부분인데, 아무래도 이걸 말하는 것 같았다.

그럼에도 달라진 부분을 소개하자면 원본 코드의 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. 결과

꽤나 잘 돌아간다. 각 면에 색도 잘 입혀졌고, 뒷면이 보이는 부분을 더 잘 볼 수 있어서 큐브에 입체감을 더해주는듯.

원래대로라면 뒷면이 아예 안보여야 정상이지만, 코드 상에서 앞면 픽셀 위치와 뒷면 픽셀 위치가 완전하게 커버되지는 않는 모양이다.

아무튼 생각보다 잘 돼서 기분이 좋았다.



이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.