Провести сечение, проходящее через диагональ основания пирамиды и середину бокового ребра - Pascal ABC
Формулировка задачи:
В правильной четырехугольной пирамиде провести сечение,
проходящее через диагональ основания и середину бокового
ребра.
Решение задачи: «Провести сечение, проходящее через диагональ основания пирамиды и середину бокового ребра»
textual
Листинг программы
uses graphABC; type Point=record x,y:integer; end; var a,h,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,i,b1,b2:integer; p1,p2,p3 :array[1..4] of Point; k1,k2:real; begin {задняя левая} x1:=200;y1:=250; {сторона, высота} a:=300;h:=300; {остальные точки основания} x2:=x1+a;y2:=y1;{задняя правая} x3:=x1-round(a*0.71*0.71)+a;y3:=y1+round(a*0.71*0.71);{передняя правая} x4:=x1-round(a*0.71*0.71);y4:=y3;{передняя левая} {центр основания} x5:=x4+round(a/2*(1+0.71*0.71));y5:=y1+round((y3-y1)/2); {вершина} x6:=x5;y6:=y5-h; {координаты вершины сечения} x7:=(x2+x6) div 2; y7:=(y2+y6) div 2;{середина ребра} {рисование} {сечение} p3[1].x:=x1;p3[1].y:=y1; p3[2].x:=x7;p3[2].y:=y7; p3[3].x:=x3;p3[3].y:=y3; p3[4].x:=x1;p3[4].y:=y1; setpencolor(clRed); setbrushstyle(bsHorizontal); polygon(p3,4); floodfill(x1+10,y1,clRed); {перед} p1[1].x:=x4;p1[1].y:=y4; p1[2].x:=x6;p1[2].y:=y6; p1[3].x:=x3;p1[3].y:=y3; p1[4].x:=x4;p1[4].y:=y4; setbrushstyle(bsClear); setpencolor(clBlue); polygon(p1,4); {право} p2[1].x:=x3;p2[1].y:=y3; p2[2].x:=x6;p2[2].y:=y6; p2[3].x:=x2;p2[3].y:=y2; p2[4].x:=x3;p2[4].y:=y3; polygon(p2,4); {внутри} setpenstyle(psDash); line(x2,y2,x4,y4); line(x1,y1,x4,y4); line(x1,y1,x2,y2); line(x1,y1,x6,y6); end.
Объяснение кода листинга программы
- Объявлены переменные и типы данных:
- uses graphABC;
- type Point=record x,y:integer; end;
- var a,h,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,i,b1,b2:integer;
- p1,p2,p3 :array[1..4] of Point;
- k1,k2:real;
- Задаются координаты точек:
- {задняя левая}
- x1:=200;y1:=250;
- {сторона, высота}
- a:=300;h:=300;
- {остальные точки основания}
- x2:=x1+a;y2:=y1;
- x3:=x1-round(a0.710.71)+a;y3:=y1+round(a0.710.71);
- x4:=x1-round(a0.710.71);y4:=y3;
- {центр основания}
- x5:=x4+round(a/2(1+0.710.71));y5:=y1+round((y3-y1)/2);
- {вершина}
- x6:=x5;y6:=y5-h;
- {координаты вершины сечения}
- x7:=(x2+x6) div 2; y7:=(y2+y6) div 2;
- {середина ребра}
- x8:=(x3+x4) div 2; y8:=(y3+y4) div 2;
- Рисуется сечение и остальные фигуры:
- {сечение}
- p3[1].x:=x1;p3[1].y:=y1;
- p3[2].x:=x7;p3[2].y:=y7;
- p3[3].x:=x3;p3[3].y:=y3;
- p3[4].x:=x1;p3[4].y:=y1;
- setpencolor(clRed);
- setbrushstyle(bsHorizontal);
- polygon(p3,4);
- floodfill(x1+10,y1,clRed);
- {перед}
- p1[1].x:=x4;p1[1].y:=y4;
- p1[2].x:=x6;p1[2].y:=y6;
- p1[3].x:=x3;p1[3].y:=y3;
- p1[4].x:=x4;p1[4].y:=y4;
- setbrushstyle(bsClear);
- setpencolor(clBlue);
- polygon(p1,4);
- {право}
- p2[1].x:=x3;p2[1].y:=y3;
- p2[2].x:=x6;p2[2].y:=y6;
- p2[3].x:=x2;p2[3].y:=y2;
- p2[4].x:=x3;p2[4].y:=y3;
- polygon(p2,4);
- {внутри}
- setpenstyle(psDash);
- line(x2,y2,x4,y4);
- line(x1,y1,x4,y4);
- line(x1,y1,x2,y2);
- line(x1,y1,x6,y6);
- Значения переменных после выполнения программы:
- a,h,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,i,b1,b2: содержат значения, указанные в коде.