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

Обратная геодезическая задача.(методы оптимизации) - C++

Восстановить пароль Регистрация
 
Deadrats
0 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 4
09.04.2014, 16:45     Обратная геодезическая задача.(методы оптимизации) #1
В общем нужно запрогать задачу, с точки зрения методов оптимизации.

Условие.
Найти геодезические линии сферы радиуса r. Геодезические линии — это линии
наименьшей длины, соединяющие две заданные точки поверхности и проходящие только
по поверхности.
Примечание: Задачу гораздо удобнее решать в сферических координатах. Затем можно
произвести параметризацию по t.

Копание в глубь дало, то что это обратная геодезическая задача на сфере. Так же я нашел и запрограммировал под сферу R данную задачу. С входными данными Q1(фи,лямбда) Q2 (фи,лямбла) R. Програма находит по формулам углы и расстояние.

Первоначальная информация взята с этого сайта. Теория и код.

Кликните здесь для просмотра всего текста

C++
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <stdio.h>
#include <stdlib.h>
#include "math.h"
#include "sph.h"
 
#define M_PI       3.14159265358979323846
#define M_PI_2     1.57079632679489661923
 
/*
 
 * Решение обратной геодезической задачи
 *
 * Исходные данные:
 *     pt1  - {широта, долгота} точки Q1
 *     pt2  - {широта, долгота} точки Q2
 *      R   - Радиус сферы
 * Искомые данные:
 *     azi  - азимут начального направления
 *     dist - расстояние (сферическое)
 */
 
void SphereInverse(double pt1[], double pt2[], double *azi, double *dist)
{
  double x[3], pt[2];
 
  SpherToCart(pt2, x);          // сферические -> декартовы
  Rotate(x, pt1[1], 2);         // первое вращение
  Rotate(x, M_PI_2 - pt1[0], 1);// второе вращение
  CartToSpher(x, pt);           // декартовы -> сферические
  *azi = M_PI - pt[1];          
  *dist = M_PI_2 - pt[0];
 
  return;
}
 
/*
 * Вращение вокруг координатной оси
 *
 * Аргументы:
 *     x - входной/выходной вектор
 *     a - угол вращения
 *     i - номер координатной оси (0..2)
 */
void Rotate(double x[], double a, int i)
{
  double c, s, xj;
  int j, k;
 
  j = (i + 1) % 3;
  k = (i - 1) % 3;
  c = cos(a);
  s = sin(a);
  xj = x[j] * c + x[k] * s;
  x[k] = -x[j] * s + x[k] * c;
  x[j] = xj;
 
  return;
}
/*
 * Преобразование сферических координат в вектор
 *     y - {широта, долгота}
 *
 *    Получаем.
 *     x - вектор {x, y, z}
 */
void SpherToCart(double y[], double x[])
{
  double p;
 
  p = cos(y[0]);
  x[2] = sin(y[0]);
  x[1] = p * sin(y[1]);
  x[0] = p * cos(y[1]);
 
  return;
}
 
/*
 * Преобразование вектора в сферические координаты
 *
 * Аргументы исходные:
 *     x - {x, y, z}
 *
 * Аргументы определяемые:
 *     y - {широта, долгота}
 *
 * Возвращает:
 *     длину вектора
 */
double CartToSpher(double x[], double y[])
{
  double p;
 
  p = sqrt(x[0] * x[0] + x[1] * x[1]);
  y[1] = atan2(x[1], x[0]);
  y[0] = atan2(x[2], p);
 
  return sqrt(p * p + x[2] * x[2]);
}
 
 
 
int main()
{
  
  double pt1[2], pt2[2], pt3[1];
  double lat1, lon1, lat2, lon2, azi1, azi2, dist;
  double R = 0;
  //while (fgets(buf, 1024, stdin) != NULL) {
    scanf("%lf %lf %lf %lf", &lat1, &lon1, &lat2, &lon2);
 
    scanf("%lf", &R);
    pt1[0] = Radians(lat1);
    pt1[1] = Radians(lon1);
    pt2[0] = Radians(lat2);
    pt2[1] = Radians(lon2);
    SphereInverse(pt2, pt1, &azi2, &dist);      // Решение обратной задачи
    SphereInverse(pt1, pt2, &azi1, &dist);      // Вычисление обратного азимута
    printf("%f\t%f\t%.4f\n", Degrees(azi1), Degrees(azi2), dist * R);
  //}
  return 0;
}


Преподаватель сказал, что задачу нужно решить с точки зрения методов оптимизации. И сказал гулять, не обьяснив что он имеет ввиду. =(

Прошу натолкнуть на мысль как поправить данную задачу, что бы она решалась с точки зрения методов оптимизаци.

Добавлено через 7 минут
Первоначальная информация взята с этого сайта. Теория и код.
http://gis-lab.info/qa/sphere-geodes...t-problem.html

Добавлено через 3 часа 53 минуты
.

Добавлено через 21 час 29 минут
Ап.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2014, 16:45     Обратная геодезическая задача.(методы оптимизации)
Посмотрите здесь:

Методы оптимизации кода C++
C++ Методы оптимизации памяти
C++ Задача по методам оптимизации
C++ Обратная задача о ранце (ДП)
C++ Транспортная задача (методы приближения)
C++ Методы Оптимизации: Метод параллельных касательных - нужен алгоритм
C++ Курсовая. Методы оптимизации
Методы оптимизации C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 11:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru