Точка пересечения двух прямых
 

Отношение предназначено для присвоения объектам типа точка значения, определяющего точку Точка как геометрическое место точки пересечения двух прямых Прямая 1 и Прямая 2.

В результате пересечения двух непараллельных прямых образуется собственная точка плоскости, параллельные прямые пересекаются в несобственной точке плоскости. Данное отношение служит одним из средств задания несобственных точек плоскости.

Если в качестве прямых указаны одна собственная прямая, а вторая несобственная, в результате операции образуется несобственная точка.

При задании двух несобственных прямых значение точки пересечения не определено.

Если тип объекта, указанного в любом из входных параметров, оказывается несовместимым с типом этого параметра, то при установленном флажке NIL в выходной параметр заносится значение NIL-объекта.

 
 
 
Клавиша
Предварительно
выделено:
Действие
Выделение после действия:
p, P Две прямые Нахождение точки пересечения двух прямых Выделяется точка пересечения,
выделение исходных объектов снимается
 
 
Параметры
Типы объектов
Функциональное назначение параметров
Точка
Точка
Точка пересечения двух прямых
Прямая 1
Прямая
Первая прямая
Прямая 2
Прямая
Вторая прямая
 

Прототип команды: P2 Согласование Точка ; Прямая_1 Прямая_2 .

 
Пример 1:

Построить точку пересечения p1 двух собственных прямых o1 и o2.


Алгоритм "Главный"
1
Прямая o1 задана координатами двух точек: X1= -157.5 , Y1= -78.5 , X2= 34.5 , Y2= 46.5 .
2
Прямая o2 задана координатами двух точек: X1= -192.5 , Y1= 101.5 , X2= 72.5 , Y2= -63.5 .
3
Точка p1 есть пересечение прямых o1 и o2 .

Пример 2:

Построить точку пересечения p1 собственной прямой o1 с бесконечно удаленной прямой (т.е. задать несобственную точку плоскости по направлению, заданному прямой o1.

Алгоритм "Главный"
1
Прямая o1 задана координатами двух точек: X1= -157.5 , Y1= -78.5 , X2= 34.5 , Y2= 46.5 .
2
Точка p1 есть пересечение прямых o1 и iline .

 
 

 

 

 

entity ExecP2 is
port (O1,O2: in TOLine; P: out TOPoint);
end entity;

architecture ExecP2 of ExecP2 is
signal B: boolean;
begin
     LinLinComp (O1.X1,O1.Y1,O1.X2,O1.Y2,O2.X1,O2.Y2,O2.X2,O2.Y2,P.X,P.Y,P.Z,B);
end;

 

function EExecP2(var X,Y: TOLine; var PNT: TOPoint; Sg1,Sg2: integer): boolean;
var Def,Prizn: boolean;
XX,YY: complex;
ZZ: complex;

var X1,Y1:real;
begin
Result:=TRUE;

{if (X is TOLine) and (Y is TOLine) then}
BEGIN
{XX:=Cmpn;YY:=Cmpn;}

{if (TOLine(X).IsSobstv) and (TOLine(Y).IsSobstv) then}
begin

LinLinComp(X.X1,X.Y1,X.X2,X.Y2,Y.X1,Y.Y1,Y.X2,Y.Y2,Xx,Yy,ZZ,Prizn);

{
Def:=TRUE;
if ZZ.Re=1 then if X.PointBelongs(XX.Re,YY.Re) and Y.PointBelongs(XX.Re,YY.Re) then Def:=TRUE else Def:=FALSE;

if not Def then
begin
if Att.Chk=1 then PNT:=TOEmpty.Create([X,Y],OW);
Exit;
end;
}

if (ZZ.Re=1) then
begin
{ PNT:=TOPoint.Create(XX,YY,ZZ.Re,0.5 ,tp_fixed,Att,OW);}
PNT.X:=XX;
PNT.Y:=YY;
PNT.W:=ZZ.Re;

Result:=TRUE;
begin
{AddInc(PNT,X);
AddInc(PNT,Y);}
{DezargInc(Pnt);}
end;
Exit;
end;

{
if (ZZ.Re=0) and
((TOLine(X).draw_ASborned in [brn_unlimited,brn_halflimited]) or
(TOLine(X).OAtt.Lv in[drw_UnLimited, drw_Incidented, drw_ShortIncidented, drw_Plus,drw_Minus,drw_Opposite])) and
((TOLine(Y).draw_ASborned in [brn_unlimited,brn_halflimited]) or
(TOLine(Y).OAtt.Lv in[drw_UnLimited, drw_Incidented, drw_ShortIncidented, drw_Plus,drw_Minus,drw_Opposite])) then
begin
PNT:=TOPoint.Create(XX,YY,ZZ.Re,0.5 ,tp_fixed,Att,OW);
Result:=TRUE;
AddInc(X,PNT);
AddInc(Y,PNT);
Exit;
end else
begin
if Att.Chk=1 then PNT:=TOEmpty.Create([X,Y],OW);
Exit;
end;}

end;

{
if (not TOLine(X).IsSobstv) and (TOLine(Y).IsSobstv) then
if (TOLine(X).IsReal) and (TOLine(Y).IsReal) then
begin
XX.Re:=TOLine(Y).X2.Re-TOLine(Y).X1.Re; XX.Im:=0;
YY.Re:=TOLine(Y).Y2.Re-TOLine(Y).Y1.Re; YY.Im:=0;
PNT:=TOPoint.Create(XX,YY,0,0,tp_fixed,Att,OW);
AddInc(X,PNT);
AddInc(Y,PNT);
Exit;
end;}

{
if (not TOLine(Y).IsSobstv) and (TOLine(X).IsSobstv) then
if (TOLine(X).IsReal) and (TOLine(Y).IsReal) then
begin
XX.Re:=TOLine(X).X2.Re-TOLine(X).X1.Re; XX.Im:=0;
YY.Re:=TOLine(X).Y2.Re-TOLine(X).Y1.Re; YY.Im:=0;
PNT:=TOPoint.Create(XX,YY,0,0,tp_fixed,Att,OW);
AddInc(X,PNT);
AddInc(Y,PNT);
Exit;
end;}

{
if (TOLine(X).Vid=NeSobstv) and (TOLine(Y).Vid=NeSobstv) then
begin
if Att.Chk=1 then PNT:=TOEmpty.Create([X,Y],OW);
Exit;
end;}
END;

{ if Att.Chk=1 then PNT:=TOEmpty.Create([X,Y],OW); }
end; // EExecP2