👌

127. 一次変換の逆変換

2023/03/22に公開

【問題概要】
2次元平面上の点を一次変換(平行移動、回転、拡大縮小)によって別の点に移動させる操作を行った結果の座標と、その一次変換の逆変換を求めるプログラムを実装せよ。

【解説】
一次変換によって移動された点の座標は、以下のように表されます。

(x', y') = (a11x + a12y + b1, a21x + a22y + b2)

ここで、(x, y)は移動前の点の座標、(x', y')は移動後の点の座標、a11, a12, a21, a22は変換行列の係数、b1, b2は平行移動の係数です。

逆変換を求めるためには、上記の式を逆に解いて、(x, y)を(a11, a12, a21, a22, b1, b2)の係数から求める必要があります。具体的には、以下の式を解くことで(x, y)を求めます。

a11x + a12y + b1 = x'
a21x + a22y + b2 = y'

この式を解くためには、行列の逆行列を求める必要があります。ただし、逆行列が存在しない場合もあります(行列式が0の場合など)。

【関連するAtcoderの例題】
「Inversion Transformation」
https://atcoder.jp/contests/abc189/tasks/abc189_f
レーティング難易度(★): 7
ACした回答者に絞った場合のレーティング帯の範囲(数値): 2037 - 3497
レーティング難易度(%): 21.97%
レーティング(数値): 2733
AC率(%): 32.25%
ACしたスコアの高い回答者: kojingharang, hibike
解説ブログ: https://www.planeta.tokyo/abc189f-inversion-transformation/

Discussion