Код IT
← Каталог

Векторная графика — Разбор на Python — поворот и сдвиг в 2D

Фрагмент из «Векторная графика»: Разбор на Python — поворот и сдвиг в 2D.

python spinoffencyclopedia9-08-kompyuternaya-grafika-12 embed URL статья в энциклопедии
Python main.py

import math

angle = math.pi / 4  # 45°
cos_a, sin_a = math.cos(angle), math.sin(angle)

# Поворот вокруг начала координат
R = [
    [cos_a, -sin_a, 0],
    [sin_a,  cos_a, 0],
    [0, 0, 1],
]
# Сдвиг
T = [
    [1, 0, 10],
    [0, 1, 20],
    [0, 0, 1],
]

def mul3(A, B):
    return [[sum(A[i][k] * B[k][j] for k in range(3)) for j in range(3)] for i in range(3)]

def mul3v(M, p):
    return [sum(M[i][j] * p[j] for j in range(3)) for i in range(3)]

M = mul3(T, R)
p = [1, 0, 1]  # точка (1, 0)
x, y, w = mul3v(M, p)
print(round(x / w, 2), round(y / w, 2))  # новые координаты

import math

angle = math.pi / 4  # 45°
cos_a, sin_a = math.cos(angle), math.sin(angle)

# Поворот вокруг начала координат
R = [
    [cos_a, -sin_a, 0],
    [sin_a,  cos_a, 0],
    [0, 0, 1],
]
# Сдвиг
T = [
    [1, 0, 10],
    [0, 1, 20],
    [0, 0, 1],
]

def mul3(A, B):
    return [[sum(A[i][k] * B[k][j] for k in range(3)) for j in range(3)] for i in range(3)]

def mul3v(M, p):
    return [sum(M[i][j] * p[j] for j in range(3)) for i in range(3)]

M = mul3(T, R)
p = [1, 0, 1]  # точка (1, 0)
x, y, w = mul3v(M, p)
print(round(x / w, 2), round(y / w, 2))  # новые координаты