Помощь - Поиск - Пользователи - Календарь
Полная версия: Задание на Pascal > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
Элио
Прошу прощения, что озаглавил тему, как "Задание на Pascal, Вопрос по литературе.". Тут уже далеко не о литературе =)
Доброго времени суток, друзья. Получил вот такое задание на выполнение:

Изобразить кривую R = a*cos(φ) + L.
Построение выполнить для a=L. Обеспечить вращение изображение в плоскости экрана против часовой стрелки с одновременным перемещением по средней горизонтали слева направо. Когда правый край экрана будет достигнут, появляются еще два изображения в верхнем и нижнем правых углах и перемещаются влево.

Как я понимаю, в выполнении этого задания мне понадобится знание Графики на Pascal. А такого у меня не имеется (изучение закончилось на динамической памяти). Теперь перехожу к вопросу. Какую литературу посоветуете? smile.gif
Inspektor
Выбирайте:
Графика. От простого к сложному.
Графика в Turbo Pascal
В первой книге есть всё о графиках. И ещё по теме:
http://rusproject.narod.ru/article/polar2.htm#cardioid
Элио
Огромное спасибо.
Элио
Хм, немножко разобрался с графикой, но всё-таки не до конца. Нарисовать фигуру (как я понял, это кардиоида) я смог, а вот сделать так, чтобы она вертелась и перемещалась что-то никак не могу. Вот мой текст программы, рисующий, кардиоиду:

Цитата
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.

Долго пытался что-то изобразить, но так и не смог. Буду рад любым подсказкам в решении данной проблемы blush.gif
crazymaster
Может быть вот так попробовать сделать.
[x,y,1] - координаты точек вашей фигуры. Ввели третью (1) компоненту для переноса по осям.
Чтобы точки вращались, нужно сначала каждую точку нарисовать, затем закрасить ее (в черный), потом преобразовать, снова нарисовать...и т.д.
Повернуть и сместить точку на плоскости можно так:
. . . . . . |cosф sinф 0|
[x,y,1]*|-sinф cosф 0|
. . . . . . | . n . . . m . 1|
n - перенос по оси x,
m - по оси y
creer
Я когда-то писал об этом в этой теме.
Там небольшой примерчик.
Чтобы добавить вращение и перемещение - я бы изменил режим вывода изображения при котором повторный вывод данного изображения его стирает (функция 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
для перемещения самое простое это после построения изображения воспользоваться процедурами 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
Inspektor
Поворота может быть и не было (в той теме, на которую я дал ссылку, есть готовый пример с поворотом), но летающую тарелочку на фоне звездного неба я помню smile.gif.
Но Фаронова лучше обсуждать в личных сообщениях wink.gif.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2025 Invision Power Services, Inc.