Pythonの座標変換について

Python,イメージ

AI実装検定のご案内

Pythonにおける座標変換(coordinate transformation)は、グラフィックス、画像処理、物理シミュレーション、地図データ処理など、さまざまな分野でよく使われる概念です。

ここでは、初心者にも分かりやすく、2次元座標系を使った基本的な変換方法を中心に解説します。

目次

座標変換とは

座標変換とは、「ある座標系で表現された点を、別の座標系での位置に変換する」ことを指します。

たとえば

  • 左上が原点の画像の座標系 → 中心が原点の数学的な座標系
  • 回転や拡大縮小を適用した座標に変換
  • 緯度経度 → 平面直角座標

よく使う2D座標変換の種類

以下は、2D(x, y)座標における基本的な変換の一覧です。

種類内容
平行移動座標を一定量だけ移動する
回転原点や任意の点を中心に回転
拡大・縮小倍率をかけてスケーリングする
アフィン変換上記すべてを含む線形変換 + 移動

Pythonコードで学ぶ座標変換(基本編)

平行移動(Translation)

def translate(x, y, dx, dy):
    return x + dx, y + dy

# 例: (10, 5) を x方向に3, y方向に-2移動
print(translate(10, 5, 3, -2))  # → (13, 3)

回転(Rotation)

import math

def rotate(x, y, angle_degrees, ndigits=6):
    angle_radians = math.radians(angle_degrees)
    cos_a = math.cos(angle_radians)
    sin_a = math.sin(angle_radians)
    x_new = x * cos_a - y * sin_a
    y_new = x * sin_a + y * cos_a
    return round(x_new, ndigits), round(y_new, ndigits)

print(rotate(1, 0, 90))  # → (0.0, 1.0)

拡大・縮小(Scaling)

def scale(x, y, sx, sy):
    return x * sx, y * sy

# 例: (2, 3) をx2倍, y0.5倍
print(scale(2, 3, 2, 0.5))  # → (4, 1.5)

座標変換をまとめて行う(アフィン変換)

座標変換は行列を使って連続して適用することもできます。

NumPyを使ってアフィン変換

import numpy as np

# アフィン変換行列(3x3)
def affine_transform(point, matrix):
    x, y = point
    vector = np.array([x, y, 1])  # 同次座標に変換
    result = matrix @ vector
    return result[0], result[1]

# 例:回転 + 平行移動
angle = 45
theta = np.radians(angle)
cos_a = np.cos(theta)
sin_a = np.sin(theta)

# 回転 + 移動行列
affine_matrix = np.array([
    [cos_a, -sin_a, 100],  # x方向に100移動
    [sin_a,  cos_a, 50],   # y方向に50移動
    [0,      0,     1]
])

point = (10, 0)
print(affine_transform(point, affine_matrix))  # → 変換された新しい座標

よく使われるライブラリ

ライブラリ用途
NumPy行列による変換処理
OpenCV画像処理での座標変換(cv2.warpAffineなど)
matplotlib座標変換の可視化
pyproj緯度経度などの地理座標系の変換

補足:座標変換は順番が重要!

複数の変換を行う場合、「どの順に変換をかけるか」が結果に大きく影響します。

  • 例:回転→移動 と 移動→回転 では全く異なる座標になる
  • 行列として掛け合わせる場合も、順番に注意

まとめ

Python,イメージ
ポイント説明
座標変換とは点の位置を別の座標系や操作後の位置に変換すること
代表的な変換平行移動、回転、拡大・縮小、アフィン変換
実装はNumPyが便利行列操作で効率的に複雑な変換を一度に行える
OpenCVやpyprojも便利画像処理や地理データには専用ライブラリがある
順番に注意複数変換をするときは順序が結果を左右する

以上、Pythonの座標変換についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次