【ABC197 D】「Opposite」を解く【Python3】

「AtCoder」解説一覧へ

p0……pn-1 のN個の頂点からなる正N角形の、p0 と pn/2 の座標が与えられたとき、p1 の座標を求める問題です。

提出
import math

n = int(input())
x0, y0 = map(int, input().split())
xm, ym = map(int, input().split())

xc = (x0+xm)/2
yc = (y0+ym)/2

rag= math.atan2(y0-yc, x0-xc)+2*math.pi/n
r = math.sqrt((x0-xc)**2+(y0-yc)**2)

x1 = xc+r*math.cos(rag)
y1 = yc+r*math.sin(rag)

print(x1, y1)

まず、与えられた p0 と pn/2 から、正N角形の中心点を求めます。

その中心点から p0 に向けて、どの方向でどれくらいの大きさのベクトルが伸びているのかを調べます。

「math.atan2(y0-yc, x0-xc)」でθ0が分かります。θ1は、これに 2π/N を足したものであるため、「2*math.pi/n」を計算で足します。

ベクトルの大きさは √(x0-xc)2+(y0-yc)2 で計算できます。

ここまでの計算で、中心点から p1 に向けて、どの方向(θ1)でどれくらいの大きさ(r)のベクトルが伸びているのかが分かりました。

後は、sin、cos を用いて、座標を計算します。

最終的には、原点からの座標を求めたいので、中心点の座標(xc, yc)を足したものが答えになります。

【ABC197】解説記事リスト

「AtCoder」解説一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です