Геометрические примитивы
Плоскость
Уравнение плоскости
Плоскость задается точкой $A ( \mathbf{r}_A)$ на ней и единичным вектором нормали ${\bf N}$, так что радиус-вектор произвольной точки на плоскости удовлетворяет уравнению $({\bf r},{\bf N})=({\bf r}_A,{\bf N})$. В координатной форме это уравнение имеет вид $x N_x+y N_y + z N_z=x_A N_x+y_A N_y + z_A N_z$.
Плоскость однозначно определяется по трем точкам $A ({\bf r}_A)$, $B ({\bf r}_B)$, $C ({\bf r}_C)$, не лежащим на одной прямой. В координатной форме уравнение плоскости, проходящей через три заданные точки записывается в виде
(1)Расстояние (со знаком) от точки $M({\bf r}_M)$ до плоскости $({\bf r},{\bf N})=p$ равно $d=p-({\bf r}_M,{\bf N})$. В частности, $p$ есть расстояние до плоскости от начала координат. Если точка $M$ лежит в полупространстве, на которое указывает вектор нормали, то расстояние до точки имеет знак минус. В частности, расстояние до начала координат положительно, если положительно скалярное произведение $({\bf r}_A,{\bf N})$.
Прямая на плоскости может рассматриваться как пересечение двух плоскостей. Точки прямой лежат на линии пересечения, т.е. удовлетворяют одновременно двум уравнениям плоскостей, а направляющий вектор прямой коллинеарен
векторному произведению векторов нормалей плоскостей.
Пусть заданы три плоскости $({\bf r},{\bf N}_1)=p_1$, $({\bf r},{\bf N}_2)=p_2$, $({\bf r},{\bf N}_3)=p_3$, у которых векторы нормалей не компланарны (не лежат в одной плоскости), так что их смешанное произведение $D=({\bf N}_1,{\bf N}_2,{\bf N}_3)$ отлично от нуля. В этом случае задача поиска точки, одновременно принадлежащей трем плоскостям, имеет единственное решение.
Классы, связанные с понятием "плоскость"
В OpenCascade с понятием "плоскость" связаны следующие классы:
- gp_Pln — класс, задающий плоскость как совокупность точки и номали;
- gce_MakePln — класс, предоставляющий некоторые алгоритмы построения плоскости;
- Geom_Plane — класс описания плоскости как параметрической поверхности;
- Geom_RectangularTrimmedSurface — класс описания прямоугольного участка плоскости;
- AIS_Plane — класс описаня плоскости как объекта отображения.
Рассмотрим несколько примеров. Координатную плоскость $(XOY)$ (объект класса gp_Pln) можно построить несколькими способами
// Создание координатной плоскости XOY
gp_Pln gpPlaneXOY; // Создание плоскости с неопределенными параметрами
gpPlaneXOY = gp_Pln(gp::XOY()); // На базе системы координат
gpPlaneXOY = gp_Pln(gp_Pnt(0.,0.,0.),gp_Dir(0.,0.,1.)); // По точке и направлению
gpPlaneXOY = gp_Pln(0.,0.,1.,0.); // По коэффициентам уравнения A * X + B * Y + C * Z + D = 0.0
Опросим параметры плоскости: положение точки, нормаль, направление осей:
// Получение точки -- начала системы координат, связанной с плоскостью
gp_Pnt origin = gpPlaneXOY.Location(); // ( 0.0000, 0.0000, 0.0000 )
// Нормаль к плоскости
gp_Ax1 normal = gpPlaneXOY.Axis(); // vdir = ( 0.0000, 0.0000, 1.0000 )
// Ось X системы координат плоскости
gp_Ax1 xAxis = gpPlaneXOY.XAxis(); // vdir = ( 1.0000, 0.0000, 0.0000 )
// Ось Y системы координат плоскости
gp_Ax1 yAxis = gpPlaneXOY.YAxis(); // vdir = ( 0.0000, 1.0000, 0.0000 )
Методами класса gp_Pln можно также узнать положение точки, прямой и другой плоскости относительно данной, а также выполнить линейные преобразования плоскости.
Методы класса gce_MakePln позволяют построить плоскость (объект gp_Pln)
- параллельную другой плоскости и проходящую через заданную точку;
- проходящую через три заданные точки.
Класс Geom_Plane дает описание плоскости как параметрической поверхности. Он наследует методы класса Geom_Surface (см. Поверхность (основные понятия)).
Класс AIS_Plane предоставляет методы для отображения плоскости. Атрибуты рисования плоскости устанавливаются классом Prs3d\_PlaneAspect (см. пример ниже).
К ним относятся: признак — рисовать ли параметрическую сеть, шаг рисования линий, атрибуты линий рисования параметрической сети и границы.
В качестве примера нарисуем параметричевкую сеть для трех координатных плоскостей, точнее, для единичных квадратов в этих плоскостях. Шаг сети возьмем одинаковый — 0.2, а цвет —различный. Ниже представлен участок программы, выполняющей рисование, а справа — результат.

//
Handle(Geom_Plane) geomPlane;
Handle(AIS_Plane) aisPlane;
Handle(Prs3d_PlaneAspect) planeAspect;
Quantity_NameOfColor nameOfColor;
gp_Pnt centerPoint;
int i;
// Три координатные плоскости
for( i=0; i<3; i++ ) {
switch( i ) {
case 0:
geomPlane = new Geom_Plane(1., 0., 0., 0.);
centerPoint.SetCoord(0., 0.5, 0.5);
nameOfColor = Quantity_NOC_RED;
break;
case 1:
geomPlane = new Geom_Plane(0., 1., 0., 0.);
centerPoint.SetCoord(0.5, 0.0, 0.5);
nameOfColor = Quantity_NOC_GREEN;
break;
case 2:
geomPlane = new Geom_Plane(0., 0., 1., 0.);
centerPoint.SetCoord(0.5, 0.5, 0.0);
nameOfColor = Quantity_NOC_AQUAMARINE1;
break;
}
// Выделяем прямоугольник в области параметров
aisPlane = new AIS_Plane(geomPlane);
aisPlane->SetSize(1.) ;
aisPlane->SetCenter(centerPoint) ;
// Задаем атрибуты линий
planeAspect = aisPlane->Attributes()->PlaneAspect ();
planeAspect->SetDisplayIso(Standard_True);
planeAspect->SetIsoDistance (0.2);
planeAspect->IsoAspect()->SetColor(nameOfColor);
planeAspect->EdgesAspect ()->SetColor(nameOfColor);
//
myAISContext->Display(aisPlane);
}
Некоторые операции, связанные с плоскостью
- Проекция точки на плоскость.
- Расстояние от точки до плоскости.
- Линия пересечения плоскостей.
- Точка пересечения прямой и плоскости.
- Угол между плоскостями.