問題一覧 > 通常問題

No.760 Where am I moved to?

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / スペシャルジャッジ問題 (複数の解が存在する可能性があります)
タグ : / 解いたユーザー数 24
作問者 : ciel / テスター : はむこ
0 ProblemId : 2523 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2018-12-08 10:25:09

問題文

以前、あなたは海に浮かぶ船に乗っていました。
船は、世界に固定されたXY座標系(世界座標系)から見て点(xa,ya)にいて、向きθaを向いていたことがわかっています(向きは数学の極座標での向きと同様)。
船にも、船に固定されたXY座標系(船座標系)が設置されており、船座標系は船の向きをX軸としたXY座標系です。
船座標系は、船が動くと一緒に動きます。

海には、決して動かない2本の杭が刺さっています。
1は世界座標系で(x11,y11)にあり、杭2は世界座標系で(x12,y12)にあることがわかっています。

船には、杭の位置を船座標系で計測する機器が取り付けられています。
この機器を使うことで、船座標系から見た杭1の座標と杭2の座標を得ることができます。

以前から、少し時間が経って船が流されたので、自分の位置がわからなくなってしまいました。
そこであなたは、まだ船が以前の位置と向きにいると仮定して、「杭の見かけ上の世界座標」を以下の情報から計算しました。
・以前いた船の位置
・船に取り付けられた機器から得た、杭1と杭2の座標
1、杭2の「杭の見かけ上の世界座標」は、それぞれ(x21,y21)(x22,y22)でした。

あなたは、「杭の見かけ上の世界座標」と実際の杭の座標を比較することで、今の船の位置を計算することに気づきました。
現在の船の、世界座標系から見た位置(xb,yb)および、向きθbを計算してください。

入力

xa ya θa
x11 y11
x12 y12
x21 y21
x22 y22

xa,yaθa: 以前の自分の(船の)世界座標および向き(小数)
x11y12: 2つの杭の世界座標(小数)
x21y22: 現在の2つの杭の(見かけ上の)世界座標(小数)
1と杭2は区別できる。
1と杭2の位置は異なる。

0θa360
10000xa,ya,x11y2210000

(x11,y11)(x12,y12)とのユークリッド距離、および(x21,y21)(x22,y22)とのユークリッド距離は、(少なくとも1e-9の精度で)等しい

出力

xb yb θb

xb,yb,θb: 現在の自分の(船の)世界座標および向き(小数)

「現在の自分の座標及び向き」に自分が移動したとする場合の(x11,y11),(x12,y12)の新しい見かけ上の座標と、(x21,y21),(x22,y22)の座標が、それぞれユークリッド距離が1e-5未満の場合に正解とします。θbを0°以上360°以下に収める必要はありません。

サンプル

サンプル1
入力
0 0 90
0 1
-1 1
1 0
1 1
出力
0 0 180

1が(0,1)から(1,0)、杭2が(-1,1)が(1,1)に移動したように見えるためには、船座標を上を+x、左を+yにするように座標軸を設定すればよいです。そのような座標系を作るには自分をさらに90°回転させればよいです。
0.0 0.0 180.0でも正解です。

サンプル2
入力
1 2 0
3 3
4 4
2 2
3 3
出力
2 3 0

1(3,3)(2,2)に、杭2(4,4)(3,3)に移動したようにするには、船座標を原点が世界座標の(1,1)を通るように座標軸を書けばよいです。そのような座標系を作るには自分をx+1,y+1すればよいです。

サンプル3
入力
1 1 90
2 1
2 0
0 -3
-1 -3
出力
-2 2 180

回転と平行移動を組み合わせるとこのようになります。

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。