Перевод мировых координат в экранные
Основные правила
- Целые значения
- Начало координат
- Масштабирование
Можно для масштабирования сделать вычисления для конкретной программы. Общий подход – расчет масштабных коэффициентов в программе.
Пример
8.Примеры программ
Пример1. Графика в текстовом режиме.
uses Crt, dos;
var i:integer;
reg:registers;
begin
clrscr;
TextMode(3);
HighVideo;
TextBackground(Black);
textcolor(white);
Writeln('Bright');
LowVideo;
Writeln('Dark');
{delete cursor}
with reg do begin
ah:=$01;
Ch:=Hi($2000);
CL:=Lo($2000);
intr($10, reg);
end;
readln;
{ Green characters on black}
window(1,1,15,12);
textbackground(magenta);
clrscr;
TextColor(Green);
WriteLn(' Hey there!');
writeln(' ╔═════════╗');
for i:=1 to 8 do
writeln(' ║ ║');
writeln(' ╚═════════╝');
textcolor(green+blink);
textbackground(yellow);
gotoxy(6,3);
writeln('hello');
textcolor(green);
textbackground(blue);
gotoxy(7,6);
writeln('/│\');
gotoxy(6,7);
writeln('//│\\');
gotoxy(5,8);
writeln('///█\\\');
gotoxy(8,9);
writeln('█');
for i:=1 to 10 do begin
gotoxy(8,5);
textcolor(yellow);
writeln('*');
{Sound(500);} { Beep }
Delay(2400); { For 400 ms }
{NoSound;}
textcolor(red);
gotoxy(8,5);
writeln('*');
delay(1300);
end;
window(1,1,80,25);
{norm cursor}
with reg do begin
ah:=$01;
Ch:=Hi($0607);
CL:=Lo($0607);
intr($10, reg);
end;
NormVideo; { Original attribute }
textbackground(green);
textcolor(white);
gotoxy(1,20);
WriteLn('Back ...');
readln
end.
Пример2. Цветные фигуры и линии
uses Graph;
var
grDriver : Integer;
grMode : Integer;
ErrCode : Integer;
begin
grDriver := Detect;
InitGraph(grDriver, grMode, 'bgi');
ErrCode := GraphResult;
if ErrCode = grOk then
begin { Do graphics }
SetColor(White);
SetLineStyle (SolidLn,0,NormWidth);
SetFillStyle (SolidFill,Red);
PieSlice(100,200,45,135,80);
SetColor (Red);
SetLineStyle(SolidLn,0,ThickWidth);
SetFillStyle (SolidFill,Yellow);
Rectangle(300,10,400,70);
FloodFill(350,50,Red);
SetColor(Green);
SetLineStyle (DashedLn,0,ThickWidth);
Line(0,GetMaxY,GetMaxX,0);
SetColor(Cyan);
SetLineStyle (SolidLn,0,NormWidth);
SetFillStyle(XHatchFill,Red);
Circle(500,250,50);
FloodFill(500,250,cyan);
Readln;
CloseGraph;
end
else
Writeln('Graphics error:', GraphErrorMsg(ErrCode));
end.
Пример 3. Движущийся круг
uses crt,
Graph;
var
Gd, Gm: Integer;
P: Pointer;
Size: Word;
i:integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, ' ');
if GraphResult <> grOk then
Halt(1);
setcolor(magenta);
for i:=1 to 10 do
circle(20,30,i);
Size := ImageSize(10, 20, 30, 40);
GetMem(P, Size); { Allocate memory on heap }
GetImage(10, 20, 30, 40, P^);
readln;
ClearDevice;
for i:=1 to 120 do
begin
PutImage(10+i, 30, P^, NormalPut);
delay(100);
end;
Readln;
CloseGraph;
end.
Варианты заданий
- Веселая картинка с использованием движущейся строки и меняющихся цветных окон (текстовая графика).
- Пользуясь только процедурой PutPixel, создать процедуру вывода на экран
· линии заданного цвета по заданным координатам;
· не закрашенного прямоугольника с контуром заданного цвета по координатам углов;
· окружности по заданным радиусу и координатам центра;
- Пользуясь функциями модуля Graph, создать изображение по заданию преподавателя:
· “Калейдоскоп ” из цветных линий;
· именинный торт со свечами;
· звездное небо;
· кораблик на волнах;
· часы;
· детскую пирамидку;
· транспортное средство;
· коробку с карандашами;
· дом с трубой;
·
- “Оживить” полученное изображение.
Приложение 1
Таблица для ASCII-кодов

Таблица символов для кодов 1 ‑32
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ☺
| ☻
| ♥
| ♦
| ♣
| ♠
| •
| ◘
| ○
| ◙
| ♂
| ♀
| ♪
| ♫
| ☼
| ►
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ◄
| ↕
| ‼
| ¶
| §
| ▬
| ↨
| ↑
| ↓
| →
| ←
| ∟
| ↔
| ▲
| ▼
|
|
,