Помогите с графикой! Нужно изобразить точку, совершающую независимые гармонические колебания с частотой 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
а как задать связать с формулой???
andriano
28.12.2007 23:41
Связать что с чем?
Небольшое уточнение в алгоритме: рисуем, делаем небольшую задержку, чтобы показать пользователю, удаляем, вычисляем новвые координаты, рисуем, задержка, удаляем...
Accer
29.12.2007 0:51
Чужак
29.12.2007 2:02
Что-то недополнял задание. Точка должна колебаться либо в вертикальной, либо в горизонтальной плоскости (по выбору пользователя)/или же одновременно в вертикальной и горизонтальной (тогда как это реализовать-направлений движения-четыре вверх/вниз/вправо/влево, а точка то одна)?
Accer
29.12.2007 9:27
А можно увидеть пример с простым движением точки туда обратно
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)
А можно увидеть пример с простым движением точки туда обратно
Можно, увидишь... Я тут делаю программу, которая условно называется "визуализатор синусоид". (В программе использован фрагмент кода 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!!!!
Что делать
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
ЕГО НЕТ
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
, Но как узнать какой компилятор?
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
Цитата
А что делать?
Забрать файл вот отсюда: Проблема с подключением и распаковать его в папку с твоей программой...
Гость
2.01.2008 13:41
А где можно скачать полную версию?
volvo
2.01.2008 14:27
Полную версию ЧЕГО? TP 7 - это коммерческий компилятор, и его распространение подобным образом запрещено, в том числе и правилами этого форума пункт 1.6 (это так, на всякий случай информация для тех, кто захочет его выложить или дать ссылку)... Последний НЕкоммерческий - Turbo Pascal 5.5
Гость
2.01.2008 15:03
Feagor
2.01.2008 22:49
fpc вроде же не коммерческий, поэтому можна дам ссылочку, чтоб парень не парился,а? Думаю можна... качай на здоровье, правда весит 30 мегов
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.