ABC197_D
Table of Contents
AtCoder Beginner Contest 197 D
お題
多角形の頂点を求める問題。
ポイント
とりあえず、最初に思いついたのが中心を求めて、回転だったのでその方針でいく。
中心は、与えられた2点の中点で出る。
中心が原点に来るように平行移動させて、回転して、もとの位置に平衡移動で戻す。
とりあえず、回転させるには行列を使った方がやりやすいので、numpy先生の登場。
matrixはインデックス[0], [1]ではなくitem(0), item(1)で値を取るのをいつも忘れる。
解答
import numpy as np
import math
def main():
N = int(input())
p0 = np.matrix(tuple(map(int, input().split()))).reshape((2,1))
ph = np.matrix(tuple(map(int, input().split()))).reshape((2,1))
pi = math.pi
c = (p0 + ph) / 2
_p0 = p0 - c
_p0 = np.matrix(_p0)
cos = math.cos(2 * pi/N)
sin = math.sin(2 * pi/N)
trans = np.matrix([
[cos, -sin],
[sin, cos],
])
ans = trans * _p0
ans += c
ans = ans.reshape((1,2))
print(ans.item(0), ans.item(1))
if __name__ == '__main__':
main()