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

Расчитать величину и направление относа парашютиста, относительно точки десантирования - C++

Восстановить пароль Регистрация
 
Виктор1993
0 / 0 / 0
Регистрация: 14.03.2012
Сообщений: 22
18.04.2012, 16:46     Расчитать величину и направление относа парашютиста, относительно точки десантирования #1
Вот задача; имеется массив, содержащий данные о силе и направлении ветра на различных высотах. Произведена выброска парашютного десанта. Задана высота раскрытия парашюта. Скорость снижения парашютиста 5м/с. Необходимо расчитать величину и направление относа парашютиста, относительно точки десантирования.Заранее спасибо))).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2012, 16:46     Расчитать величину и направление относа парашютиста, относительно точки десантирования
Посмотрите здесь:

C++ Дано вещественное число, проверить является ли это число симметричным относительно положения точки до двух знаков после запятой.
C++ Программа вычисления местонахождения точки относительно фигуры (лежит ли точка внутри, на контуре или вне фигуры)
Определение положения точки относительно прямой C++
Расчитать Хи^2 C++
Написать программу определяющую расположение точки А(х, у) относительно заштрихованной области C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
18.04.2012, 17:39     Расчитать величину и направление относа парашютиста, относительно точки десантирования #2
Цитата Сообщение от Виктор1993 Посмотреть сообщение
имеется массив, содержащий данные о силе и направлении ветра на различных высотах.
- его вид можно?Или кроме задания больше ничего нет?

Добавлено через 2 минуты
Если по хорошему нужна масса парашутиста, ~ площадь сечения тела парашутиста и парашута, либо же принимать что парашутист будет лететь с той ветер с которой дует ветер. В общем задание не до конца поставлено как по мне
Виктор1993
0 / 0 / 0
Регистрация: 14.03.2012
Сообщений: 22
18.04.2012, 17:49  [ТС]     Расчитать величину и направление относа парашютиста, относительно точки десантирования #3
Кроме задания ничего нет.
Aero93
8 / 8 / 1
Регистрация: 19.12.2011
Сообщений: 35
18.04.2012, 17:58     Расчитать величину и направление относа парашютиста, относительно точки десантирования #4
Физически задачу реши , а в среде разработки используй библиотеку math.h
Виктор1993
0 / 0 / 0
Регистрация: 14.03.2012
Сообщений: 22
19.04.2012, 18:25  [ТС]     Расчитать величину и направление относа парашютиста, относительно точки десантирования #5
ну можете написать полностью решение
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.04.2012, 19:51     Расчитать величину и направление относа парашютиста, относительно точки десантирования #6
Цитата Сообщение от Виктор1993 Посмотреть сообщение
Вот задача; имеется массив, содержащий данные о силе и направлении ветра на различных высотах. Произведена выброска парашютного десанта. Задана высота раскрытия парашюта. Скорость снижения парашютиста 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
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <ctime>
using namespace std;
const int MAX=10;
const int WIND_MAX=25;// 30м/с -ураган
const int DELTA_H_AVG2=50;//шаг высоты в среднем 100 м
const int V_VERT=5;
struct wind_data{
int x_wind;
int y_wind;
int dn_height;
}windbuf[MAX];
void generate(){
 int i;
 srand( time( NULL ) );
 for (i=0; i<MAX; i++){
     windbuf[i].x_wind=rand()%(2*WIND_MAX)-WIND_MAX;
     windbuf[i].y_wind=rand()%(2*WIND_MAX)-WIND_MAX;
     windbuf[i].dn_height=(i==0)?(0):windbuf[i-1].dn_height+(DELTA_H_AVG2+rand()%(DELTA_H_AVG2*2));
 }
}
void solve(int h0, int* dx, int* dy){
    int i;
    int dh;
    *dx=0;
    *dy=0;
    for (i=0; (windbuf[i].dn_height<h0)&&(i<MAX); i++);//интервала с которого начинаем падать
    while(h0>0){
        dh=(h0-windbuf[i-1].dn_height);
        (*dx)+=windbuf[i-1].x_wind*dh/V_VERT;
        (*dy)+=windbuf[i-1].y_wind*dh/V_VERT; 
        i--;
        h0=windbuf[i-1].dn_height;
    } 
 
}
void print_table(){
    int i;
    cout<<"Wind data"<<endl;
    cout<<"#\t|Alt\t|wind.x\t|wind.y\t|\n";
    for (i=0; i<MAX; i++){
        cout<<i<<"\t|"<<windbuf[i].dn_height<<"\t|"<<windbuf[i].x_wind<<"\t|"<<windbuf[i].y_wind<<"\t|\n";
    }
}
int main(){
 int h, x, y;
 generate();
 print_table();
 
 cout<<"Enter parachute deployment altitude:";
 cin>>h;
 solve(h, &x, &y);
 cout<<"landing offset:"<<x<<":"<<y<<endl;
 getch();
 return 0;
}
Добавлено через 16 минут
результат http://s1.hostingkartinok.com/upload...6f124f1084.jpg
Виктор1993
0 / 0 / 0
Регистрация: 14.03.2012
Сообщений: 22
19.04.2012, 20:03  [ТС]     Расчитать величину и направление относа парашютиста, относительно точки десантирования #7
спасибо
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.04.2012, 20:09     Расчитать величину и направление относа парашютиста, относительно точки десантирования #8
C++
1
2
h0=windbuf[i-1].dn_height;
i--;
наверное правильнее писать в таком порядке.
Виктор1993
0 / 0 / 0
Регистрация: 14.03.2012
Сообщений: 22
19.04.2012, 20:20  [ТС]     Расчитать величину и направление относа парашютиста, относительно точки десантирования #9
а тот вариант правильный или нет

Добавлено через 1 минуту
А тот где другой вариант куда нужно вставлять или можешь написать полностью новый
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.04.2012, 20:28     Расчитать величину и направление относа парашютиста, относительно точки десантирования #10
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
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <ctime>
using namespace std;
const int MAX=10;
const int WIND_MAX=25;// 30м/с -ураган
const int DELTA_H_AVG2=50;//шаг высоты в среднем 100 м
const int V_VERT=5;
struct wind_data{
int x_wind;
int y_wind;
int dn_height;
}windbuf[MAX];
void generate(){
 int i;
 srand( time( NULL ) );
 for (i=0; i<MAX; i++){
     windbuf[i].x_wind=rand()%(2*WIND_MAX)-WIND_MAX;
     windbuf[i].y_wind=rand()%(2*WIND_MAX)-WIND_MAX;
     windbuf[i].dn_height=(i==0)?(0):windbuf[i-1].dn_height+(DELTA_H_AVG2+rand()%(DELTA_H_AVG2*2));
 }
}
void solve(int h0, int* dx, int* dy){
    int i;
    int dh;
    *dx=0;
    *dy=0;
    for (i=0; (windbuf[i].dn_height<h0)&&(i<MAX); i++);//интервала с которого начинаем падать
    while(h0>0){
        dh=(h0-windbuf[i-1].dn_height);
        (*dx)+=windbuf[i-1].x_wind*dh/V_VERT;
        (*dy)+=windbuf[i-1].y_wind*dh/V_VERT; 
        h0=windbuf[i-1].dn_height;
         i--;
    } 
 
}
void print_table(){
    int i;
    cout<<"Wind data"<<endl;
    cout<<"#\t|Alt\t|wind.x\t|wind.y\t|\n";
    for (i=0; i<MAX; i++){
        cout<<i<<"\t|"<<windbuf[i].dn_height<<"\t|"<<windbuf[i].x_wind<<"\t|"<<windbuf[i].y_wind<<"\t|\n";
    }
}
int main(){
 int h, x, y;
 generate();
 print_table();
 
 cout<<"Enter parachute deployment altitude:";
 cin>>h;
 solve(h, &x, &y);
 cout<<"landing offset:"<<x<<":"<<y<<endl;
 getch();
 return 0;
}
Виктор1993
0 / 0 / 0
Регистрация: 14.03.2012
Сообщений: 22
19.04.2012, 21:04  [ТС]     Расчитать величину и направление относа парашютиста, относительно точки десантирования #11
спасибо огромное
Виктор1993
0 / 0 / 0
Регистрация: 14.03.2012
Сообщений: 22
22.04.2012, 10:17  [ТС]     Расчитать величину и направление относа парашютиста, относительно точки десантирования #12
А ты эту задачу с помощью массивов или функций решал???

Добавлено через 44 минуты
А ты решал с помощью массивов или функций
-=ЮрА=-
Заблокирован
Автор FAQ
24.04.2012, 09:10     Расчитать величину и направление относа парашютиста, относительно точки десантирования #13
Виктор1993, ниже мой взгляд на проблемму, вводим начальную высоту прыжка и скорость снижения парашутиста и наслаждаемся симуляцией полёта в реальном времени
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
123
124
125
126
127
128
#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
 
struct HeightWind
{
    double speed;
    double asimut;//в градусах
};
 
//Функция шаблон для безопасного ввода
template <class T>
bool EnterValue(const char * msg, T &val)
{
    bool bRet = true;
    cout<<msg;
    if(!(cin>>val))
    {
        bRet = false;
        cout<<"ошибка ввода\n";
        cin.clear();
        cin.sync();
    }
    return bRet;    
}
 
int main()
{
    system("chcp 1251");//Кто хочет пусть руссифицирует через
    //setlocale SetConsoleOutputCP CharToOem wprintf определитесь сами
    //мне проще system("chcp 1251") и не ломаю мозг над єтим
    HeightWind * windList = NULL;//Массив направлений 
    //и скоростей ветра на разных высотах
    int i, N;//N будет содержать в себе число значений в массиве windList
    double X, Y, Z;//координаты парашутиста
    double v0 = 10;//Начальная скорость парашутиста по оси Z
    //Принято что безопасным считается прыжок если нач скорость
    //составляет порядка 10 м/с (т.е. когда раскрыли парашут
    //достигли скорости 10 м/с, как раз 1-ая сек падения и с такой
    //скоростью по летим по оси Z до самого низа)
    //10м/с = 36 км/ч будет больше - приведёт к травмам
    double Vx, Vy, Vz;//Проекции скорости парашутиста на оси
    double V;//Полная скорость парашутиста, она будет складываться
    //из компонет vx vy vz если будет более 20 м/с прыжок может иметь
    //печальные последствия 20 м/с ~ 75 км/ч
    double vx, vy;//Компоненты скорости ветра
    double asimut;//Азимут для вектора скорости парашутиста
    double heightangle;//Угол места (возвышение)
    double length;//Удаление от вертикали точка прыжка-земля
    double dt, T;//Думаю ясно что означает время полёта
    double DEG = 90/asin(1.0);//Коєффициент для перевода градусов в радианы
    while(true)//Бесконечный ввод(в общем сможем не закрывая приложение
    {   //моделировать полёт снова и снова с разными данными
        srand(time(0));//Генерировать ветер буду случ образом
        windList = NULL;
        //Обнуляем координаты и время
        T = (X = (Y = (Z = 0)));
        asimut = 0;
        heightangle = 0;
        length = 0;
        Vx = (Vy = (Vz = 0));
        vx = (vy = 0);
        if(EnterValue("Введите начальную высоту прыжка   ", Z))
        //Всё же сотавляю возможность ввести начальную скорость самим
        if(EnterValue("Введите начальную сорость падения ", v0))
        {
            //Собственно моделирование прыжка
            N = 1 + int(Z/10);//думаю шаг в 10 метров будет самое оно
            try
            {
                windList = new HeightWind[N];
            }
            catch(bad_alloc &e)
            {
                cout<<"Ошибка выделения памяти : "<<e.what()<<endl;
                windList = NULL;
            }
            if(windList)
            {
                for(i = 0; i < N; i++)
                {
                    windList[i].asimut = (rand()%3600 - 1800)/10.0;
                    windList[i].speed  = (rand()%200  - 100 )/10.0;//20 м/с и так уже шквальный ветер
                }
                dt = 1;//Не забываем у нас же шаг 1 сек
                for(Vz = v0, i = 0; 0 < (Z - Vz*T) && i < N; T = T + dt, i = i + 1)//Шаг 1 сек
                {
                    system("cls");
                    vx = (windList[i].speed)*dt*cos(windList[i].asimut/DEG);
                    vy = (windList[i].speed)*dt*sin(windList[i].asimut/DEG);
                    Vx = Vx + vx;
                    Vy = Vy + vy;
                    X += vx*dt;
                    Y += vy*dt;
                    length = sqrt(X*X + Y*Y);
                    heightangle = atan2(length,(Z - Vz*T));
                    asimut = atan2(X,Y);
                    V = sqrt(Vx*Vx + Vy*Vy + Vz*Vz);
                    cout<<"*************************************\n";
                    cout<<"Начальная высота прыжка : "<<Z<<endl;
                    cout<<"Начальная скорость прыжка : "<<v0<<endl;
                    cout<<"*************************************\n";
                    cout<<"Скорость вектра         : "<<windList[i].speed<<endl;
                    cout<<"Азимут скорости ветра   : "<<windList[i].asimut<<endl;
                    cout<<"Высота парашутиста (Z)  : "<<(Z - Vz*T)<<endl;
                    cout<<"Коодинаты парашутиста   :\n";
                    cout<<"X = "<<X<<endl;
                    cout<<"Y = "<<Y<<endl;
                    cout<<"Азимут парашутиста      : "<<asimut*DEG<<endl;
                    cout<<"Угол места(возвышение)  : "<<90 - heightangle*DEG<<endl;
                    cout<<"Удалённость от вертикали прыжка : "<<length<<endl;
                    cout<<"Скорость парашутиста    :\n"<<length<<endl;
                    cout<<"В вертикальном   направлении : "<<Vz<<endl;
                    cout<<"В горизонтальном направлении : "<<sqrt(Vx*Vx + Vy*Vy)<<endl;
                    cout<<"Полная скорость парашутиста  : "<<V<<endl;
                    cout<<"*************************************\n";
                }
                dt = (Z - Vz*(T - 1))/Vz;
                cout<<"Итерации остановлены за "<<dt<<" сек до приземления\n";
                delete [] windList;
                system("pause");
                system("cls");
            }
        }   
    }
    return 0;
}
Миниатюры
Расчитать величину и направление относа парашютиста, относительно точки десантирования  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2012, 09:23     Расчитать величину и направление относа парашютиста, относительно точки десантирования
Еще ссылки по теме:

Положение точки относительно заданного эллипса C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
24.04.2012, 09:23     Расчитать величину и направление относа парашютиста, относительно точки десантирования #14
Ниже эксзешник, будут грабли с русским, проходим сюда
Создание файла в UTF-8 кодировке
и настраиваем в 3 щелчка мыши шрифт приложения или же используем setlocale (в коде указано что как удобней так и руссифицируем, мне просто нравится system("chcp 1251"))
Вложения
Тип файла: rar FlyInWind.exe.rar (51.1 Кб, 7 просмотров)
Yandex
Объявления
24.04.2012, 09:23     Расчитать величину и направление относа парашютиста, относительно точки десантирования
Ответ Создать тему
Опции темы

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