![]() |
|
Модераторы: bsa |
![]()
|
|
| enota |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 3.12.2011 Репутация: нет Всего: нет |
Нужна помощь в решении задачи.
Тело бросается под углом альфа к горизонту с начальной скоростью V0. На тело действуют сила тяжести и сила трения о воздух. Нам были дана две формулы - дискретное решение и аналитическое. Необходимо, чтобы программа строила на одном графике оба решения. Задается нами угол, коэффициент трения, начальная скорость, масса тела. Аналитическое решение имеет вид: xa=(vt/g)*v0*cos(alpha)*(1- exp (-t*(g/vt))); ya=(vt/g)*(v0*sin(alpha)+vt)*(1-exp(-(t*g)/vt)-vt*t); Вот в нем и состоит проблема. Значения по у-ку считает отрицательными, из-за этого не троит график. Хотя подсчитывала вручную, вроде другие значения. Вот текст программы в Borland C++:
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Формулы аналитического решения и их реализацию в программе проверяли? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| IValdemar |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.1.2012 Репутация: нет Всего: нет |
||||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Делается преобразование с волшебной константой которая есть 2*pi/360 Добавлено @ 23:35 Что есть m и c? Это сообщение отредактировал(а) feodorv - 11.6.2012, 23:39 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| disputant |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 28.11.2011 Репутация: нет Всего: 3 |
Не нравится мне эта формула для y... Хотя бы потому, что в ней размерность не совпадает... Вот это ваше (1-exp(-(t*g)/vt)-vt*t) - вы в нем уверены?
|
|||
|
||||
| enota |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 3.12.2011 Репутация: нет Всего: нет |
m- масса брошенного тела, с - коэффициент трения. Добавлено через 3 минуты и 44 секунды
Да, и правда, ошибочка. должна быть такая формула (1-exp(-(t*g)/vt))-vt*t тогда #include <graphics.h> #include <stdio.h> #include <conio.h> #include <iostream.h> #include <stdlib.h> #include <math.h> double plot(double m, double c,double v0,double alpha) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; int xmax, ymax; /* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "d:\\borlandc\\bgi"); /* read result of initialization */ errorcode = graphresult(); /* an error occurred */ if (errorcode != grOk) { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); } setcolor(getmaxcolor()); xmax = getmaxx(); ymax = getmaxy(); /* draw a diagonal line */ //line(0, 0, xmax, ymax); int x0, y0, sx=50, sy=50, i, j, k ; // x0=xmax/2; y0=ymax/2; //osi koordinat // 1 sistema koordinat line (5, ymax-5, xmax-5, ymax-5); //Ox line (5, y0, 5, ymax-5); //Oy //shtrixi po ox for (j=0; j<=xmax/sx; j++) { line (5+sx*j, ymax-7,5+sx*j,ymax-3); } //shtrixi po oy for (k=y0/sy; k<=(ymax-5)/sy; k++) {line (3, sy*k,7, sy*k); } //MOE SO4INENIE // const int n=10; double vx, vy, x, y, xx, yy, g=9.8, dt=0.005, t, xa, ya, xxa, yya; alpha=alpha*0.01745; vx=v0*cos(alpha); vy=v0*sin(alpha); x=0; y=0; while (y>=0) { vx=(-(c*dt)/m+1)*vx; vy=-g*dt +(-c*dt/m +1)*vy; x=dt*vx+x; y=dt*vy+y; xx=x*sx+5; yy=ymax-y*sy-5; putpixel(xx, yy, 5); } double vt=(m*g)/c; t=0; while (ya>=0) { xa=(vt/g)*v0*cos(alpha)*(1- exp (-t*(g/vt))); ya=(vt/g)*(v0*sin(alpha)+vt)*(1-exp(-(t*g)/vt))-vt*t; t=t+dt; xxa=xa+5; yya=ymax-ya-5; getch(); putpixel(xxa, yya, 2); } /* clean up */ getch(); closegraph(); return 0; } main () { int om; double m, c, v0, alpha; clrscr(); // while(om!=0) // { /* cout<<"massa tela m="; cin>>m; cout<<endl<<"koeffizient trenia c="; cin>>c; cout<<endl<<"na4alnaia skorost' v0="; cin>>v0; cout<<endl<<"ygol alpha="; cin>>alpha; */ m=20; c=30; v0=15; alpha=70; plot (m, c, v0, alpha); getch(); // cout<<"One more? (no-0/yes- any other)"; // cin>>om; // } return 0; } Все равно неверно работает. Теперь просто зависает. Около нуля еще что-то строит. |
|||
|
||||
| enota |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 3.12.2011 Репутация: нет Всего: нет |
Всем спасибо. Я решила!
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |