Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Графика. Двужущаяся точка.

Автор: Accer 28.12.2007 10:09

Помогите с графикой! Нужно изобразить точку, совершающую независимые гармонические колебания с частотой w1 по горизонтали и с частотой w2 по вертикали. (амплитуда тех и других колебаний равна а). Считать, что в момент времени t точка имеет координаты x=a cos w1(t-t1) y=a cos w2(t-t2); t1 и t2 даны. Предусмотреть возможность управления с клавиатуры значениями w1 и w2.

Автор: Lapp 28.12.2007 10:44

Что именно не получается с графикой?
Рисуешь точку, запоминаешь координаты, пересчитываешь координаты на новое положение, стираешь точку в старом положении, рисуешь в новом... и т.д...

Автор: Accer 28.12.2007 11:23

В графике ноль. Точку могу с трудом нарисовать.

Автор: andriano 28.12.2007 13:18

Цитата(Accer @ 28.12.2007 7:23) *
Точку могу с трудом нарисовать.
Судя по условию, именно это от тебя и требуется. :D
Реально по такому задаию можно сделать очень красивую программу, рисующую фигуры Лиссажу.
ПОказывай, что уже сделал.

Автор: Accer 28.12.2007 20:24

Я не понимаю алгоритм работы этой программы!!!
Рисуем точку-удаляеи-русуем в другом месте-снова удаляем-...-повторяем все снова?

Автор: Ozzя 28.12.2007 22:38

Абсолютно верно! Алгоритм понят.

Автор: Accer 28.12.2007 23:36

smile.gif а как задать связать с формулой???

Автор: andriano 28.12.2007 23:41

Связать что с чем?

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

Автор: Accer 29.12.2007 0:51

wacko.gif wacko.gif wacko.gif

Автор: Чужак 29.12.2007 2:02

Что-то недополнял задание.
Точка должна колебаться либо в вертикальной, либо в
горизонтальной плоскости (по выбору пользователя)/или же
одновременно в вертикальной и горизонтальной
(тогда как это реализовать-направлений движения-четыре
вверх/вниз/вправо/влево, а точка то одна)?

Автор: Accer 29.12.2007 9:27

А можно увидеть пример с простым движением точки туда обратно smile.gif

Автор: Lapp 29.12.2007 11:24

Цитата(Чужак @ 28.12.2007 22:02) *
Точка должна колебаться либо в вертикальной, либо в горизонтальной плоскости (по выбору пользователя)/или же одновременно в вертикальной и горизонтальной (тогда как это реализовать-направлений движения-четыре
вверх/вниз/вправо/влево, а точка то одна)?
Чужак, не фантазируй, про плоскости никто ничего не говорил. Точка колеблется вдоль горизонтальной оси (скажем, Х) и вертикальной оси (скажем, Y). Иначе говоря:
x=a cos w1(t-t1)
y=a cos w2(t-t2)
- как сказано в условии.
Accer, что тебе нужно связать? Математические координаты с экранными? Это можно сделать примерно так:
xs:=Round((x-x1)/(x2-x1)*GetMaxX);
ys:=Round((y2-y)/(y2-y1)*GetMaxY);
Если ты оформишь их как функции:
function Xs(x:real):integer;
begin
Xs:=(x-x1)/(x2-x1)*GetMaxX
end;

(и аналогично для Ys; здесь х1 - левая граница экрана, а х2 - правая, например х1=-а и х2=а)
- то, например, вот так можно нарисовать оси координат:
Line(x1,0,x2,0);
Line(0,y1,0,y2);

А так ставить саму точку:
PutPixel(Xs(x),Ys(y),White)

- и так ее стирать:
PutPixel(Xs(x),Ys(y),Black)

Автор: Accer 29.12.2007 12:01

Спасибо, я попоробую сделать

Автор: Чужак 30.12.2007 2:11

Цитата(Lapp @ 29.12.2007 7:24) *

Чужак, не фантазируй, про плоскости никто ничего не говорил. Точка колеблется вдоль горизонтальной оси (скажем, Х) и вертикальной оси (скажем, Y). Иначе говоря:
x=a cos w1(t-t1)
y=a cos w2(t-t2)
- как сказано в условии.

Я это и имел в виду. Слово "плоскость" не вполне уместна...
Цитата(Lapp @ 29.12.2007 7:24) *

Если ты оформишь их как функции:
function Xs(x:real):integer;
begin
Xs:=(x-x1)/(x2-x1)*GetMaxX
end;

(и аналогично для Ys; здесь х1 - левая граница экрана, а х2 - правая, например х1=-а и х2=а)

Нужны ли сдесь функции?
Цитата(Accer @ 29.12.2007 5:27) *

А можно увидеть пример с простым движением точки туда обратно smile.gif

Можно, увидишь... cool.gif
Я тут делаю программу, которая условно называется
"визуализатор синусоид". (В программе использован фрагмент кода volvo,
помещенный на форуме-линия вращалась в круге).

program VisualSinusoid;
Uses Crt, Graph;
Const r = 80;
Label 1;
Var gd, gm: Integer; t,X,Y: Real;
Begin
InitGraph(gd,gm,''); t:=0;
1: X:=280;
SetColor(15);
Circle(120,240,r);
SetColor(2);
Line(120, 240, Round(120+r*cos(t)), Round(240+r*sin(t)));
Line(Round(120+r*cos(t)), Round(240+r*sin(t)),
280, Round(240+r*sin(t)) );
X:=X+1; Y:=240+r*sin(t);
PutPixel(Round(X), Round(Y), 11);
Delay(300);
SetColor(0);
Line(120, 240, Round(120+r*cos(t)), Round(240+r*sin(t)));
Line(Round(120+r*cos(t)), Round(240+r*sin(t)),
280, Round(240+r*sin(t)));
t:=t+0.05;
if X>600 then begin ClearDevice; goto 1; end
until KeyPressed;
CloseGraph
End.


Автор: Lapp 30.12.2007 3:51

Цитата(Чужак @ 29.12.2007 22:11) *

Нужны ли сдесь функции?

Функции здесь не обязательны, но в высшей степени полезны с точки зрения логики. Очень правильно разделять экранные координаты и абстрактные (математические). Функции служат именно этой цели. Новички, как правило, работают непосредственно в экранных координатах, подстраивая свою задачу под них. В маленьких прогах это допустимо, но в больших приведет к проблемам.
Более того, во многих случаях удобно ввести еще один уровень..

Автор: Accer 30.12.2007 21:11

Компилятор не может найти Graph.tpu!!!!

Что делать unsure.gif

Автор: Client 30.12.2007 21:24

Скопируй из папки Units файлы Graph.Tpu в папку BIN

Автор: Accer 30.12.2007 21:35

GRAPH3.TPU был, его скопировал, не работает

Автор: Client 30.12.2007 21:47

А сама прога там же (в BIN)?
А остальные тож скопировал (Graph.Tpu)?

Автор: Accer 30.12.2007 21:52

ЕГО НЕТ blink.gif

Автор: andriano 30.12.2007 22:09

В посте #3 ты писал, что точку нарисовать можешь. Как ты это делаешь?
Каким ты компилятором пользуешься?

Автор: Accer 30.12.2007 22:10

А как узнать

Автор: andriano 30.12.2007 22:40

Спросить

Автор: Accer 30.12.2007 22:41

smile.gif , Но как узнать какой компилятор?

Автор: Lapp 30.12.2007 22:56

Цитата(Accer @ 30.12.2007 18:41) *

как узнать какой компилятор?

Нажми Help -> About

Автор: Accer 31.12.2007 0:20

Turbo Pascal
Version 7.0

Автор: andriano 31.12.2007 0:29

Цитата(Accer @ 30.12.2007 20:20) *

Turbo Pascal
Version 7.0

GRAPH.TPU должен быть в той же папке, что и GRAPH3.TPU.
Если его нет - компилятор установлен не полностью.

Автор: Accer 1.01.2008 18:46

А что делать?
Как его дополнить?

Автор: volvo 2.01.2008 13:26

Цитата
А что делать?

Забрать файл вот отсюда:
http://forum.pascal.net.ru/index.php?s=&showtopic=6212&view=findpost&p=46621
и распаковать его в папку с твоей программой...

Автор: Гость 2.01.2008 13:41

А где можно скачать полную версию?

Автор: volvo 2.01.2008 14:27

Полную версию ЧЕГО? TP 7 - это коммерческий компилятор, и его распространение подобным образом запрещено, в том числе и http://forum.pascal.net.ru/rules.html пункт 1.6 (это так, на всякий случай информация для тех, кто захочет его выложить или дать ссылку)... Последний НЕкоммерческий - Turbo Pascal 5.5

Автор: Гость 2.01.2008 15:03

blink.gif

Автор: Feagor 2.01.2008 22:49

fpc вроде же не коммерческий, поэтому можна дам ссылочку, чтоб парень не парился,а? Думаю можна...
ftp://ftp.freepascal.org/pub/fpc/dist/i386-win32-2.2.0/fpc-2.2.0.i386-win32.exe на здоровье, правда весит 30 мегов