Ну, вообще-то, ежели без аксонометрии, то не так уж это и сложно. На верхнем рисунке изображен произвольный прямоугольник, лежащий в основании призмы. Пусть секущая плоскость проходит через ребро АВ. Систему координат XYZ выберем так: Х параллелен ребру АВ, Y перпендикулярна X, тоже лежит в плоскости рисунка и смотрит вниз, Z (направление боковых ребер призмы) перпендикулярна плоскости рисунка и смотрит на нас. Все размеры при расчете заданы в пикселах графического DOS-экрана (640х480). Если за начало координат принять, как обычно, левый верхний угол экрана, то координаты вершин четырехугольника XY будут: A(100,150), B(200,150), C(240,50) и D(70,100). Так мне захотелось. Координаты вспомогательных точек E и F будут E(70,150) и F(240,150).
Теперь найдем координаты Z точек пересечения плоскости с боковыми ребрами, проходящими через C и D. Обозначим эти точки пересечения С1 и D1. Координаты составят ZC1=CF*tg30°, ZD1=DE*tg30°.
Осталось теперь путем простейших манипуляций с теоремой Пифагора построить фигуру, лежащую в секущей плоскости. Что и сделано (нижний рисунок).
Код:
Uses Graph, CRT;
VAR
ZD,ZC:Real;
Function Tan(x:Real):Real;
begin
Tan:=Sin(x)/Cos(x);
end;
BEGIN
InitGraph(..);{ПАРАМЕТРЫ ФУНКЦИИ ПОДСТАВЬТЕ САМИ}
SetLineStyle(SolidLn,0,ThickWidth);
Line(100,150,70,100);
Line(70,100,240,50);
Line(240,50,200,150);
Line(200,150,100,150);
SetLineStyle(SolidLn,0,NormWidth);
Line(50,150,100,150);
Line(200,150,260,150);
SetLineStyle(DottedLn,0,NormWidth);
Line(70,100,70,150);
Line(240,50,240,150);
SetTextJustify(CenterText,TopText);
OutTextXY(70,155,'E');
OutTextXY(100,155,'A');
OutTextXY(200,155,'B');
OutTextXY(240,155,'F');
SetTextJustify(RightText,CenterText);
OutTextXY(65,100,'D');
SetTextJustify(LeftText,CenterText);
OutTextXY(245,50,'C');
ZC:=100*tan(Pi/6);
ZD:=50*tan(Pi/6);
SetLineStyle(SolidLn,0,ThickWidth);
Line(100,400,70,400-Round(SQRT(SQR(50)+SQR(ZD))));
Line(70,400-Round(SQRT(SQR(50)+SQR(ZD))),240,
400-Round(SQRT(SQR(100)+SQR(ZC))));
Line(240,400-Round(SQRT(SQR(100)+SQR(ZC))),200,400);
Line(200,400,100,400);
SetTextJustify(CenterText,TopText);
OutTextXY(100,405,'A');
OutTextXY(200,405,'B');
SetTextJustify(RightText,CenterText);
OutTextXY(65,400-Round(SQRT(SQR(50)+SQR(ZD))),'D1');
SetTextJustify(LeftText,CenterText);
OutTextXY(245,400-Round(SQRT(SQR(100)+SQR(ZC))),'C1');
SetFillStyle(3,white);
FloodFill(150,350,white);
ReadKey;
CloseGraph;
END.
Если у Вас Windows-Pascal и рисование идет черным по белому, то в SetFillStyle и FloodFill нужно, вероятно, заменить white на black.