ABC108 B問題 : Ruined Square

問題. Ruined Square

平面上に正方形があり,頂点は時計回りに  p_1, p_2, p_3, p_4 である. p_1, p_2 が与えられたときに  p_3, p_4 を答えよ.

解法. 回転行列

ベクトル  v = (x, y) と 2次元正方行列  R(\theta) = \left(\begin{array}{cc} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \end{array}\right) に対して, R(\theta) v v を原点中心の半時計回りに  \theta 回転したベクトルとなる. R(\theta) は回転行列と呼ばれている.今回の問題では正方形の内角である  R(\pi / 2) の計算が必要となり,
  R(\pi / 2)v = \left(\begin{array}{cc} 0 & -1 \\ 1 & 0 \end{array} \right)  \left( \begin{array}{c} x \\ y \end{array} \right) = \left(\begin{array}{c} -y \\ x\end{array}\right)
となる.
よって,頂点  p_i = (x_i, y_i)\, (i = 1, 2, 3, 4) は回転行列を用いて,
  p_i = R(\pi / 2) (p_{i - 1} - p_{i - 2}) + p_{i-1} = (x_{i - 1} - y_{i - 1} + y_{i - 2}, x_{i - 1} - x_{i - 2} + y_{i - 1})
となる.
ちなみに, p_1, p_2 が整数点ならば上の式から  p_2, p_3 も整数点である.

計算時間 O(1)

まとめ

軸並行な正方形と勘違いしていた.