Форум программистов, компьютерный форум CyberForum.ru

Интересная задача с географическими координатами и идеальным поездом передвигающимся от силы гравитации - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Обращение к функциям Диспетчера устройств http://www.cyberforum.ru/cpp/thread710729.html
Доброго времени суток. Ищу статьи или примеры по работе с диспетчером устройств :) Есть ли у кого ни будь таковые ?)) Если конкретней, то нужно найти конкретное устройство в списке, выполнить его удаление, и запустить plug and play для автоматической установки только что удаленного устройства.
C++ Работа со звуком Доброго времени суток. Подскажите, какой библиотекой лучше всего воспользоваться для записи звука, и последующей его обработки (Воспроизведение, построение спектра и т.д. и т.п.) http://www.cyberforum.ru/cpp/thread710524.html
Для заданной области составить программу C++
Для заданной области составить программу
Программа для примера C++
Написать программу для примера http://www.cyberforum.ru/attachment.php?attachmentid=205548&d=1353930741 Добавлено через 2 часа 6 минут #include <iostream.h> int main() {float m,n,z1; cin>>m>>n; if(m+n<0)
C++ Триангуляция http://www.cyberforum.ru/cpp/thread707940.html
Задан многоугольник координатами своих вершин вдоль обхода его контура. Требуется указать множество непересекающихся во внутренних точках диагоналей, разбивающих многоугольник на треугольники. Вход: файл input.txt, , в первой строке которого записано число N – количество вершин многоугольника, потом в N строках пары целых чисел – координат вершин многоугольника в порядке обхода контура. ...
C++ Посоветуйте аналог Borland c++ Знаю ,что аналог является Вижуал Бэйзик ,а есть какие-нибудь еще современные аналоги? Какие бесплатные аналоги есть? подробнее

Показать сообщение отдельно
Mupok
4 / 4 / 0
Регистрация: 24.07.2012
Сообщений: 76

Интересная задача с географическими координатами и идеальным поездом передвигающимся от силы гравитации - C++

01.12.2012, 06:49. Просмотров 2109. Ответов 11
Метки (Все метки)

Всем доброго времени суток.

С дублировал тему так как на форуме явы народа почти нет. Да и по больше части меня интересуют формулы и алгоритм.

У меня имеется интересная задачи в которой не могу полностью разобраться.
Даны вот такие значения:
open

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
   public final static double      
       G = 6.6742E-11,     // [m^3 sec^-2 kg^-1] gravity constant             
       R = 6.378E6,        // [m]        planet Earth radius 
       M = 5.974E24,       // [kg]       planet Earth mass 
       g = G*M/(R*R),     // [m sec^-2] gravity acceleration on surface  
       V = PI*4/3*R*R*R,  // [m^3]      sphere volume 
       w = M/V;           // [kg m^-3]  density
     
   public final static String[] locus = {
       "90°  0' 0     \"N    14°  23' 20.49 \"E ",    //0  North pole
       "20°           \"E    90°  0'        \"S ",    //1  South pole
       "50°  6' 19.45 \"N    14°  23' 20.49 \"E ",    //2  Menza CVUT - vchod
       "50°  6'  8.90 \"N    14°  23' 33.84 \"E ",    //3  FEL Dejvice - vchod                   
       "50°  4' 45.134\"N    14°  25' 50.071\"E ",    //4  Nar. Muzeum, Praha
       "50°  4' 45.134\"S   165°  34' 39.929\"W ",    //5  Nar. Muzeum protinoha                  
       "51° 30' 45.49 \"N     0°  07' 17.15 \"W ",    //6  Brit. Museum, London
       "37° 52' 17.40 \"N   122°  15' 56.77 \"W ",    //7  Univ. Berkeley Calif.
       "36° 51' 00.84 \"S   174°  46' 09.21 \"E ",    //8  Univ. Auckland,  NZ
       "31° 14' 12.44 \"N   121°  30' 09.77 \"E ",    //9  The Opener, ShangHai
       "37° 47' 41.78 \"N   122°  24' 08.85 \"W ",    //10 The Needle, SF/Calif. 
       "22° 24' 08.85 \"W    57°  47' 41.78 \"N ",    //11 Point A
       "47° 47' 41.78 \"N    22°  24' 08.85 \"W ",    //12 Point B

То есть, даны постоянные известные значения, как радиус планеты, вес, гравитация, плотность и т.п.
Также даны примеры координат мест на планете.
Задача состоит в том, что между двумя любыми точками(которые задаются по формату как написано выше) нужно найти дистанцию прямую, по земле, и максимальную глубину туннеля - это первая фаза.
Вторая фаза:
Идеальный поезд нулевой длины в начале туннеля имеет нулевую скорость. Ускоряется он только при помощи земной гравитации. Надо рассчитать время за которое он проедет весь туннель, его максимальную и среднюю скорости.
Использовать нужно единицы измерения системы си(радианы, метры, секунды, килограммы).

Впопыхах я начал писать программу на яве. Начал с малого, т.е. считывание со стринговского поля конкретную числовую информацию. Дальше я собирался все это дело переводить из географических координат в сферическую систему, а после все это загнать в декартову систему. Но потом задумался, а не лишняя работа ли это будет, и правильно ли это будет, имеет ли смысл. Просто я так сгоряча сорвался все это осуществлять и совсем забыл что у меня с векторами очень туго, и ничего подходящего для этой темы не могу найти.

Я представляю себе план таковым:
1. Считываю все данные.
2. Откладываю 2 вектора от начала координат в 2 заданных точки.
3. По какой-нибудь формуле рассчитываю длину разности этих векторов.
4. Теория расчета глубины: каким-то образом находим точку середины туннеля, потом узнаем длину вектора от этой точки до начала координат, и отнимаем это от радиуса планеты.
5. А вот далее с движением поезда я даже представления не имею, что делать. С физикой "труба" =(

Люди добрые, помогите пожалуйста с осуществлением данной задачи. Скоро сдавать симестралку, последняя надежда на вас.

Вот написана крохотная
часть

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package sim_package;
 
public class sim_class {
    public final static String[] locus = {  // priklady lokalizace ruznych mist.
       "90°  0' 0     \"N    14°  23' 20.49 \"E ",    //0  North pole
       "20°           \"E    90°  0'        \"S ",    //1  South pole
       "c             \"N    14°  23' 20.49 \"E ",    //2  Menza CVUT - vchod
       "50°  6'  8.90 \"N    14°  23' 33.84 \"E ",    //3  FEL Dejvice - vchod                   
       "50°  4' 45.134\"N    14°  25' 50.071\"E ",    //4  Nar. Muzeum, Praha
       "50°  4' 45.134\"S   165°  34' 39.929\"W ",    //5  Nar. Muzeum protinoha                  
       "51° 30' 45.49 \"N     0°  07' 17.15 \"W ",    //6  Brit. Museum, London
       "37° 52' 17.40 \"N   122°  15' 56.77 \"W ",    //7  Univ. Berkeley Calif.
       "36° 51' 00.84 \"S   174°  46' 09.21 \"E ",    //8  Univ. Auckland,  NZ
       "31° 14' 12.44 \"N   121°  30' 09.77 \"E ",    //9  The Opener, ShangHai
       "37° 47' 41.78 \"N   122°  24' 08.85 \"W ",    //10 The Needle, SF/Calif. 
       "22° 24' 08.85 \"W    57°  47' 41.78 \"N ",    //11 Point A
       "47° 47' 41.78 \"N    22°  24' 08.85 \"W ",    //12 Point B
    };
    public static void main(String[] args) {
        double[] sirka_delka = rad(locus[0]);
        System.out.println(sirka_delka[0]+"  "+sirka_delka[1]);
    }
    public static  double[] rad(String point){
        double[] rad_metoda = new double[2];
        int count = 0;
        int count01 = 0;
        for (int z = 0; z < 2; z++) {
            String pamet = "";
            boolean check = false;
            for (int i = count; i < point.length(); i++) {
                count += 1;
                if(point.charAt(i) == (char)176){break;}
                if((point.charAt(i) >= 48) && (point.charAt(i) <= 57)) {
                    pamet += point.charAt(i);
                }
            }
            rad_metoda[z] = Double.valueOf(pamet);
            pamet = "";
            for (int i = count; i < point.length(); i++) {
                count++;
                if(point.charAt(i) == 39){break;}
                if(point.charAt(i) == 34){
                    check = true;
                    break;
                }            
            }
            if(!check){
                count01 = count-2;
                while((point.charAt(count01) >= 48) && (point.charAt(count01) <= 57)){
                    pamet += point.charAt(count01);
                    count01 = count01 - 1;                
                }
                rad_metoda[z] += (Double.valueOf(pamet)/60);
                pamet = "";
                for (int i = count; i < point.length(); i++) {
                    count++;
                    if(point.charAt(i) == 34){
                        check = true;
                        break;
                    }
 
                    if ((point.charAt(i) >= 46) && (point.charAt(i) <= 57)) {
                        pamet += point.charAt(i);
                    }
                }
                rad_metoda[z] += (Double.valueOf(pamet)/3600);
            }
            if(check){
                switch(point.charAt(count)){
                    case 'N': rad_metoda[0] = 90 - rad_metoda[0];   break;
                    case 's': rad_metoda[0] = 90 + rad_metoda[0];   break;
                    case 'W': rad_metoda[1] = 360 - rad_metoda[1];  break;
                    case 'E': break;
                }
            }
            count++;
        }
        return rad_metoda;
    }
}


Подскажите пожалуйста, кто чем может. Как лучше реализовать все это, может формулы для вычисления какие-нибудь, а если кто то захочет написать какую-нибудь часть программы буду премного благодарен, но главная цель алгоритм и формулы.

Если вы знаете хоть чуточку больше того, что здесь я написал: отзовитесь пожалуйста.

Если кто-нибудь хочет связаться лично[личные данные удалены]

P.s. если вы с Праги за помощь угощу пивом =)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru