Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.114.31] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Вообщем скоро защита моего проекта - «моделирование физического маятника», но у меня с ней проблемы. Сама модель маятника у меня работает, но я не знаю как сделать так что бы внизу модели выводились разные графики зависимости (например: зависимость угла отклонения от времени,; я точно не знаю какие еще можно графики построить, т.к. мало в этом соображаю ). Как минимум нужно два графика. Если не сложно помогите пожалуйста…
Вот сам маятник… {$N+} Uses Graph,Crt; Type type_mayat=record {tip mayatnika} DlinaNiti:real; MassaNiti:real; MassaSharika:real; RadiusSharika:real; a_begin,a_new,a_old:real; J,w0:real; end; Var p_menu:pointer; main_mayat:type_mayat; {Maytnik} dT,fT,g,b:real;{Shag po vremeni, Polnoe vremya, g, koef triniya} tmp_1:integer; {svobodnie peremennie} tmp_2,tmp_3,tmp_4,tmp_5:real;{svobodnie peremennie} Key:char; graphtmp2,graphtmp3:integer; {graficheskie peremenie} Procedure GraphOn; {vklyuchenie graphiki} Var Gd,Gm,ErrorCode:integer; Begin Gd:=detect; initgraph(Gd,Gm,''); ErrorCode:=GraphResult; if ErrorCode <> grOk then begin WriteLn('oshibka:'); WriteLn(GraphErrorMsg(ErrorCode)); Halt(1); end; End; Procedure GraphOff;{Otklu4enie graphiki} Begin CloseGraph; End; Procedure mayatnik(DlinaNiti_:integer; MassaNiti_,MassaSharika_,RadiusSharika_,a_begin_:real); Begin with main_mayat do begin DlinaNiti:=DlinaNiti_; MassaNiti:=MassaNiti_; MassaSharika:=MassaSharika_; RadiusSharika:=RadiusSharika_; a_begin:=a_begin_; a_new:=a_begin_; J:=(1/3)*MassaNiti*sqr(DlinaNiti)+MassaSharika*(2/5*sqr(RadiusSharika)+ sqr(DlinaNiti)); w0:=sqrt(g*(MassaSharika*DlinaNiti+MassaNiti*DlinaNiti/2)/J); {vi4islenie sobstvennoi 4astoti} end; End; Procedure dvizh_mayat; {phizika mayatnika} Var costmp:double; Begin with main_mayat do begin a_old:=a_new; a_new:=a_begin*cos(w0*fT);{novii ugol mayatnika} if a_begin>0 then begin costmp:=cos(a_begin)+(b*DlinaNiti*sqr(a_new-a_old))/(dT*MassaSharika*g); {vi4islenie novogo cos ugla amplitudi} if (costmp<>0) then a_begin:=arctan(sqrt(1-sqr(costmp))/costmp); {vi4islenie novoi amplitudi} end else a_begin:=0; fT:=fT+dT; end; End; Procedure ris_mayat; {risovanie mayatnika} Var xNow,yNow:real; Begin with main_mayat do begin xNow:=graphtmp2+DlinaNiti*cos(a_new-pi/2); yNow:=21-DlinaNiti*sin(a_new-pi/2); setcolor(15); setfillstyle(3,15); bar(graphtmp3,0,2*graphtmp3,20); line(graphtmp3,20,2*graphtmp3,20); setfillstyle(0,0); bar(graphtmp2-round(DlinaNiti+RadiusSharika),21, graphtmp2+round(DlinaNiti+RadiusSharika),21+round(DlinaNiti+RadiusSharika)); setcolor(7); setlinestyle(0,0,3); line(graphtmp2,21,round(xNow),round(yNow)); setlinestyle(0,0,1); setcolor(1); setfillstyle(1,1); fillellipse(round(xNow),round(yNow), round(RadiusSharika),round(RadiusSharika)); end; End; Begin GraphOFF; writeln('vvedite dlinu niti (recom. 250)'); readln(tmp_1); writeln('vvedite massu niti (recom. 20)'); readln(tmp_2); writeln('vvedite massu sharika (recom. 30)'); readln(tmp_3); writeln('vvedite radis sharika (recom. 15)'); readln(tmp_4); writeln('vvedite ugol otklonenia (recom. 0.5)'); readln(tmp_5); writeln('vvedite shag po vremeni (recom. 0.1)'); readln(dT); GraphOn; b:=0.1; fT:=0; Key:=#0; g:=9.8; GraphOn; graphtmp2:=round(getmaxx/2); graphtmp3:=round(getmaxx/3); cleardevice; mayatnik(tmp_1,tmp_2,tmp_3,tmp_4,tmp_5); repeat if(main_mayat.a_begin<>0)then begin dvizh_mayat; ris_mayat; delay(500); end; if keypressed then key:=readkey; until (key=#27); GraphOff; End. зарание благодарю... |
Сообщ.
#2
,
|
|
|
Цитата Guest @ Ты покажи формулы этих зависимостей, а мы тебе подскажем как строить графики для них. С ними, как раз, проблем не должно быть.но я не знаю как сделать так что бы внизу модели выводились разные графики зависимости (например: зависимость угла отклонения от времени,; я точно не знаю какие еще можно графики построить, т.к. мало в этом соображаю Кстати, graphtmp2:=round(getmaxx/2); graphtmp3:=round(getmaxx/3); graphtmp2 := GetMaxX div 2; graphtmp3 := GetMaxX div 3; |
Сообщ.
#3
,
|
|
|
Цитата Romtek @ Цитата Guest @ Ты покажи формулы этих зависимостей, а мы тебе подскажем как строить графики для них. С ними, как раз, проблем не должно быть.но я не знаю как сделать так что бы внизу модели выводились разные графики зависимости (например: зависимость угла отклонения от времени,; я точно не знаю какие еще можно графики построить, т.к. мало в этом соображаю какие формулы зависимостей? на сколько я поняла графики строятся путем перевода значения физической величины значению экранной координаты....по общей формуле: x=x0+(x1-x0)/(i1-i0)*(i-i0) y=y0+(y1-y0)/(j1-j0)*(j-j0) но я сама точно не знаю |
Сообщ.
#4
,
|
|
|
Цитата Guest @ зависимость угла отклонения от времени можно попробовать вывести вот так: { это для красоты... } setcolor(white); rectangle(10, getmaxy-100, getmaxx-10, getmaxy-10); T := 0; curr_t := 10; { измени свой Repeat ... Until на этот: } repeat if(main_mayat.a_begin<>0)then begin dvizh_mayat; ris_mayat; delay(500); inc(T); if T = 10 then begin T := 0; inc(curr_t); putpixel(curr_t, (getmaxy - 240) + trunc(180 * cos(main_mayat.a_new)), red ); end; end; if keypressed then key:=readkey; until (key=#27); Ну, и естественно, объяви Var T, curr_t: Integer; Можно и со вторым что-нибудь придумать... Добавлено: Еще кое-что... В процедуре ris_mayat у тебя постоянно перерисовывается кусок потолка. setcolor(15); setfillstyle(3,15); bar(graphtmp3,0,2*graphtmp3,20); line(graphtmp3,20,2*graphtmp3,20); По-моему, это - лишнее. Эту часть можно смело перенести в основную программу и поставить сразу после вызова процедуры mayatnik: cleardevice; mayatnik(tmp_1,tmp_2,tmp_3,tmp_4,tmp_5); { Вот сюда } |
Сообщ.
#5
,
|
|
|
спасибо за график
Цитата Можно и со вторым что-нибудь придумать... я думала сделать график зависимости периода от времни, но по-моему так не получится..... а еще подскажите пожалуйста воообще какие еще можно графики зависимости сделать |
Сообщ.
#6
,
|
|
|
Цитата Guest @ а еще подскажите пожалуйста воообще какие еще можно графики зависимости сделать Например, зависимость пройденного маятником расстояния от времени. |
Сообщ.
#7
,
|
|
|
Цитата Romtek @ Цитата Guest @ а еще подскажите пожалуйста воообще какие еще можно графики зависимости сделать Например, зависимость пройденного маятником расстояния от времени. и как это сделать |
Сообщ.
#8
,
|
|
|
Цитата Guest @ Ну выведи формулу: как ты без неё собираешься график строить? и как это сделать |
Сообщ.
#9
,
|
|
|
формулу расстояния я не смогла вывести...т.к. ничего похожего не нашла....
я хочу все таки сделать график зависимости периода от времени... формулу периода я знаю... T=2*pi*sqrt(J/m*g*l), но это формула без учета радиуса шарика и массы нити....И я не знаю как её записать правильно.... J(- момент инерции) уже выражен через массу шарика, массу нити, длину нити и радиуса шарика...это есть в самом начале моей проги... подскажите как правильно записать эту формулу? пожалуйста помогите, просто о-о-очень срочно надо(завтра уже защита самого проекта ) |
Сообщ.
#10
,
|
|
|
ИМХО теме пора в смехогрех.
|
Сообщ.
#11
,
|
|
|
Цитата Pourtous @ Я так не думаю. Помочь можно.ИМХО теме пора в смехогрех. Цитата Guest @ Задай этот вопрос в разделе "Алгоритмы". Как только выяснишь формулу, построить график не проблема. формулу расстояния я не смогла вывести...т.к. ничего похожего не нашла.... я хочу все таки сделать график зависимости периода от времени... формулу периода я знаю... T=2*pi*sqrt(J/m*g*l), но это формула без учета радиуса шарика и массы нити....И я не знаю как её записать правильно.... J(- момент инерции) уже выражен через массу шарика, массу нити, длину нити и радиуса шарика...это есть в самом начале моей проги... подскажите как правильно записать эту формулу? |
Сообщ.
#12
,
|
|
|
volvo877 можешь пожалуйста обьяснить построение графика зависимости угла отклонения от времени
|
Сообщ.
#13
,
|
|
|
А в нем как раз ничего сложного нет - все необходимые данные берутся из структуры main_mayat после пересчета маятника, и то не после каждого, а после кратного 10... Смотри:
inc(T); if T = 10 then begin { только при каждом 10-м пересчете } T := 0; inc(curr_t); { увеличиваем координату X } { и далее выводим точку: } { с новой координатой по оси времени (ось ОХ) } putpixel(curr_t, { по оси OY - значение cos угла маятника } (getmaxy - 240) + trunc(180 * cos(main_mayat.a_new)), { точка выводится красным цветом } red ); Коэффициент 180 при косинусе угла подбирался экспериментально (так же как и 240), чтобы график находился там, где он находится сейчас... Измени 240 на другое число - и график будет отображаться выше или ниже, 180 влияет на амплитуду графика... |
Сообщ.
#14
,
|
|
|
Вот мне сдавать этот проект в мае насчет маятника! Спасибо вам огромное за советы. А вот когда график рисуется как сделать оцифрованную сетку (т.е. декартовую с-у координат), чтобы можно было смотреть на график и видеть через скока времени какая частота будет... помогите пожалуйста, а то у меня не выходит что-то
|
Сообщ.
#15
,
|
|
|
Присоедини-ка сюда полную свою программу, чтобы не делать двойную работу...
Возможно ты что-то добавлял к тому что есть здесь, или убирал... |