Помощь - Поиск - Пользователи - Календарь
Полная версия: Графика. Двужущаяся точка.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Accer
Помогите с графикой! Нужно изобразить точку, совершающую независимые гармонические колебания с частотой w1 по горизонтали и с частотой w2 по вертикали. (амплитуда тех и других колебаний равна а). Считать, что в момент времени t точка имеет координаты x=a cos w1(t-t1) y=a cos w2(t-t2); t1 и t2 даны. Предусмотреть возможность управления с клавиатуры значениями w1 и w2.
Lapp
Что именно не получается с графикой?
Рисуешь точку, запоминаешь координаты, пересчитываешь координаты на новое положение, стираешь точку в старом положении, рисуешь в новом... и т.д...
Accer
В графике ноль. Точку могу с трудом нарисовать.
andriano
Цитата(Accer @ 28.12.2007 7:23) *
Точку могу с трудом нарисовать.
Судя по условию, именно это от тебя и требуется. :D
Реально по такому задаию можно сделать очень красивую программу, рисующую фигуры Лиссажу.
ПОказывай, что уже сделал.
Accer
Я не понимаю алгоритм работы этой программы!!!
Рисуем точку-удаляеи-русуем в другом месте-снова удаляем-...-повторяем все снова?
Ozzя
Абсолютно верно! Алгоритм понят.
Accer
smile.gif а как задать связать с формулой???
andriano
Связать что с чем?

Небольшое уточнение в алгоритме: рисуем, делаем небольшую задержку, чтобы показать пользователю, удаляем, вычисляем новвые координаты, рисуем, задержка, удаляем...
Accer
wacko.gif wacko.gif wacko.gif
Чужак
Что-то недополнял задание.
Точка должна колебаться либо в вертикальной, либо в
горизонтальной плоскости (по выбору пользователя)/или же
одновременно в вертикальной и горизонтальной
(тогда как это реализовать-направлений движения-четыре
вверх/вниз/вправо/влево, а точка то одна)?
Accer
А можно увидеть пример с простым движением точки туда обратно smile.gif
Lapp
Цитата(Чужак @ 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
Спасибо, я попоробую сделать
Чужак
Цитата(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
Цитата(Чужак @ 29.12.2007 22:11) *

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

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

Что делать unsure.gif
Client
Скопируй из папки Units файлы Graph.Tpu в папку BIN
Accer
GRAPH3.TPU был, его скопировал, не работает
Client
А сама прога там же (в BIN)?
А остальные тож скопировал (Graph.Tpu)?
Accer
ЕГО НЕТ blink.gif
andriano
В посте #3 ты писал, что точку нарисовать можешь. Как ты это делаешь?
Каким ты компилятором пользуешься?
Accer
А как узнать
andriano
Спросить
Accer
smile.gif , Но как узнать какой компилятор?
Lapp
Цитата(Accer @ 30.12.2007 18:41) *

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

Нажми Help -> About
Accer
Turbo Pascal
Version 7.0
andriano
Цитата(Accer @ 30.12.2007 20:20) *

Turbo Pascal
Version 7.0

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

Забрать файл вот отсюда:
Проблема с подключением
и распаковать его в папку с твоей программой...
Гость
А где можно скачать полную версию?
volvo
Полную версию ЧЕГО? TP 7 - это коммерческий компилятор, и его распространение подобным образом запрещено, в том числе и правилами этого форума пункт 1.6 (это так, на всякий случай информация для тех, кто захочет его выложить или дать ссылку)... Последний НЕкоммерческий - Turbo Pascal 5.5
Гость
blink.gif
Feagor
fpc вроде же не коммерческий, поэтому можна дам ссылочку, чтоб парень не парился,а? Думаю можна...
качай на здоровье, правда весит 30 мегов
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.