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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
njkz596
Сообщений: n/a
#1

Найти минимальную длину пути - C++

24.06.2012, 20:15. Просмотров 582. Ответов 5
Метки нет (Все метки)

На поверхности планеты, являющейся шаром с радиусом R, заданы две точки со своими широтой и долготой. Найти минимальную длину пути по поверхности этой планеты из одной точки в другую.
Ограничения:широта-в градусах -90 до 90, долгота в градусах от -180 до 180, 100<R<10000, все числа вещественные.
На С++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2012, 20:15     Найти минимальную длину пути
Посмотрите здесь:

Найти минимальную суммарную длину n отрезков - C++
Всем привет. Пытаюсь решить задачу и ничего не выходит. Помогите решить. Условие: Пусть n красных и n синих точек на плоскости заданы...

Деревья. Найти длину пути из узла a в узел b - C++
дано бинарное дерево. найти длину пути из узла a в узел b.(если такой узел не существует то вывести сообщение об этом) как можно...

Задача (вывести длину кратчайшего пути от точки до точки.) - C++
Пишу задачу, нужно вывести длину кратчайшего пути от точки до точки. проблема в том, что после генерации массива и задания ему...

Найти x и y и минимальную сумму x и y - C++
дано k чисел T(0) T(1)..T(k) найти x и y, где 1&lt;=x&lt;y&lt;=k, и минимальную сумму x и y T(x)..T(y)

Найти минимальную сумму - C++
задача: у компании есть m поставщиков молока. известно,что каждый i - ый поставщик может продать ровно a литров по цене p за литр. за...

Найти минимальную площадь прямоугольника из набора - C++
Данное целое число N и набор из N прямоугольников , заданных своими сторонами - парами чисел ( а , b ) . Найти минимальную площадь...

Найти максимальную, минимальную и среднюю температуру воздуха - C++
Массив а1,...,a24 содержит данные измерения температуры воздуха в течение дня. Найти максимальную, минимальную и среднюю температуру...

Расспаралеллеливание - найти минимальную сумму элементов по строкам - C++
Дан двумерный массив. Найти минимальную сумму элементов по строкам. Последовательно я решила ,а как решить решить параллелельно?

Найти минимальную сумму диагонали матрицы, параллельной побочной - C++
помогите найти ошибку 3 день сижу над этим кодом не могу найти ошибку отзовитесь кто-нибудь пожалуйста #include &quot;stdafx.h&quot; ...

Найти минимальную сумму в матрице по условию. Написать комментарий - C++
#include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;math.h&gt; #define N 3 int main() { int A; int i, j, z, sum,...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
24.06.2012, 20:36     Найти минимальную длину пути #2
Вы бы хотя бы формулы дали по которым считать надо
njkz596
Сообщений: n/a
24.06.2012, 20:41     Найти минимальную длину пути #3
я сам формулы не знаю потому и написал
igor_kz
150 / 150 / 12
Регистрация: 16.06.2012
Сообщений: 312
24.06.2012, 20:57     Найти минимальную длину пути #4
Пускай Ws, Hs - широта и долгота начальной точки
Пускай Wf, Hf - широта и долгота конечной точки
R - радиус шара.
Угол между этими двумя точками вычисляется так: T = arccos(sin(Ws)sin(Wf) + cos(Ws)cos(Wf)cos(L)), где L - разница между долготами.
Само расстояние теперь равно D = R * T;
grizlik78
Эксперт С++
1904 / 1436 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
24.06.2012, 21:29     Найти минимальную длину пути #5
С формулой, что выше, будет попроще немного, я через векторы сделал. Надеюсь результат совпадает
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
#include <iostream>
#include <numeric>
#include <cmath>
 
class vect3d
{
    double c[3];
public:
    vect3d() : c() {}
    vect3d(double x, double y, double z) { c[0] = x; c[1] = y; c[2] = z; }
    double operator*(vect3d const& v) const
    {
        return std::inner_product(c, c+3, v.c, 0.0);
    }
    void print(std::ostream & os) const
    {
        os << "("<<c[0] << ", " << c[1] << ", " <<c[2] << ")";
    }
};
 
std::ostream& operator<< (std::ostream& os, vect3d const& v)
{
    v.print(os);
    return os;
}
 
double abs(vect3d const& v)
{
    return sqrt(v*v);
}
 
vect3d polar3d(double r, double phi, double theta)
{
    return vect3d(
            r*cos(phi)*cos(theta),
            r*sin(phi)*cos(theta),
            r*sin(theta)
            );
}
 
double input_double(std::string name, double min, double max)
{
    double d;
    if (min >= max)
        return min;
    do {
        std::cout << "Input " << name 
            << " (" << min << ".." << max << "): " << std::endl;
    } while ((std::cin >> d) && (d < min || d > max));
    if (std::cin.fail())
        std::cout << "Input error" << std::endl;
    return d;
}
 
int main()
{
    double radius = input_double("radius", 100, 10000);
    double lon1 = input_double("longitude1", -180, 180);
    double lat1 = input_double("latitude1", -90, 90);
    double lon2 = input_double("longitude2", -180, 180);
    double lat2 = input_double("latitude2", -90, 90);
    vect3d v1 = polar3d(1.0, lon1/180.0*M_PI, lat1/180.0*M_PI);
    vect3d v2 = polar3d(1.0, lon2/180.0*M_PI, lat2/180.0*M_PI);
 
    std::cout << "Minimal distance: " <<
        radius*acos( v1*v2/(abs(v1)*abs(v2))) <<std::endl;
    return 0;
}
scarlett1806
0 / 0 / 0
Регистрация: 04.12.2014
Сообщений: 21
08.01.2015, 17:59     Найти минимальную длину пути #6
Та же задача только на паскале посмотрите почему ответ не правильный?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
program Shpere;
 
var t:text; r,phi1,phi2,psi1,psi2,x,L:real;
 
begin
Assign(t,'INPUT.TXT');
Reset(t);
Read(t,r);
Readln(t,phi1,psi1);
Readln(t,phi2,psi2);
Close(t);
{phi1:=(phi1*180)/pi;
phi2:=(phi2*180)/pi;
psi1:=(psi1*180)/pi;
psi2:=(psi2*180)/pi;}
x:=sin(phi1)*sin(phi2)+cos(phi1)*cos(phi2)*cos(psi1-psi2);
L:=2*arctan(sqrt(1-sqr(x))/x);
L:=pi*L/2.0;
 
Assign(t,'OUTPUT.TXT');
Rewrite(t);
Writeln(t,L:1:2);
Close(t);
end.
Yandex
Объявления
08.01.2015, 17:59     Найти минимальную длину пути
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru