狐の嫁入りっていいよね

理系と芸術系になりそなった文系卒、コンピュータグラフィックスを学ぶ

Pythonを使って二次元座標で任意の点を回転させた

前提

CG-ARTS協会(2015)『コンピュータグラフィックス』の2-1 二次元座標変換の回転 p23がよくわからず、理解の足しになると思いPythonで書いてみた(がいまだによくわかっていない)

コンピュータグラフィックス [改訂新版]

コンピュータグラフィックス [改訂新版]

以下の数式は、二次元直交座標系の点(x,y)を、原点(0,0)を軸として反時計回りに角度θ分回転する式。回転後の座標は点(x',y')になる。

x' = xcosθ - ysinθ

y' = xsinθ + ycosθ

CGソフトでオブジェクトを回転(rotation)するときはこの式が使われる。

今思えば、「なぜこの式になるのか」が問題だったので、コードを書くよりこの式の証明やっておけばよかったと思った...。 ちなみにnumpyとmatplotlibを使うのはほぼ初めて。

出力

横軸をx、縦軸をyとする二次元直交座標系に点(2,0) (2,2)(4,0)(4,2)を取り、原点(0,0)を軸として、これらの点すべてを反時計回りにθ = 45°分回転させた。

変換前の点を青で、変換後の点を赤でプロットしている。

f:id:lipton_lemontea:20180506162357p:plain

コード

所感

プログラミング書く前にやることを前倒しで徹底的に紙に書いたら大分捗った。 次からはこうしよう。