close
題目概要:
計算出2顆衛星的距離(直線距離、弧長)。
解題方向:
1.兩顆衛星的直線距離:直用正弦定理或餘弦定理去解即可。
2.兩顆衛星的弧長:直接用弧長公式去解即可。
注意事項:
1.當角度(deg)超過180度時需要用360去減掉。
2.範例程式碼中使用餘弦定理,式子已經有簡化過。不過用正弦會方便很多。
3.記得加上地球半徑(r+s),不要直接拿衛星離地表的距離(s)當作半徑去算。
4. 1(min)=60(deg)
5.min轉換成deg要注意,如果你是直接把轉換後的結果放到第2個參數上,那麼第2個參數的型態記得要是float/double,否則答案會錯。
//這樣打是錯誤的!!!!!
while(sc.hasNext()){
int s=sc.nextInt();
int a=sc.nextInt(); //第2個參數
String type=sc.next();
if(type.equals("deg")){
a=Math.min(360-a,a);
}else{
a/=60; //這裡會有小數點,所以轉換出來結果不是正確的,連帶輸出的答案也是錯誤的!!
}
//省略...
}
6.在瘋狂程設中換行要\r\n,Uva Online Judge則只需要\n就好。如果不想換一個平台就要改換行的格式,那就先印出結果,印完後再用System.out.println()做換行即可。
7.Java的Math.cos()帶入的參數單位為弧度,所以要自己把角度(deg)轉成弧度才能帶入。
程式碼:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
*Java | |
*Author:SHEN,ZHI-XUN | |
*Time:2017/9/19 | |
*/ | |
import java.util.Scanner; | |
class main{ | |
public static void main(String args[]){ | |
final int r=6440; | |
Scanner sc=new Scanner(System.in); | |
while(sc.hasNext()){ | |
int s=sc.nextInt(); | |
double a=sc.nextInt(); | |
String type=sc.next(); | |
if(type.equals("deg")){ | |
a=Math.min(360-a,a); | |
}else{ | |
a/=60; | |
} | |
double arc=2*Math.PI*(s+r)*a/360; | |
double chord=Math.sqrt(2*Math.pow(s+r,2)*(1-Math.cos(a*Math.PI/180))); | |
System.out.printf("%.6f %.6f",arc,chord); | |
System.out.println(); | |
} | |
} | |
} |
文章標籤
全站熱搜