RU: Plane

Геометрические примитивы

Плоскость

Уравнение плоскости

Плоскость задается точкой $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)
\begin{align} \begin{vmatrix} x-x_A & y-y_A & z-z_A \\ x_B-x_A & y_B-y_A & z_B-z_A \\ x_C-x_A & y_C-y_A & z_C-z_A \end{vmatrix} = \begin{vmatrix} 1 & x & y & z \\ 1 & x_A & y_A & z_A \\ 1 & x_B & y_B & z_B \\ 1 & x_C& y_C& z_C \end{vmatrix} = 0 \end{align}

Расстояние (со знаком) от точки $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, а цвет —различный. Ниже представлен участок программы, выполняющей рисование, а справа — результат.

OCC_Plain01.jpg
//
   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);
   }

Некоторые операции, связанные с плоскостью

  • Проекция точки на плоскость.
  • Расстояние от точки до плоскости.
  • Линия пересечения плоскостей.
  • Точка пересечения прямой и плоскости.
  • Угол между плоскостями.