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()





kokardy avatar
kokardy
a pharmacist and a software engineer