![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Элио |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 3 Регистрация: 19.10.2008 Город: Москва Вы: студент ![]() |
Прошу прощения, что озаглавил тему, как "Задание на Pascal, Вопрос по литературе.". Тут уже далеко не о литературе =)
Доброго времени суток, друзья. Получил вот такое задание на выполнение: Изобразить кривую R = a*cos(φ) + L. Построение выполнить для a=L. Обеспечить вращение изображение в плоскости экрана против часовой стрелки с одновременным перемещением по средней горизонтали слева направо. Когда правый край экрана будет достигнут, появляются еще два изображения в верхнем и нижнем правых углах и перемещаются влево. Как я понимаю, в выполнении этого задания мне понадобится знание Графики на Pascal. А такого у меня не имеется (изучение закончилось на динамической памяти). Теперь перехожу к вопросу. Какую литературу посоветуете? (IMG:style_emoticons/default/smile.gif) |
Inspektor |
![]()
Сообщение
#2
|
Аспирант ![]() ![]() ![]() Группа: Активисты Сообщений: 384 Регистрация: 11.6.2008 Город: Крыжополь Учебное заведение: БГТУ Вы: студент ![]() |
Выбирайте:
Графика. От простого к сложному. Графика в Turbo Pascal В первой книге есть всё о графиках. И ещё по теме: http://rusproject.narod.ru/article/polar2.htm#cardioid |
Элио |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 3 Регистрация: 19.10.2008 Город: Москва Вы: студент ![]() |
Огромное спасибо.
|
Элио |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 3 Регистрация: 19.10.2008 Город: Москва Вы: студент ![]() |
Хм, немножко разобрался с графикой, но всё-таки не до конца. Нарисовать фигуру (как я понял, это кардиоида) я смог, а вот сделать так, чтобы она вертелась и перемещалась что-то никак не могу. Вот мой текст программы, рисующий, кардиоиду:
Цитата Program Cardioida; Uses Crt, Graph; Const r=50; Var i:integer; a,L:integer; t:real; Procedure Graphinterface; Var driver, mode:Integer; Begin driver:=detect; Initgraph(driver,mode,'D:\tp7\BGI'); end; Function x(t:real):real; begin x:=(L*cos(t)+a*cos(t)*cos(t)); end; Function y(t:real):real; begin y:=(L*sin(t)+a*sin(t)*cos(t)); end; Begin t:=0; a:=2; L:=2; Graphinterface; repeat putpixel(round(r*x(t)+31),round(r*y(t)+240),4); t:=t+0.001; until t>2*pi; Readln; CloseGraph; End. Долго пытался что-то изобразить, но так и не смог. Буду рад любым подсказкам в решении данной проблемы (IMG:style_emoticons/default/blush.gif) |
crazymaster |
![]()
Сообщение
#5
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 240 Регистрация: 9.3.2007 Город: Нефтеюганск Учебное заведение: ТУСУР Вы: студент ![]() |
Может быть вот так попробовать сделать.
[x,y,1] - координаты точек вашей фигуры. Ввели третью (1) компоненту для переноса по осям. Чтобы точки вращались, нужно сначала каждую точку нарисовать, затем закрасить ее (в черный), потом преобразовать, снова нарисовать...и т.д. Повернуть и сместить точку на плоскости можно так: . . . . . . |cosф sinф 0| [x,y,1]*|-sinф cosф 0| . . . . . . | . n . . . m . 1| n - перенос по оси x, m - по оси y |
creer |
![]()
Сообщение
#6
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 121 Регистрация: 28.10.2007 Город: Екатеринбург Учебное заведение: УГТУ-УПИ Вы: студент ![]() |
Я когда-то писал об этом в этой теме.
Там небольшой примерчик. Чтобы добавить вращение и перемещение - я бы изменил режим вывода изображения при котором повторный вывод данного изображения его стирает (функция SetWriteMode, судя из справки). Затем добавил обработчик кнопок. Что-то вроде Код uses crt; begin repeat case readkey of #27:halt; {Нажата esc} '1':write('2'); {Нажата 1} '2':write('1'); {Нажата 2} else write('-'); {Все остальное} end; until keypressed; end. Помнится, по паскалю был хороший двухтомник Фаронова, в том числе там были подобные примеры. |
Inspektor |
![]()
Сообщение
#7
|
Аспирант ![]() ![]() ![]() Группа: Активисты Сообщений: 384 Регистрация: 11.6.2008 Город: Крыжополь Учебное заведение: БГТУ Вы: студент ![]() |
для перемещения самое простое это после построения изображения воспользоваться процедурами GetImage/PutImage.
С поворотом так просто не разделаться. У меня получилось такое соотношение: X=X[sub]0[/sub]+L*cos(A+1) Y=Y[sub]0[/sub]+L*sin(A+1) X и Y- это новые координаты точки (X[sub]0[/sub],Y[sub]0[/sub]). L- это расстояние от центра поворота до точки которую мы поворачиваем, а "A"- угол между горизонтальной осью экрана и прямой, которая проходит через центр поворота и точкой, которую поворачиваем. Цитата Помнится, по паскалю был хороший двухтомник Фаронова, в том числе там были подобные примеры. Не, поворота там точно нет и вообще слишком много воды в книге. ИМХО это скорее справочник, чем учебник, т.к. чтоб его до конца прочитать , надо иметь хорошую выдержку. |
creer |
![]()
Сообщение
#8
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 121 Регистрация: 28.10.2007 Город: Екатеринбург Учебное заведение: УГТУ-УПИ Вы: студент ![]() |
Inspektor
Поворота может быть и не было (в той теме, на которую я дал ссылку, есть готовый пример с поворотом), но летающую тарелочку на фоне звездного неба я помню (IMG:style_emoticons/default/smile.gif). Но Фаронова лучше обсуждать в личных сообщениях (IMG:style_emoticons/default/wink.gif). |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 25.5.2025, 16:23 |
Зеркало сайта Решебник.Ру - reshebnik.org.ru