Автор: a*******@yandex.ru, 26 Ноября 2011 в 11:27, лабораторная работа
В соответствии с вариантом задания разработать программу построения графического изображения заданной фигуры с заданной ориентацией относительно аксонометрических осей в изометрии.
2.Произвести сечение фигуры плоскостью, параллельной её основанию на расстоянии d от основания, и выделить поверхность сечения заданным цветом и типом штриховки (заливки).
Лабораторное
задание 1.
Выполнил:
Тема: Элементы работы с графикой.
Задание:
1.В соответствии
с вариантом задания
2.Произвести сечение фигуры плоскостью, параллельной её основанию на расстоянии d от основания, и выделить поверхность сечения заданным цветом и типом штриховки (заливки).
Требования к программе:
-исходные данные должны вводиться посредством стандартной процедуры READ (READLN);
-данные
не указанные в варианте
-изображение
должно быть построено в
-линейные
размеры изображения должны
-видимые
ребра фигуры должны быть
Описание программы LAB1.
Программа начинается с
где приращение по (оу) , а длина вектора ОХ, приращение по (ох) выполняется функцией xpr(l) по теореме Пифагора где это приращение по (ох) по формуле:
рис.2
Точка Т1 пятиугольника берется любая и от нее начинаются вычисляться остальные точки пятиугольника. Точки Т2 смещена по (оу) относительно Т1 на длину основания (вводимую вручную), Т6Т4 это высота(vis) пятиугольника и находится по формуле:
где высота, а длина стороны основания.
Приращение Т4 по (ох) находится функцией xpr(vis), а по (оу) функцией ypr(vis).
Диагональ пятиугольника находится по формуле:
Теперь
находится точка пересечения высоты и
диагонали, это будет приращение по (ох)
точек Т3 и Т5, приращение по (оу) находится
по теореме Пифагора, так же находятся
вторые точки отрезков для построения
ребер призмы.
Результат работы программы
рис.3
Текст
программы на языке
lab1 Паскаль.
uses graph,crt;
type point=record
x,y:word;
end;
const xs=60;
ys=50;
os=50;
T1x=390;
T1y=150;
var mas:array[1..6]of pointtype;
gd,gm:integer;
l,dop,vop,Diag,Tp,vis,
T2x,T2y,T3x,T3y,T4x,T4y,T5x,
ch,s:char;
{-----------------------------
function xpr(l:word):word;
begin
xpr:=trunc(sqrt(l*l-sqr(l/2)))
end;
{-----------------------------
function ypr(l:word):word;
begin
ypr:=trunc(l/2);
end;
{-----------------------------
procedure prov(var dan:word;sl:byte); {процедура проверки вводимых}
var z1:byte;z:boolean;
begin
repeat
window(57,23,59,24);
textcolor(15);
{$i-};
readln(dan);
{$i+};
case sl of
1:z:=(ioresult=0)and(dan<100)
2:z:=(ioresult=0)and(dan<200);
end;
z1:=0;
if not z then
begin
setviewport(500,365,639,400,
outtextxy(5,5,'неверно');
z1:=1;
end
else begin
SetViewPort(500,365,639,400,
ClearViewPort;
end;
until z;
Graphdefaults;
end;
{-----------------------------
procedure lin(dl:word);
begin
line(T2x,T2y,T2x-xpr(dl),T2y+
line(T3x,T3y,T3x-xpr(dl),T3y+
line(T4x,T4y,T4x-xpr(dl),T4y+
line(T5x,T5y,T5x-xpr(dl),T5y+
SetLineStyle(3,0,1);
line(T1x,T1y,T1x-xpr(dl),T1y+
SetLineStyle(0,0,1);
end;
{-----------------------------
procedure pent(dl:word;linia:byte);
begin
line(T2x-xpr(dl),T2y+ypr(dl),
line(T3x-xpr(dl),T3y+ypr(dl),
line(T4x-xpr(dl),T4y+ypr(dl),
if linia=1 then SetLineStyle(3,0,1);
line(T5x-xpr(dl),T5y+ypr(dl),
line(T1x-xpr(dl),T1y+ypr(dl),
SetLineStyle(0,0,1);
end;
{-----------------------------
procedure pentag(dl:word);
begin
mas[1].x:=T1x-xpr(dl);mas[1].
mas[2].x:=T2x-xpr(dl);mas[2].
mas[3].x:=T3x-xpr(dl);mas[3].
mas[4].x:=T4x-xpr(dl);mas[4].
mas[5].x:=T5x-xpr(dl);mas[5].
mas[6].x:=T1x-xpr(dl);mas[1].
SetFillStyle(11,15);
FillPoly(5,mas);
end;
{-----------------------------
begin
gd:=detect;
initgraph(gd,gm,'');
setfillstyle(1,9);
bar(100,100,540,380);
setfillstyle(1,14);
bar(110,110,530,370);
setcolor(9);
settextstyle(defaultfont,
settextjustify(centertext,
outtextxy(320,250,'программа')
settextstyle(defaultfont,
outtextxy(320,260,'выведения призмы с заданными параметрами');
readkey;
{-----------------------------
repeat
clearviewport;
setcolor(15);
line(xs,5,xs,ys);
line(xs,5,xs+3,10);
line(xs,5,xs-3,10);
outtextxy(xs+10,5,'z');
line(xs,ys,xs-xpr(os),ys+ypr(
line(xs-xpr(os),ys+ypr(os),xs-
line(xs-xpr(os),ys+ypr(os),xs-
outtextxy(xs-xpr(os),ys+ypr(
line(xs,ys,xs+xpr(os),ys+ypr(
line(xs+xpr(os),ys+ypr(os),xs+
line(xs+xpr(os),ys+ypr(os),xs+
outtextxy(xs+xpr(os),ys+ypr(
outtextxy(xs+10,ys-5,'o');
{-----------------------------
settextjustify(lefttext,
outtextxy(5,345,'введите длину стороны основания призмы');
outtextxy(5,355,'в пикселях от 30 до 100');
prov(dop,1);
T2x:=T1x;
T2y:=T1y-dop;
vis:=trunc((sqrt(5+2*sqrt(5)))
T4x:=T1x+xpr(vis);
T4y:=T1y+ypr(vis)-trunc(dop/2)
Diag:=trunc(((1+sqrt(5))*dop)/
Tp:=trunc(sqrt(sqr(dop)-sqr(
T3x:=T4x-xpr(tp);
T3y:=T4y-ypr(tp)-Diag;
T5x:=T3x;
T5y:=T3y+2*Diag;
pent(0,1);
lin(200);
pent(200,0);
OutTextXY(5,375,'введите длину отсекаемой призмы');
OutTextXY(5,385,'в пикселях от 10 до 200');
prov(vop,2);
pent(vop,1);
OutTextXY(5,405,'заштриховать нажмите У');
s:=readkey;
if s='y' then pentag(vop);
lin(200);
pent(0,1);
pent(200,0);
OutTextXY(5,425,'выбрать новые параметры нажмите любую кнопку');
OutTextXy(5,435,'выйти нажмите У');
ch:=readkey;
until ch='y';
closegraph;
end.