Otvety
.pdfнаправо или сверху вниз) и принимает значения 0 - HorizDir ,1 - VertDir. Параметр Size определяет размер символов и изменяется от 1 до 10.
30.PROCEDURE OutText(S: STRING); - выводит текст на графический экран, используя текущие координаты графического курсора (процедура WRITE[LN] в графическом режиме не работает).
31.PROCEDURE OutTextXY(X,Y: Integer; S: STRING); - выводит текст на графический экран,
используя координаты X,Y.
32.PROCEDURE SetTextJustify(Horiz, Vert: Word); - устанавливает способ позиционирования текста. Параметр Horiz может принимать значения:
0 |
- LeftText - по левому краю, |
1 |
- CenterText - по середине текста, |
2 |
- RightText - по правому краю. |
Параметр Vert может принимать значения:
0 |
- BottomText - по нижнему краю, |
1 |
- CenterText - по середине текста, |
2 |
- TopText - по верхнему краю. |
Не пренебрегайте этой процедурой, если хотите аккуратно вывести подписи к вашему рисунку.
33.FUNCTION TextWidth(S: STRING): Word; - возвращает длину текста в пикселах.
34.FUNCTION TextHeight(S: STRING): Word; - возвращает высоту текста в пикселах.
35.PROCEDURE SetVisualPage(Page : Word); - устанавливает видимую графическую страницу (если в данном графическом режиме есть несколько видеостраниц). Page - номер страницы, равный 0,1 и т.д.
36.PROCEDURE SetActivePage(Page : Word); - устанавливает текущую графическую страницу, куда будет направлен весь вывод. Две последние процедуры могут быть использованы для создания мультипликации.
37.PROCEDURE SetGraphMode(Mode: Integer); - устанавливает графическую моду.
Большинство графических драйверов допускает несколько мод. Какой графический драйвер задействован в данном компьютере, можно узнать по значению параметра GrDriver после выполнения процедуры InitGraph. Присваивая этой переменной значение DETECT, мы не задаем никакого драйвера, а лишь указываем, что процедура сама должна определить этот драйвер. В Паскале определены следующие константы драйверов:
DETECT=0, CGA=1, MCGA=2, EGA=3, EGA64=4, EGAMONO=5, IBM8514=6, HERCMONO=7,
ATT400=8, VGA=9, PC3270=10. При успешном выполнении процедура InitGraph возвратит одно из этих значений через параметр GrDriver. Параметру GrMode присваивается значение установленной графической моды (от 0 до 4), причем устанавливается старшая мода. У драйвера VGA есть три моды, различающиеся разрешением экрана и количеством видеостраниц:
0 - 640 ´ 200, 4 страницы,
1 - 640 ´ 350, 2 страницы,
2 - 640 ´ 480, 1 страница.
Именованные константы для графических мод также описаны в модуле Graph; так, для перечисленных выше мод это: VGALo, VGAMed, VGAHi.
38.FUNCTION GetGraphMode : Integer; - возвращает установленную графическую моду.
39.PROCEDURE RestoreCrtMode; - устанавливает текстовый режим монитора. Эта процедура совместно с SetGraphMode может использоваться для отладки графических программ. Предположим, что мы написали, но пока еще не отладили графическую программу. Мы хотим вывести какую-либо информацию, вычисляемую программой, на
экран, но использовать для вывода процедуру OutText довольно затруднительно. Организуем нашу программу следующим образом :
... InitGraph ... { здесь мы хотим вывести информацию } RestoreCrtMode; WRITELN(...
{ вернемся в графику } SetGraphMode(GetGraphMode); ...
40. FUNCTION GraphResult :Integer; - возвращает код завершения последней графической операции; если этот код равен grOK (=0), то операция выполнена успешно, в противном случае произошла ошибка.
Билет №14. Машинная графика. Элементы управления на языке Паскаль.
Чтобы создать элементы управления (кнопки, метки, списки) в языке PascalABC.NET - необходимо воспользоваться одним из конструкторов класса ButtonABC (этот класс находится в модуле ABCButtons, который необходимо добавить к проекту):
uses
GraphABC, ABCButtons; begin SetWindowTitle('Кнопки'); SetWindowWidth(300); SetWindowHeight(300);
var btnTimer := new ButtonABC(10, 250, 120, 24, 'Запустить таймер', clMoneyGreen); end.
Кнопке дано имя btnTimer, по которому к ней можно обращаться. Перед именем ставится префикс btn, чтобы отличать кнопку от других элементов управления. Размеры кнопки можно изменить при помощи следующих свойств: btnTimer.Width:= 160;
btnTimer.Height:= 32;
Для перемещения кнопки используются свойства Left и Top:
btnTimer.Left:= 20; btnTimer.Top:= 150;
Можно одновременно изменять обе координаты, указав в скобках новые координаты левого верхнего угла элемента управления:
btnTimer.Position:= new Point(40, 100);
Такое же действие оказывает на кнопку и метод MoveTo, который перемещает её в заданное место окна. Заставим кнопку беспрерывно перемещаться по экрану:
var offset:=-1; var left:=10; var top:= 148;
While (True) do begin
For var i:=1 To 80 do begin left:=left-offset; top:=top+offset; btnTimer.MoveTo(left,top); Sleep(10);
End; //For offset:= - offset; End; //While
Добавим к программе процедуру-обработчик события Onclick, которое возникает при нажатии на кнопку; procedure btnTimer_OnClick;
begin
btnTimer.Text := 'Остановить таймер'; end;
btnTimer.OnClick := btnTimer_OnClick;
полный код программы
После того как мы остановим таймер, должна вернуться первоначальная надпись - поправим нашу процедуру: procedure btnTimer_OnClick;
begin
if (btnTimer.Text := 'Остановить таймер') then btnTimer.Text := 'Запустить таймер'
else
btnTimer.Text := 'Остановить таймер'; end;
полный код программы
Когда надписи на кнопке стали правильные, осталось добавить таймер, который также является элементом управления, но невизуальным (невидимым)..
_timer := new Timer(1000, timer_OnTick);
Первый параметр в конструкторе отвечает за время срабатывания таймера. В данном случае оно равняется одной секунде, или 1000 миллисекунд. Это значит, что через каждую секунду будет происходить событие Tick, которое мы сможем обрабытывать в процедуре timer_OnTick
Значение свойства Inretval задается в миллисекундах, а нужны секунды, придётся его поделить на 1000. Прошедшее после нажатия на кнопку время - выводим в заголовке окна приложения:
procedure timer_OnTick; begin
time:= time + _timer.Interval/1000; Window.Title:= ' Прошло: ' + time.ToString(); end;
Необходимо, чтобы таймер начал отсчёт времени только после нажатия на кнопку, то его нужно запустить в процедуре btnTimer_OnClick методом Start:
procedure btnTimer_OnClick; begin
if (btnTimer.Text = 'Остановить таймер') then begin
btnTimer.Text := 'Запустить таймер'; _timer.Stop();
end else begin
btnTimer.Text := 'Остановить таймер'; _timer.Start();
end end;
Метод Stop останавливает таймер после его запуска методом Start.
полный код программы
Для вывода информации лучше использовать элемент управления метку, а не заголовок окна.
В паскале такого ЭУ нет, но можно использовать обычный объект прямоугольник типа RectangeABC, который описан в модуле ABCObjects. Добавим его:
uses GraphABC, ABCButtons, Timers; ABCObjects;
Объявляем глобальную переменную типа RectangeABC: lblNime: RectangleABC;
В основной программе создаём метку с помощью ключевого слова new: lblNime:= new RectangleABC(10, 18, 120, 26, Color.White); lblNime.FontStyle:= fsBold;
Надпись на метке выведем в процедуре timer_OnTick: procedure timer_OnTick;
begin
time:= time + _timer.Interval/1000; Window.Title:= ' Прошло: ' + time.ToString(); lblNime.Text:= ' Прошло: ' + time.ToString(); end;
полный код программы
Размеры метки, а также её положение в окне приложения можно задать с помощью свойств Width, Height, Left и Top.
Заменим одну кнопку, которая отвечала за старт и остановку таймера, двумя:
var
btnSrart, btnStop : ButtonABC;
//КНОПКИ
btnSrart := new ButtonABC(10, 148, 140, 30, 'Запускаем таймер', clMoneyGreen);
//процедура - обработчик: btnSrart.OnClick := btnSrart_OnClick;
btnStop := new ButtonABC(170, 148, 140, 30, 'Остановить таймер', clMoneyGreen); //процедура - обработчик:
btnStop.OnClick := btnStop_OnClick;
Пока таймер не запушен, правая кнопка лишняя. Уберем правую кнопку:
btnStop.Visible := false;
Для этого используем свойство Visible, которое есть у кнопок. Если оно равняется false, то кнопка исчезает с экрана, если true, то снова появляется.
С двумя кнопками процедуры – обработчики стали проще:
procedure btnSrart_OnClick; begin
btnSrart.Visible := false; btnStop.Visible := true; _timer.Start();
end;
procedure btnStop_OnClick; begin
btnStop.Visible := false; btnSrart.Visible := true; _timer.Stop();
end;
полный код программы
Билет №15. Машинная графика. Методы анимации.
Компьютерная анимация — вид анимации, создаваемый при помощи компьютера. На сегодня получила широкое применение как в области развлечений, так и в производственной, научной и деловой сферах. Являясь производной от компьютерной графики, анимация наследует те же способы создания изображений:векторный,растровый,фрактальный,3d.
По принципу анимирования можно выделить несколько видов компьютерной анимации.
1)Анимация по ключевым кадрам
Расстановка ключевых кадров производится аниматором. Промежуточные же кадры генерирует специальная компьютерная программа. Этот способ наиболее близок к традиционной рисованной анимации, только роль фазовщика берет на себя компьютер, а не человек.
2) Запись движения Данные анимации записываются специальным оборудованием с реально двигающихся
объектов и переносятся на их имитацию в компьютере. Распространенный пример такой техники — Захват движений. Актеры в специальных костюмах с датчиками, совершают перемещения по студии, а их движение записывается камерами и анализируется специальным программным обеспечением. Итоговые данные о перемещении суставов и конечностей актеров применяют к трехмерным скелетам виртуальных персонажей, чем добиваются высокого уровня достоверности их движения.
3) Процедуральная анимация Такая анимация полностью или частично рассчитывается компьютером. Сюда можно включить следующие её виды:
Симуляция физического взаимодействия твердых тел Имитация движения систем частиц, жидкостей и газов Имитация взаимодействия мягких тел (ткани, волос)
Расчет движения иерархической структуры связей (скелета персонажа) под внешним воздействием Имитация автономного (самостоятельного) движения персонажа
4)Программы для создания анимации с помощью цифрового фотоаппарата Программное обеспечение, позволяющее задействовать цифровой фотоаппарат для съемки анимации, применяется также часто, как и, ставшие привычными, 3D или 2D пакеты. Любая программа такого типа обеспечивает управление цифровым фотоаппаратом через компьютер и работу с полученными кадрами.
Графические возможности Delphi. Canvas.
Canvas обеспечивает пространство (холст, канву) для создания, хранения и модификации графических объектов. Canvas является основой графической подсистемы Delphi. Канва обеспечивает:
ØЗагрузку и хранение графических изображений
ØСоздание новых и изменение хранимых изображений с помощью пера, кисти, шрифта
ØРисование и закраску различных фигур, линий, текстов
ØКомбинирование различных изображений
Основные методы Canvas Arc
Рисует дугу окружности или эллипса
Arc(x1,y1,x2,y2,x3,y3,x4,y4: Integer) Chord
Рисует заполненную замкнутую фигуру, ограниченную дугой окружности или эллипса и хордой
Chord (x1,y1,x2,y2,x3,y3,x4,y4:Integer); Draw
Рисует графическое изображение в указанную позицию канвы
Draw (x,y:Integer;Graphic:TGraphic); DrawFocusRect
Рисует изображение прямоугольника в виде, используемом для отображения рамки фокуса, операцией XOR
DrawFocusRect (const Rect:TRect); Ellipse
Рисует заполненную окружность или эллипс
Ellipse (x1,y1,x2,y2:Integer); FillRect
Заполняет указанный прямоугольник канвы, используя текущее значение Brush. FillRect(const: TRect);
FloodFill
Закрашивает текущей кистью замкнутую область канвы, определенным цветом.
Type TFillStyle = (fsSurfase, fsBorder);
и т.д)
Билет №16. Машинная графика. Метод canvas в DELPHI и JAWA SCRIPT.
Работа с графикой в Delphi предполагает обращение к свойству Canvas компонентов. Для программист Canvas в Delphi – это холст, который дает доступ к каждому пикселю. Конечно, рисовать попиксельно для работы с графикой в Delphi не приходится, система Delphi предоставляет мощные средства работы с графикой, облегчающие задачу программиста.
В работе с графикой в Delphi, у вас в распоряжении находится канва(холст, а точнее свойство Canvas Delphi компонентов), кисть(свойство Brush), карандаш(свойство Pen) компонента на которым мы собираемся рисовать. У Pen и Brush есть свойство Color(цвет) и Style(стиль). Чтоб получить доступ к шрифтам, предоставлено свойство холста(Canvas) Font.
Свойства объекта Pen(Карандаш)
|
|
|
Свойство |
|
Описание |
|
|
|
Color |
|
Цвет линии |
|
|
|
Width |
|
Толщина линии(задается в пикселах) |
|
|
|
|
|
Вид линии: psSolid ― сплошная; psDash ― пунктирная, длинные штрихи; psDot - пунктирная, |
|
|
короткие штрихи; psDashDot ― пунктирная, с чередованием длинного и короткого штрихов; |
Style |
|
psDashDotDot ― пунктирная с чередованием одного длинного и двух коротких штрихов; |
|
|
psClear ― линия не отображается(используется если не надо изображать границу области, |
|
|
например прямоугольника) |
|
|
|
Свойства объекта Brush(Кисть)
|
|
|
Свойство |
|
Описание |
|
|
|
Color |
|
Цвет закраски замкнутой области. |
|
|
|
|
|
Стиль закраски области:― сплошная заливка; штриховка: bsHorizontal―горизонтальная; |
Style |
|
bsVertical―вертикальная; bsFDiagonal―диагональная с наклоном линии вперед; bsBDiagonal |
|
|
―диагональная с наклоном линии назад; bsCross―диагональная клетка. |
|
|
|
Основные свойства класса TFont
Свойство Определяет
Name
Шрифт, который используется для отобраения текста. В качестве значения следует брать название шрифта, например Arial.
|
|
|
Size |
|
Размер шрифта |
|
|
|
|
|
Стиль начертания символов. Задается с помощью констант: fsBold(полужирный), |
|
|
fsItalic(курсив), fsUnderline(подчеркнутый), fsStrikeOut(перечеркнутый). |
Style |
|
Свойство Style является множеством, что позволяет комбинировать необходимые стили. |
|
|
Например, инструкция, которая устанавливает стиль "полужирный курсив", выглдит так: |
|
|
Font.Style := [fsBold, fsItalic] |
|
|
|
|
|
|
Color |
|
Цвет символов. В качестве значения можно использовать константу типа TColor. |
|
|
|
Конечно, не все компоненты в Delphi имеют эти свойства. На вкладке Additional расположен специализированный компонент TImage, специально предназначенный для рисования, но также свойство Canvas имеют, например, такие компоненты как ListBox, ComboBox, StringGrid, а также и сама Форма, которая размещает наши компоненты!
Холст для рисования Canvas, представляет собой перевернутую систему координат XOY, где О эта верхняя левая точка компонента или формы(смотря где мы рисуем).
Константы TColor
Основное свойство такого объекта как Canvas Delphi - Pixels[i, j] типа TColor, то есть это двумерный массив точек (пикселов), задаваемых своим цветом.
Рисование на канве происходит в момент присвоения какойлибо точке канвы заданного цвета. Каждому пикселу может быть присвоен любой доступный для Windows цвет.
Для стандартных цветов в Delphi определён набор текстовых констант. Увидеть его можно, открыв в Инспекторе Объектов свойство Color, например, той же Формы.
Свойства класса TCanvas
Цвет |
|
Константа |
|
|
|
Бирюзовый |
|
clAqua |
|
|
|
Черный |
|
clBlack |
|
|
|
Синий |
|
clBlue |
|
|
|
Ярко-розовый |
|
clFuchsia |
|
|
|
Зеленый |
|
clGreen |
|
|
|
Салатовый |
|
cLime |
|
|
|
Каштановый |
|
clMaroon |
|
|
|
Темно-синий |
|
clNavy |
|
|
|
Оливковый |
|
clOlive |
|
|
|
Фиолетовый |
|
clPurple |
|
|
|
Красный |
|
clRed |
|
|
|
Серебристый |
|
clSilver |
|
|
|
Зелено- |
|
clTeal |
голубой |
|
|
|
|
|
|
|
|
Белый |
|
clWhite |
|
|
|
Свойство |
|
Описание |
|
|
|
Pen |
|
Карандаш. Определяет цвет, стиль и толщинц линии, которую рисует, например метод |
|
Lineto |
|
|
|
|
|
|
|
|
|
|
PenPos |
|
Положение(координаты) карандаша |
|
|
|
|
|
|
Brush |
|
Кисть. Определяет цвет и стиль закраски области, например прямоугольника, который |
|
рисует метод Rectangle. |
|
|
|
|
|
|
|
|
|
|
Font |
|
Шрифт. Определяет шрифт, который используется для вывода текста, например |
|
методом TextOut. |
|
|
|
|
|
|
|
Билет №17. Машинная графика. Основные функции в графическом редакторе PAINT.
Основные функции Microsoft Paint
Этот редактор является одним из самых простых графических редакторов в среде MS Windows. Paint (в переводе с английского означает «краска») представляет собой простой
однооконный редактор растровой графики, который, тем не менее, позволяет создать достаточно сложный рисунок.
Программа включает средства для построения прямых и кривых линий, эллипсов и окружностей, прямоугольников, квадратов и многоугольников (как контурных, так и закрашенных). Есть инструменты для выделения фрагмента рисунка, заливки замкнутой области цветом, а также инструменты, имитирующие рисование кистью и пульверизатором. Имеется возможность создания надписи и задания толщины линии. Доступны и некоторые операции преобразования рисунка, а именно: зеркальное отображение относительно горизонтальной и вертикальной оси, инвертирование и замена цветов, сжатие, растяжение и наклон. Однако в Paint совершенно отсутствуют разного рода эффекты и фильтры. Кроме того, этот редактор поддерживает всего несколько форматов файлов.
Основные операции с выделенным фрагментом:
1.Переместить - навести мышь внутрь фрагмента и, удерживая левую кнопку мыши, переместить мышь;
2.Скопировать - так же как переместить, но удерживая клавишу Ctrl;
3.Получить шлейф - так же как переместить, но удерживая клавишу Shift;
4.Изменить размер - навести мышь на точку в углу фрагмента или в центре каждой стороны и перетащить;
5.Отразить/Повернуть;
6.Растянуть/Наклонить;
7.Обратить цвета;
8.Очистить.
Билет №18. Машинная графика. Представление куба. Преобразования куба: повороты. uses crt,graph,xpm;
var x,y,a,alf:integer; function xs:integer;
begin xs:=round(a*cos(alf*pi/180)) end; function ys:integer; begin
ys:=round(a*sin(alf*pi/180)) end; procedure kub(p:integer);
begin setcolor(10*p); line(x,y,x+a,y); line(x+xs,y-ys,x+a+xs,y-ys); line(x,y-a,x+a,y- a); line(x+xs,y-a-ys,x+a+xs,y-a-ys); setcolor(9*p); line(x,y,x,y-a); line(x+xs,y-ys,x+xs,y-a- ys); line(x+a,y,x+a,y-a); line(x+a+xs,y-ys,x+a+xs,y-a-ys); setcolor(12*p); line(x,y,x+xs,y-ys);
line(x+a,y,x+a+xs,y-ys); line(x,y-a,x+xs,y-a-ys); line(x+a,y-a,x+a+xs,y-a-ys); end; begin
x:=3;y:=1; initgraph(x,y,''); x:=100;y:=100;a:=50;alf:=40; kub(1); readkey; kub(0); readkey; kub(1); readkey;
end.
Билет №19. Машинная графика. Представление куба. Преобразования куба: перемещение.
uses crt,graph,xpm;