再現する総旅客ニンニク39270.AngelのJourney-簡単な計算幾何学((2019 ACM-ICPC中国Shannxi省プログラミングコンテストC.)2019ICPC西安インビテーショナルトーナメントサイトのゲーム

天使の旅

 

「Miyane!」花は再び助けを都に要求し、この日。花は文化祭のステージショーに天使の役割を果たし、そして彼女は彼女の人間の友達、日向を探すために起こっています。そこで彼女は、日向の家への最短経路を見つける必要があります。

天使たちが住んでいる地域は円形で、ハナは、この円の一番下に住んでいます。円の中心の座標である場合には、手段  (RX、RY) RのX RのY )、その半径が  RのR、ハナがで生きる  - (R RX、RY) R X RのY - R )。

どうやら、この旅には多くの困難があります。円の外側およびラインの下の両方に配置されている領域  Yが= RY Y = R ハナがこの領域を通過することができないので、yは、海です。そして、円の内側の領域は、天使たちの聖地である、花はどちらも、この領域を渡すことはできません。

しかし、都は、いずれかの最短経路の長さを計算することができません。世界で最も美しい花のために、彼女はこの問題を解決する助けてください!

入力

各テストファイルには、いくつかのテストケースが含まれています。各テストファイルで:

最初の行は、単一の整数含ま  T(1 \ルT \ル500)T 1 T 5 0 0 テストケースの数です)。

各テストケースは、5つの整数を持つ唯一の行含ま:中心座標  のRX のR X、  RYのRのY、半径  RのRは、日向の家のthecoordinates  XのX、 Y 、Y。 テストデータを保証することを  Y> RYのY > Rのy及び  (X、Y) X Yは)円の外にあります。 (-10 ^ 2 \ルRX、RY、X、Y \ル^ 2.0 10 <R \ル^ 2 10) - 1 0 2 のR X RのY X Y 1 02 0 < R 1 0 2 )。

出力

各テストケースについて、あなたは(保管してくださいあなたの答えを持つ1行を印刷する必要があります  4 小数点以下4桁)を。

サンプル入力

2 
1 1 1 2 2 
1 1 1 1 3

サンプル出力

2.5708 
3.8264

 

 

質問の意味は、ラウンドを与える円の底部から求め、円正中位置上記外側の円からの最短距離です。

ゲーム、曲がっボードセットは、手計算を直接見ることができます。

 

コード:

1  // C-単純な幾何学的計算
2の#include <ビット/ STDC ++ H.>
 3。 使用した 名前空間STD;
 4。 typedefのロング ロングLL;
 5。 のconst  int型 MAXN 1E5 + = 10 ;
 6。 CONST  ダブル PI = ACOS( - 1.0 。7  
。8  のint main()の
 9  {
 10      INT T;
 11      scanfの(" %のD "、&T)、
 12は     、一方(T-- ){
 13は         ダブルRX、RY、R、X、Y。
14          のscanf(" %LF%LF%LF%LF%LF "、&​​RX、およびRY、&R、およびX&Y)。
15          ダブル長さ= 0.0 16          であれば((X <= RX-R)||(X> = RX + R)){
 17              であれば(X <= RX- R){
 18                  の長さ+ = SQRT((X-(RX-R))*(X - (RX-R))+(Y-RY)*(Y- RY))。
19                  長さ+ = 0.5 * PIの*のR。
20              }
 21              {
 22                  の長さ+ = SQRT((X-(RX + R))*(X-(RX + R))+(Y-RY)*(Y- RY))。
23                 長さ+ = 0.5 * PI * R。
24              }
 25          }
 26          {
 27              ダブル D = SQRT((X-RX)*(X-RX)+(Y-RY)*(Y- RY))。
28              ダブル交通;
29              であれば(!X = RX){
 30                  ダブル COSR = ABS(X-RX)/ D。
31                  交通= ACOS(COSR)-acos(R / D)。
32              }
 33              {
 34                  交通= 0.5 * PI-ACOS(R / D)。
35              }
 36             交通+ = 0.5 * PI。
37              長さ+ =交通の*のR。
38              長さ+ = SQRT(D *ののDR *のR)
39          }
 40          のprintf(" %.4fする\ n " 、長さ)。
41      }
 42 }

 

おすすめ

転載: www.cnblogs.com/ZERO-/p/11283278.html