問題一覧 > 通常問題

No.760 Where am I moved to?

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

問題文

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

海には、決して動かない$2$本の杭が刺さっています。
杭$1$は世界座標系で$(x_{11},y_{11})$にあり、杭$2$は世界座標系で$(x_{12},y_{12})$にあることがわかっています。

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

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

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

入力

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

$x_a, y_a \theta_a$: 以前の自分の(船の)世界座標および向き(小数)
$x_{11} \cdots y_{12}$: $2$つの杭の世界座標(小数)
$x_{21} \cdots y_{22}$: 現在の$2$つの杭の(見かけ上の)世界座標(小数)
杭$1$と杭$2$は区別できる。
杭$1$と杭$2$の位置は異なる。

$0^{\circ} \le \theta_a \le 360^{\circ}$
$-10000 \le x_a, y_a, x_{11} \cdots y_{22} \le 10000$

$(x_{11}, y_{11})$と$(x_{12}, y_{12})$とのユークリッド距離、および$(x_{21}, y_{21})$と$(x_{22}, y_{22})$とのユークリッド距離は、(少なくとも1e-9の精度で)等しい

出力

xb yb θb

$x_b, y_b, \theta_b$: 現在の自分の(船の)世界座標および向き(小数)

「現在の自分の座標及び向き」に自分が移動したとする場合の$(x_{11}, y_{11}), (x_{12}, y_{12})$の新しい見かけ上の座標と、$(x_{21}, y_{21}), (x_{22}, y_{22})$の座標が、それぞれユークリッド距離が1e-5未満の場合に正解とします。$\theta_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もしくは右上の雲マークをクリックしてアカウントを作成してください。