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

コンテスト一覧へ

 

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】解説記事リスト

コンテスト一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。