2Dグラフィックスにおける回転の実装方法


  1. ベクトルの回転: 2Dグラフィックスにおける回転は、通常、ベクトルの回転によって実現されます。ベクトルの回転は、行列の乗算や三角関数を使用して行うことができます。以下に、Pythonでの一般的な回転関数の例を示します。
import math
def rotate_vector(vector, angle):
    # 角度をラジアンに変換
    rad = math.radians(angle)

    # 回転行列の計算
    cos_theta = math.cos(rad)
    sin_theta = math.sin(rad)
    rotation_matrix = [[cos_theta, -sin_theta], [sin_theta, cos_theta]]

    # ベクトルの回転
    rotated_vector = [rotation_matrix[0][0] * vector[0] + rotation_matrix[0][1] * vector[1],
                      rotation_matrix[1][0] * vector[0] + rotation_matrix[1][1] * vector[1]]

    return rotated_vector
# 使用例
vector = [1, 0]  # (1, 0)のベクトル
angle = 45  # 回転角度(度)
rotated_vector = rotate_vector(vector, angle)
print(rotated_vector)  # 出力: [0.7071067811865476, 0.7071067811865475]
  1. オブジェクトの回転: グラフィックスのオブジェクトを回転させる場合は、各頂点を回転させる必要があります。以下に、PythonのPygameライブラリを使用してオブジェクトの回転を行う例を示します。

import pygame
import math

# Pygameの初期化
pygame.init()

# 画面の設定
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("2D Graphics Rotation")

# オブジェクトの頂点リスト
vertices = [(100, 100), (200, 100), (200, 200), (100, 200)]

# 回転の中心座標
rotation_center = (screen_width // 2, screen_height // 2)

# 回転角度(度)
angle = 45

# メインループ
running = True
while running:
    screen.fill((0, 0, 0))  # 画面を黒でクリア

    # オブジェクトの回転
    rotated_vertices = []
    for vertex in vertices:
        # 回転前の座標を回転中心に基準して移動
        translated_vertex = (vertex[0] - rotation_center[0], vertex[1] - rotation_center[1])

        # 回転
        rad = math.radians(angle)
        cos_theta = math.cos(rad)
        sin_theta = math.sin(rad)
        rotated_x = cos_theta * translated_vertex[0] - sin_theta * translated_vertex[1]
        rotated_y = sin_theta * translated_vertex[0] + cos_theta * translated_vertex[1]

        # 回転後の座標を元の位置に戻す
        rotated_vertex = (rotated_x + rotation_center[0], rotated_y + rotation_center[1])
        rotated_vertices.append(rotated_vertex)

    # 回転後のオブジェクトを描画
    pygame.draw.polygon(screen, (255, 255, 255), rotated_vertices)

    pygame.display.flip()  # 画面を更新

   この例では、PythonのmathモジュールとPygameライブラリを使用しています。最初の例では、ベクトルの回転を行う関数を定義し、角度とベクトルを指定して回転後のベクトルを計算します。2つ目の例では、Pygameを使用して画面を作成し、オブジェクトの頂点を回転させて描画します。

これらのシンプルなコード例を参考にして、2Dグラフィックスにおける回転を実装する方法を学ぶことができます。また、回転行列や三角関数の理解を深めることもできます。