Ортогональное проецирование точки на прямую |
|
|
Отношение предназначено для присвоения объекту типа точка значения, определяющего Точку как место точки, ортогонально спроецированной из Точки 1 на Прямую.
Точка-проекция будет иметь определенное значение лишь в том случае, если она находится во внутренней области прямой, на которую было выполнено проецирование.
Если точка получила значение, то она добавляется в список инцидентных точек этой прямой.
Внешний вид “инцидентностной” линии может измениться в связи с пополнением этого списка. (Конкретный вид прямой задается атрибутом стиля линии в порождающем ее отношении).
Если тип объекта, указанного в любом из входных параметров, оказывается несовместимым с типом этого параметра, то при установленном флажке NIL в выходной параметр заносится значение NIL-объекта.
|
|
|
|
|
Клавиша |
Предварительно
выделено: |
Действие |
Выделение
после
действия: |
|
p, P |
Точки и прямая |
Построение ортогональных проекций выделенных точек на выделенную прямую линию |
Выделяются точки-проекции,
выделение исходных объектов снимается |
|
|
|
|
Параметры |
Типы объектов |
Функциональное назначение
параметров |
|
|
|
Точка, являющаяся проекцией заданной точки на прямую линию/ Проекция вектора на прямую
|
|
|
Точка, вектор, проективитет
|
Исходная собственная точка вещественной плоскости / исходный вектор / исходный проективитет в точечном ряде |
|
|
|
|
|
|
Прототип команды: PF Согласование Точка ; {-}Объект {-}Прямая .
|
|
Пример 1:
Спроецировать ортогонально точку на прямую.
Алгоритм "Главный" |
1 |
|
Прямая o1 задана координатами двух точек: X1= -261 , Y1= -49 , X2= 136 , Y2= 69 . |
2 |
|
Точка p1 задана координатами -147 и 150 . |
3 |
|
Точка p2 есть проекция точки p1 на прямую o1 . |
|
Пример 2:
Найти проекцию вектора на прямую.
Алгоритм "Главный" |
1 |
|
Прямая o1 задана координатами двух точек: X1= -291 , Y1= 11 , X2= 60 , Y2= -96 . |
2 |
|
Точка p1 задана координатами -171 и 121 . |
3 |
|
Точка p2 задана координатами 13 и 163 . |
4 |
|
Вектор v1 задан точками p1 и p2 . |
5 |
|
Точка p3 есть проекция точки v1 на прямую o1 . |
|
|
|
|
|
|
|
|
|
|
procedure CalcPF_A(X1,Y1,X2,Y2,XX,YY: complex; var A,B: complex);
var X3,Y3,X4,Y4,Z: complex;
Dl,Dx,Df,S,C: real;
LDummy,Prizn: boolean;
begin
A:=XX;B:=YY;
SC(X1.Re,Y1.Re,X2.Re,Y2.Re,S,C,Dl,LDummy);
Fi(0,1,S,C,Df);
Dx:=Pi/2+Df;
X3:=CompSum(A,MCompl(200*Cos(Dx),0));
Y3:=CompSum(B,MCompl(200*Sin(Dx),0));
X4:=CompSub(A,MCompl(200*Cos(Dx),0));
Y4:=CompSub(B,MCompl(200*Sin(Dx),0));
Prizn:=LinLinComp(X1,Y1,X2,Y2,X3,Y3,X4,Y4,A,B,Z);
end; // CalcPF_A |
|
|
|
procedure CalcPF(XX,YY: complex; Y: TObj; var A,B: complex);
var X1,Y1,X2,Y2: complex;
begin
X1:=TOLine(Y).X1;
Y1:=TOLine(Y).Y1;
X2:=TOLine(Y).X2;
Y2:=TOLine(Y).Y2;
CalcPF_A(X1,Y1,X2,Y2,XX,YY,A,B);
end; // CalcPF |
|
|
|
|
|
function CalcPF_A(X1,Y1,X2,Y2,XX,YY)
{
var Dl,Dx,Df,SCDP;
var LDummy,P;
var X3,Y3,X4,Y4,Z;
var AB={A:undefined, B:undefined}
AB.A=XX; AB.B=YY;
SCDP=SC(X1.Re,Y1.Re,X2.Re,Y2.Re);
Df=Fi(0,1,SCDP.S,SCDP.C);
Dx=Math.PI/2+Df;
X3=CompSum(AB.A,MCompl(200*Math.cos(Dx),0));
Y3=CompSum(AB.B,MCompl(200*Math.sin(Dx),0));
X4=CompSub(AB.A,MCompl(200*Math.cos(Dx),0));
Y4=CompSub(AB.B,MCompl(200*Math.sin(Dx),0));
P=LinLinComp(X1,Y1,X2,Y2,X3,Y3,X4,Y4);
AB.A=P.XX;
AB.B=P.YY;
return AB;
} // CalcPF_A |
|
|
|
function CalcPF(XX,YY,Y)
{
var X1,Y1,X2,Y2;
X1=Y.X1;
Y1=Y.Y1;
X2=Y.X2;
Y2=Y.Y2;
AB=CalcPF_A(X1,Y1,X2,Y2,XX,YY);
return AB
} // CalcPF |
|
|
|
|
|