2015-12-12 24 views
0

下面是代碼:度分秒爲弧度公式不工作

double r = Double.parseDouble(radius.getText().toString()); 
       double del = Double.parseDouble(delta.getText().toString()); 


       double dm = ((int)((del - ((int)del)) * 100)); 

       double rads = (((int)del) + (dm/60) + (((((del - ((int)del)) * 100) - ((int)((del - ((int)del)) * 100))) * 100)/3600)) * (Math.PI/180); 

       String t = String.valueOf(r * (Math.tan(rads/2))); 
       String c = String.valueOf(2* r* (Math.sin((rads/2)))); 
       String m = String.valueOf(r*(1- Math.cos((rads/2)))); 
       String a = String.valueOf(2*Math.PI*r*((((int)del) + (dm/60) + (((((del - ((int)del)) * 100) - ((int)((del - ((int)del)) * 100))) * 100)/3600))/360)); 

       tangent.setText(t); 
       arc.setText(a); 
       chord.setText(c); 
       mid.setText(m); 

我的目標是降低的,我用我的程序來清理了一下變量的數目。因爲它符合我發佈它的方式,所以公式就可以工作。如果將雙「rads」中的「dm」替換爲「((int)((del - ((int)del))* 100))」的當前值,則公式不再有效。它與「/ 60」有關。我試過不同的支架情況,只是似乎沒有工作。我已經在公式的其他部分替換了「dm」,並且它仍然有效,它只是在一個位置。有任何想法嗎?

+0

作爲一個例子,我將使用60d25'25'時,「DM/60應該轉換25' 成十進制度......所以就等於0.416666666 – Orthometric

+0

什麼語言?還修復了帖子中的代碼格式。 – ja72

+0

該語言是Java,我正在創建一個Android應用程序。 – Orthometric

回答

2

您的代碼很難閱讀。這是你掙扎的原因之一。

我會寫這樣說:

package misc; 

/** 
* Created by Michael on 12/12/2015. 
* @link https://stackoverflow.com/questions/34236175/degrees-minutes-seconds-to-radians-formula-not-working 
*/ 
public class AngleConverter { 

    public static void main(String[] args) { 
     double degrees = (args.length > 0) ? Double.valueOf(args[0]) : 0.0; 
     double minutes = (args.length > 1) ? Double.valueOf(args[1]) : 0.0; 
     double seconds = (args.length > 2) ? Double.valueOf(args[2]) : 0.0; 
     double radians = convertDegreesToRadians(degrees, minutes, seconds); 
     System.out.println(String.format("degrees: %10.6f", degrees)); 
     System.out.println(String.format("minutes: %10.6f", minutes)); 
     System.out.println(String.format("seconds: %10.6f", seconds)); 
     System.out.println(String.format("radians: %10.6f", radians)); 
     System.out.println(String.format("degrees: %10.6f", Math.toDegrees(radians))); 

    } 

    public static double convertDegreesToRadians(double degrees, double minutes, double seconds) { 
     double angle = degrees + minutes/60.0 + seconds/3600.0; 
     return Math.toRadians(angle); 
    } 
} 
0

比方說,你有d m s度,分,秒。鑑於

60 minutes = 1 degree 
60 seconds = 1 minute 

我們得到了由d m s代表度總數爲

deg = d + m/60 + s/60^2 

現在是轉換deg度弧度的問題。但

360 degrees = 2*Pi radians 

所以,

1 degrees = (2*Pi/360) radians 

deg degrees = deg * (2*Pi/360) radians 

彙總,得到的答覆是

(d + m/60 + s/60^2) * 2 * Pi/360 

可以將它改寫爲

((s/60 + m)/60 + d)/60 * Pi/3 
+0

我使用的公式確實有效。作爲使用計算器的測量員,我們通常將DMS輸入作爲dd.mmss輸入。我擁有的方式是將字符串「dd.mmss」並將其轉換爲「dd.dddd」然後轉換爲弧度。 – Orthometric

+0

我的公式中的「dm」等於你的「m」值,我試圖將它除以60.但是,當我將其替換爲「double dm =((int)((del - ((int)del))時, * 100))「在」double rads「中表示」dm「的地方,公式不再起作用。這是沒有意義的。 – Orthometric