Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
А4 Математики 2 курс 3 семестр.doc
Скачиваний:
10
Добавлен:
19.11.2019
Размер:
1.19 Mб
Скачать

Приклад 3

Завдання: Зобразити куб (перший октант, шпиль у початку координат, ребро = 5), відсічений кулею радіусу 2 з центром у точці (5,0,5).

program example3;

Uses Crt, Graph; { Підключення бібліотечних модулів }

const num: array[1..10] of char=('1','2','3','4','5','6','7','8','9','0');

var x,y,i: integer;

edmas: integer;

Gdriver, Gmode: integer;

x1, y1, x2, y2, x3, y3: real;

xt, yt: real;

maxx, maxy: integer;

begin

DetectGraph(Gdriver, Gmode); { Визначаємо графічний режим роботи }

InitGraph(Gdriver,Gmode,' '); { Ініціюємо графічний режим }

SetBkColor(15); { Колір фону білий }

SetColor(8); { Колір зображення темно-сірий }

maxx := GetMaxX; { Визначаємо максимальні розміри экрану }

maxy := GetMaxY;

x := maxx div 2; { Обчислюємо координати центру экрана }

y := maxy div 2;

{ Вісь OX: встановлюємо поточний покажчик у центр, проводимо лінію }

MoveTo(x, y);

LineTo(maxx, y);

{ Відмічаємо масштабні одиниці та робимо цифрові позначки на осі OX }

edmas := 30;

for i:= 1 to 10 do

begin

MoveTo(x + edmas*i,y);

LineTo(x + edmas*i,y-4);

MoveTo(x + edmas*i-2,y-15);

if i = 10 then OutText('10')

else OutText(num[i]);

end;

MoveTo(maxx-30,y-30);

OutText('X');

{ Малюємо стрілку на осі OX }

MoveTo(maxx-5,y-3);

LineTo(maxx,y);

LineTo(maxx-5,y+3);

{ Аналогічно ОХ готуємо вісь OY }

MoveTo(x,y);

LineTo(x,0);

for i:= 1 to 7 do

begin

MoveTo(x, y - edmas*i);

LineTo(x+4,y - edmas*i);

MoveTo(x+8,y - edmas*i-2);

OutText(num[i]);

end;

MoveTo(x+10,0);

OutText('Y');

MoveTo(x-3,5);

LineTo(x,0);

LineTo(x+3,5);

{ Аналогічно готуємо вісь OZ }

MoveTo(edmas * 5 div 2,maxy);

LineTo(x,y);

{ масштабна одиниця на осі OZ, edmas / 2 = 15 пікселям }

for i:= 1 to 10 do

begin

MoveTo(x-edmas div 2 * i,y + edmas div 2 * i);

LineTo(x-edmas div 2 * i - 3,y + edmas div 2 * i - 4);

MoveTo(x-edmas div 2 * i -12,y + edmas div 2 * i -11);

if i = 10 then OutText('10')

else OutText(num[i]);

end;

MoveTo(55,maxy-15);

OutText('Z');

MoveTo(77,maxy-8);

LineTo(75,maxy);

LineTo(85,maxy-5);

{ Малюємо ребра куба }

SetColor(7); { колір ребра сірий }

MoveTo(x - edmas * 5 div 2, y + edmas * 5 div 2);

LineTo(x + edmas * 5 div 2, y + edmas * 5 div 2);

LineTo(x + edmas * 5 div 2, y - edmas * 5 div 2);

LineTo(x - edmas * 5 div 2, y - edmas * 5 div 2);

LineTo(x - edmas * 5 div 2, y + edmas * 5 div 2);

MoveTo(x - edmas * 5 div 2, y - edmas * 5 div 2);

LineTo(x, y - edmas * 5);

LineTo(x + edmas * 5, y - edmas * 5);

LineTo(x + edmas * 5 div 2, y - edmas * 5 div 2);

MoveTo(x + edmas * 5 div 2, y + edmas * 5 div 2);

LineTo(x + edmas * 5,y);

LineTo(x + edmas * 5,y - edmas * 5);

{ Виділяємо грані куба }

SetFillStyle(1,7);

FloodFill(x+1,y-99,7);

SetFillStyle(2,7);

FloodFill(x-48,y-48,7);

SetFillStyle(4,7);

FloodFill(x+77,y-75,7);

{ Заповнюємо область, відсічену кулею, у площині XOY кольором фону}

SetColor(15);

SetLineStyle(0,0,3);

for i:= 1 to 60 do

Ellipse( x + edmas * 5 div 2, y + edmas * 5 div 2, 90, 180, i, i);

{ Заповнюємо відсічену область дугами сірого коліру }

SetColor(7);

SetLineStyle(2,0,1);

for i:= 1 to 15 do

Ellipse( x + edmas * 5 div 2, y + edmas * 5 div 2, 90, 180, i*4, i*4);

{ Малюємо еліпси у площині, паралельній YOZ кольором фону}

SetColor(15);

SetLineStyle(0,0,3);

for i := 1 to 30 do

Ellipse( x + edmas * 5 div 2, y + edmas * 5 div 2, 25, 91, i, i*2);

{ Заповнюємо відсічену частину дугами сірого коліру }

SetColor(7);

SetLineStyle(2,0,1);

for i := 1 to 15 do

Ellipse( x + edmas * 5 div 2, y + edmas * 5 div 2, 25, 91, i*2, i*4);

{ Заповнюємо область, відсічену кулею, в площині, паралельній XOZ}

SetColor(15);

SetLineStyle(0,0,3);

for i:= 1 to 30 do

Ellipse( x + edmas * 5 div 2, y + edmas * 5 div 2, 0, 360, 2*i, i);

SetColor(7);

SetLineStyle(2,0,1);

Ellipse( x + edmas * 5 div 2, y + edmas * 5 div 2, 63, 180, 60, 30);

repeat until KeyPressed;

CloseGraph; { вихід з графічного режиму }

end.

Вид зображення на екрані: