Всё для Web Дизайнера - Pascal: Учим Turbo Pascal, введение в Turbo Pascal, основные понятия системы программирования Турбо Паскаль, основные понятия системы программирования Турбо Паскаль(Продолжение), операторы языка Паскаль, процедуры и функции, массивы, графика в системе Турбо Паскаль, графика в системе Турбо Паскаль(продолжение), графика в системе Турбо Паскаль, циклы в графике. Html, css, cgi, php, python, mysql, delphi, pascal, раскрутка сайта,  дизайн навигации, оптимизация страниц сайта, регистрация в поисковиках, шрифты, иконки, звуки, графика, картинки, обои для рабочего стола, Xak, Графика и анимация, Обои, Регистрационные ключи, лекарство для программ, взлом программ, взлом и интернет, хакеры, спам, вирусы, 3D Max, Corel Draw, Flash, Dreamweaver, Учим Turbo Pascal, введение в Turbo Pascal, основные понятия системы программирования Турбо Паскаль, основные понятия системы программирования Турбо Паскаль(Продолжение), операторы языка Паскаль, 
процедуры и функции, массивы, графика в системе Турбо Паскаль, графика в системе Турбо Паскаль(продолжение), графика в системе Турбо Паскаль, циклы в графике.

Программирование
Web мастеру
3D Графика и анимация
Сетевая безопасность

Гостевая книга
Форум
Ссылки
Услуги

Rambler's Top100
TopCTO Компьютеры цены продажа


Компьютеры

Назад     Читать дальше
На главную страницу > > В раздел программирование > > В раздел Pascal

Графика в системе Турбо Паскаль(продолжение).

Построение дуг и окружностей
Процедура вычерчивания окружности текущим цветом имеет следующий формат:
Cicrle(x, y, r: word), где x, y – координаты центра окружности, r – ее радиус.
Например, фрагмент программы обеспечит вывод ярко-зеленой окружности с радиусом 50 пикселей и центром в точке (450, 100):
SetColor(LightGreen);
Circle(450, 100, 50);
Дуги можно вычертить с помощью процедуры Arc(x, y: integer, a, b, R:integer), где x, y- центр окружности, a, b- начальный и конечный углы в градусах, R – радиус. Для задания углов используется полярная система координат.
Цвет для вычерчивания устанавливается процедурой SetColor. В случае a=0 и b=360, вычерчивается полная окружность.
Например, выведем дугу красного цвета от 0 до 90° в уже вычерченной с помощью Circle(450, 100, 50) окружности:
SetColor(Red);
Arc(450, 100, 0, 90,50);
Для построения эллиптических дуг предназначена процедура Ellipse (x, y: integer, a, b, Rx, Ry: integer), где x, y – центр эллипса, Rx, Ry: горизонтальная и вертикальная оси. В случае a=0 и b=360 вычерчивается полный эллипс. Например, построим голубой эллипс:
SetColor(9);
Ellipse(100, 100, 0, 360, 50,50);
Фон внутри эллипса совпадает с фоном экрана. Чтобы создать закрашенный эллипс, используется специальная процедура FillEllipse (x, y: integer, Rx, Ry: integer). Закраска эллипса осуществляется с помощью процедуры SetFillStyle (a, b: word), где а – стиль закраски (таблица 4), b – цвет закраски (таблица 1). Например, нарисуем ярко-красный эллипс, заполненный редкими точками зеленого цвета:
SetFillStyle(WideDotFill, Green); { установка стиля заполнения}
SetColor(12); {цвет вычерчивания эллипса}
FillEllipse(300, 150, 50, 50);

Стандартные стили заполнения
Константа Значение Маска
EmptyFill 0 Заполнение цветом фона
SolidFill 1 Заполнение текущим цветом
LineFill 2 Заполнение символами --, цвет – color
LtslashFill 3 Заполнение символами // нормальной толщины, цвет – color
SlashFill 4 Заполнение символами // удвоенной толщины, цвет – color
BkslashFill 5 Заполнение символами удвоенной толщины, цвет – color
LtbkSlahFill 6 Заполнение символами нормальной толщины, цвет – color
HatchFill 7 Заполнение вертикально-горизонтальной штриховкой тонкими линиями, цвет – color
XhatchFill 8 Заполнение штриховкой крест-накрест по диагонали «редкими» тонкими линиями, цвет – color
InterLeaveFill 9 Заполнение штриховкой крест-накрест по диагонали «частыми» тонкими линиями, цвет – color
WideDotFill 10 Заполнение «редкими» точками
CloseDotFill 11 Заполнение «частыми» точками
UserFill 12 Заполнение по определенной пользователем маске заполнения, цвет – color
таблица 4
Для построения секторов можно использовать следующие процедуры:
PieSlice (x, y: integer, a, b, R: word), которая рисует и заполняет сектор круга. Координаты x, y – центр окружности, сектор рисуется от начального угла a до конечного угла b, а закрашивание происходит при использовании специальных процедур;
Sector (x, y: integer, a, b, Rx, Ry: word), которая создает и заполняет сектор в эллипсе. Координаты x, y – центр, b, Rx, Ry – горизонтальный и вертикальный радиусы, и сектор вычерчивается от начального угла a до конечного угла b.
Пример использования PieSlice:
SetFillStyle(10, 10); {установка стиля}
SetColor(12); {цвет вычерчивания}
PieSlice(100, 100, 0, 90, 50);
Пример использования Sector:
SetFillStyle(11, 9); {установка стиля}
SetColor(LightMagenta); {цвет вычерчивания}
Sector(300, 150, 180, 135, 60, 70);
Глава 6. Графика в системе Турбо Паскаль
Работа с текстом
Вывод текста
Выводимые на экран изображения лучше всего сопровождать пояснительным текстом. В графическом режиме для этого используются процедуры OutText и OutTextXY.
Процедура OutText(Textst: string) выводит строку текста, начиная с текущего положения указателя. Например, OutText(‘нажмите любую клавишу’); Недостаток этой процедуры – нельзя указать произвольную точку начала вывода.
В этом случае удобнее пользоваться процедурой OutTextXY(x, y: integer, Textst: string), где x, y – координаты точки начала вывода текста, Textst – константа или переменная типа String. Например, OutTextXY(60, 100, ‘Нажмите любую клавишу’)

Вывод численных значений
В модуле Graph нет процедур, предназначенных для вывода численных данных. Поэтому для вывода чисел сначала нужно преобразовать их в строку с помощью процедуры Str, а затем подключить посредством ‘+’ к выводимой строке.
Например: Max:=34.56;
Str(Max : 6 : 2, Smax);{результат преобразования находится в Smax}
OutTextXY(400, 40, ‘Максимум=’ + Smax);
Для удобства преобразование целочисленных и вещественных типов данных в строку лучше осуществлять специализированными пользовательскими функциями IntSt и RealSt:

function IntSt(Int: integer) : string;
var Buf : string[10];
begin
Str(Int, Buf);
IntSt := Buf;
end;
function RealSt(R : real, Dig, Dec : integer) : string;
var Buf: string[20];
begin
Str(R : Dig : Dec, Buf);
RealSt := Buf;
end;
Эти функции указываются как параметры в процедурах OutText и OutTextXY. Например: x:= 5.295643871;
OutTextXY(20, 20, ‘x=’+RealSt(x,11,9));
В результате на экране появится x=5.29564443871

Шрифты
Вывод текста в графическом режиме может осуществляться различными стандартными (таблица 5) и пользовательскими шрифтами. Различают два типа шрифтов: растровые и векторные. Растровый шрифт задается матрицей точек, а векторный – рядом векторов, составляющих символ.
По умолчанию после инициализации графического режима устанавливается растровый шрифт DefaultFont, который, как правило, является шрифтом, используемым драйвером клавиатуры.
Стандартные шрифты
Шрифт Файл
TriplexFont Trip.chr
SmallFont Litt.chr
SansSerifFont Sans.chr
GothicFont Goth.chr
таблица 5

Большинство стандартных шрифтом не содержат русских символов. Разработка же собственных шрифтов – довольно сложный и трудоемкий процесс. Он может быть ускорен, если воспользоваться специализированными пакетами TurboFont, BgiToolKit.
Установить нужный шрифт можно процедурой SetTextStyle(Font,d,c:word), где Font – выбранный шрифт, d – направление ( горизонтальное или вертикальное), с – размер выводимых символов. Возможные значения двух первых параметров представлены в таблице 5. При организации вертикального вывода необходимо учитывать, что если не установить точку начала вывода с помощью MoveTo, то текст начинается с нижней строки экрана и продолжается вверх. Величина символов устанавливается коэффициентом с. Если с=1, то символ строится в матрице 8ґ8, если с= 2, то матрица 16ґ16 и т.д. до 10-кратного увеличения.
Например выведем 2 строки (вертикальную и горизонтальную) шрифтом DefaultFont разной величины:
SetTextStyle(0,11); {буквы стандартной величины}
OutTextXY(200,200, ‘Вертикальная строка’);
SetTextStyle(0,0,2); {размер букв увеличен}
OutTextXY(200,220, ‘Горизонтальная строка’);

Выравнивание текста
В некоторых случаях требуется в пределах одной строки выводить символы выше или ниже друг друга. Выравнивание текста выполняется с помощью процедуры SetTextJustify(Horiz, Vert : word) как по вертикали, так и по горизонтали посредством задания параметров Horiz и Vert (возможные значения в таблице 6).
Параметры выравнивания
Параметр Значение Комментарий
Горизонтальное выравнивание
LeftText 0 Выровнять влево
CenterText 1 Центрировать
RightText 2 Выровнять вправо
Вертикальное выравнивание
BottomText 0 Переместить вниз
CenterText 1 Центрировать
TopText 2 Переместить вверх
таблица 6
В качестве примера выведем x2:
SetTextJustify(1, 1);
OutTextXY(100,100, ‘X’);
SetTextJustify(1, 0);
OutTextXY(108,100, ‘2’);
Глава 6. Графика в системе Турбо Паскаль
Построение графиков функций
Для построения графиков функций при помощи графического режима предполагается свободное владение учениками понятием функции, ее графическим и аналитическим представлением. Необходимо также использовать операторы цикла, которые помогут избежать однообразного труда по вычислению ординаты каждой точки.
До сих пор при создании рисунков использовали только первый квадрант системы координат. Для построения большинства функций в требуемом интервале изменения необходимо работать хотя бы в двух квадрантах. В общем случае полезно изображать систему координат в любой части плоскости, но наиболее наглядно располагать ее в центре экрана. В таких случаях, установив начало координат в точке (x0, y0) на экране, можно координаты (x, y) произвольной точки кривой определять разностью (x-x0, y-y0). После этого в программе можно употреблять не только положительные, но и отрицательные значения.
Рисунок получается маленьким, поэтому требуется увеличить масштаб изображения. Если для функции будет использован весь экран, надо увеличить рисунок по x и по y в зависимости от выбранного экрана.
Выбрать масштаб увеличения можно следующим образом:
-определить горизонтальный и вертикальный размеры графика (для этого вводятся границы области значений и определяются максимальное и минимальное значение функции на заданной области определения, затем вычисляются разности максимального и минимального значений аргументов и функции, которые и являются горизонтальным и вертикальным размерами графика соответственно);
-определить масштаб (сначала определяются масштабы изображения по горизонтали и вертикали с учетом размеров выбранного экрана по формуле:
масштаб(г/в) = размер экрана (по г/в) / размер графика (по г/в), затем из них выбирается меньший, который и принимается за необходимый масштаб. В нашем случае графический экран имеет размеры 640 на 480.
В любом случае, чтобы высветить на экране точку, надо взять x, вычислить по данной абсциссе y и выполнить рисование точки. Так как на экране можно получить лишь ограниченное количество значений х, то их перебираем с помощью цикла.
Пример. Построить график функции y=x2
Вариант 1
program f;
uses graph;
var gd, gm: integer;
x, y: real;
begin
gd:= detect;
initgraph( gd, gm, ‘c/ bp’);
SetColor(5);
Line(0, 240, 640, 240);
Line(320, 0, 320, 480);
x:= -20;
While x<=20 do
begin
y:= -Sqr(x);
PutPixel( x *5 + 320, y*5 +240, 15);
x:=x + 0.01;
end;
end.

Вариант 2
program f;
uses graph, crt;
var gd, gm: integer;
x, y, mx, my, m,x1, x2, y1, y2,h: real;
function f(x:real): real;
begin
f:= Sqr(x);
end;
clrscr;
Write(‘Введите границы отрезка’);
Read(x1, x2);
y1:=f(x1); y2:=f(x2);
mx:=640 /(x2 –x1);
my:=480 / (y2 – y1);
If mx< my Then m:=mx
else m:= my;
h:= 1/m; x:=x1;
gd:= detect;
initgraph(gd, gm, ‘c/ bp’);
SetColor (5);
Line(0, 240, 640, 240);
Line(320, 0, 320, 480);
While x<= x2 do
begin
y:= -f(x);
PutPixel(x *m +320, y*m +240, 15);
x:= x+ h;
end;
end.
Рассмотрим построение графика функции, заданной параметрически. В отличие от функции, заданной в явном виде y=f(x), параметр х в этом случае также является функцией, зависящей от некоторого значения.
Пример.
Построить график функции (кардиоида)
x = a cos t ( 1+ cost), y = a sin t( 1+cost), a > 0, t О [0, 2p )
Приведем фрагмент программы:
SetColor (5);
Line(0, 240, 640, 240);
Line(320, 0, 320, 480);
t:=0; a:=3;
While t<= 3.1415 do
begin
x:=a*cos(t)*(1+cos(t));
y:= - a sin(t)*(1+cos(t));
PutPixel(x*5 +320, y*5 +240, 15);
x:= x+ 0.01;
Назад     Читать дальше
На главную страницу > > В раздел программирование > > В раздел Pascal

Hosted by uCoz