2015-12-12 5 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); 

Моя цель состоит в том, чтобы сократить число переменных я использую в моей программе, чтобы очистить его немного. Поскольку он сидит так, как я опубликовал его, формулы работают. Если я заменил «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)) ", где говорится" дм "в" двойных радах ", формула больше не работает. Это не имеет смысла. – Orthometric