summaryrefslogtreecommitdiff
path: root/cube.py
blob: 1b1358669ff572111b13de0c220e8adc2fd997a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import math
import time

# Определение вершин куба
vertices = [
    [-1, -1, -1],
    [-1, 1, -1],
    [1, 1, -1],
    [1, -1, -1],
    [-1, -1, 1],
    [-1, 1, 1],
    [1, 1, 1],
    [1, -1, 1]
]

# Определение ребер куба
edges = [
    [0, 1],
    [1, 2],
    [2, 3],
    [3, 0],
    [4, 5],
    [5, 6],
    [6, 7],
    [7, 4],
    [0, 4],
    [1, 5],
    [2, 6],
    [3, 7]
]

# Определение угла вращения куба
theta = 0

while True:
    # Очистка экрана
    print("\033c", end="")

    # Изменение угла вращения
    theta += 0.05

    # Создание матрицы вращения
    rotation_matrix = [
        [math.cos(theta), -math.sin(theta), 0],
        [math.sin(theta), math.cos(theta), 0],
        [0, 0, 1]
    ]

    # Применение матрицы вращения к вершинам куба
    rotated_vertices = []
    for vertex in vertices:
        rotated_vertex = [0, 0, 0]
        for i in range(3):
            for j in range(3):
                rotated_vertex[i] += rotation_matrix[i][j] * vertex[j]
        rotated_vertices.append(rotated_vertex)

    # Проекция вершин на экран
    projected_vertices = []
    for vertex in rotated_vertices:
        x = int(vertex[0] * 10 / vertex[2] + 50)
        y = int(vertex[1] * 10 / vertex[2] + 25)
        projected_vertices.append([x, y])

    # Отрисовка ребер куба
    for edge in edges:
        start = projected_vertices[edge[0]]
        end = projected_vertices[edge[1]]
        print(f"\033[{start[1]};{start[0]}H+", end="")
        print(f"\033[{end[1]};{end[0]}H+")

    # Ожидание
    time.sleep(0.05)