Прямая, касательная к окружности, из точки
 

Отношение предназначено для проведения касательной Прямой из Точки 1 на Окружность. Одновременно определяется Точка касания построенной прямой с окружностью. Предопределенный стиль образуемой прямой - ограниченная прямая.

Если точка Точка 1 изначально инцидентна с окружностью Окружность, то прямая Прямая строится, как касательная к окружности в этой точке, при этом предопределенным стилем образуемой прямой является инцидентностная прямая.

При отсутствии знака перед именем переменной, задаваемой в параметре Окружность или же при его положительном значении, точка касания и линия образуются справа по отношению к направлению, задаваемого воображаемой линией, проведенной из точки Точка 1 в центр окружности Окружность.

При отрицательном значении знака перед именем переменной, задаваемой в параметре Окружность, точка касания и касательная линия образуются слева по отношению к направлению, задаваемого воображаемой линией, проведенной из точки Точка 1 в центр окружности Окружность.

При нахождении точки Точка 1 внутри окружности Окружность в качестве значений выходных параметров образуются NIL-объекты.

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

 
 
 
Клавиша
Предварительно
выделено:
Действие
Выделение после действия:
o, O Точка и окружность + Построение касательных прямых линий, опущенных из точки на окружность Выделяются касательные прямые
 
Параметры
Типы объектов
Функциональное назначение параметров
Прямая
Прямая
Искомая прямая, опущенная из заданной точки на заданную окружность
Точка
Точка
Точка касания прямой и окружности
Точка 1
Точка
Исходная точка
Окружность
Окружность
Исходная окружность
 

Прототип команды: P4 Согласование Прямая Точка ; Точка1 {-}Окружность .

 

Пример 1:

Опустить "правую" касательную прямую o1 из точки p2 на окружность d1.

Алгоритм "Главный"
1
Точка p1 задана координатами -106.5 и 27.5 .
2
Окружность d1 задана центром p1 и радиусом 102.4 .
3
Точка p2 задана координатами 108.5 и 16.5 .
4
Точка касания p3 на окружности d1 и касательная o1 из точки p2 .

 

Пример 2:


Опустить "левую" касательную прямую o1 из точки p2 на окружность d1.

Алгоритм "Главный"
1
Точка p1 задана координатами -106.5 и 27.5 .
2
Окружность d1 задана центром p1 и радиусом 102.4 .
3
Точка p2 задана координатами 108.5 и 16.5 .
4
Точка касания p3 на окружности -d1 и касательная o1 из точки p2 .

 

Пример 3:

Построить касательную o1 в точке p1 окружности d1.

Алгоритм "Главный"
1
Точка p1 задана координатами -14.5 и -7.5 .
2
Окружность d1 задана центром p1 и радиусом 94.34 .
3
Точка p2 принадлежит объекту d1 с параметром принадлежности 0.1777 .
4
Точка касания p3 на окружности d1 и касательная o1 из точки p2 .

 

 

 

 

procedure Duga1(X1,Y1,Xc,Yc,R: real; K: integer; var Xa,Ya,Sa,Ca: real; var  Prizn: TInOut);
var
   Dx,Dy,Dl,Ss,Da,Al,Dl1: real;

label fin;

begin
     Dx:=(Xc-X1)*K;
     DY:=(Yc-Y1)*K;
     Dl:=Sqrt(Sqr(Dx)+Sqr(Dy));
     if Abs(Dl)<0 then
     begin
          Prizn:=Inside;
          goto fin;
     end;

     Prizn:=Outside;
     Ss:=R/Dl;
     Sa:=Dy/Dl;
     Ca:=Dx/Dl;
     Da:=ArcSin(Ss);

     if Abs(Sqr(Dl)-Sqr(R))<=Eps then
     begin
          Prizn:=OnThe;
          goto fin;
     end;

     if Sqr(Dl)-Sqr(R)<=0 then
     begin
          Prizn:=Inside;
          goto fin;
     end;

     Dl1:=Sqrt(Sqr(Dl)-Sqr(R));
     Al:=ArcSin(Sa);

     if Ca<0 then Al:=-Al+Pi;

     Al:=Al-Da*K;
     Sa:=Sin(Al);
     Ca:=Cos(Al);
     Xa:=X1+K*(Dl1*Ca);
     Ya:=Y1+K*(Dl1*Sa);
     fin:
end; // Duga1 

 

function EExecP4_1(in_prm1,in_prm2: TObj;  var out_prm1,out_prm2: TObj; 
Att_1,Att_2: TAtt; Sg1,Sg2: integer;  OW1,OW2: pointer): boolean;
var
   d2, o1, p2, p3, p4, X, Y: TObj;
   SpisG3, SpisGA: TNewList;
   Success: boolean;

const
     Att_Y: TAtt = ( PT:0; LT:0; LV:0; HT:7; Width:1; Chk:1; Cmp:0; Ilb:0; Comment:NIL; Layers:NIL);
     Att_X: TAtt = ( PT:0; LT:0; LV:0; HT:7; Width:1; Chk:1; Cmp:0; Ilb:0; Comment:NIL; Layers:NIL);
     Att_p2: TAtt = ( PT:0; LT:0; LV:0; HT:7; Width:1; Chk:1; Cmp:0; Ilb:0; Comment:NIL; Layers:NIL);
     Att_d2: TAtt = ( PT:0; LT:0; LV:0; HT:7; Width:1; Chk:1; Cmp:0; Ilb:0; Comment:NIL; Layers:NIL);
     Att_p3: TAtt = ( PT:0; LT:0; LV:0; HT:7; Width:1; Chk:1; Cmp:0; Ilb:0; Comment:NIL; Layers:NIL);
     Att_p4: TAtt = ( PT:0; LT:0; LV:0; HT:7; Width:1; Chk:1; Cmp:0; Ilb:0; Comment:NIL; Layers:NIL);
     Att_o1: TAtt = ( PT:0; LT:0; LV:0; HT:7; Width:1; Chk:1; Cmp:0; Ilb:0; Comment:NIL; Layers:NIL);

begin
     d2:=nil;
     o1:=nil;
     p2:=nil;
     p3:=nil;
     p4:=nil;
     X:=nil;
     Y:=nil;

   Result:=TRUE;
   Y:=in_Prm1.CreateCopy(NIL);
   Y.OAtt:=in_Prm1.OAtt;
   X:=in_Prm2.CreateCopy(NIL);
   X.OAtt:=in_Prm2.OAtt;
   repeat
      Success:=FALSE;
      if not Assigned(p2) then
         Success:=EExecPA(Y,p2,Att_p2,1*Sg1,NIL) or Success;
      if not Assigned(d2) then
         Success:=EExecDN(X,p2,d2,Att_d2,1*Sg2,1,NIL) or Success;
      if not Assigned(p3) and not Assigned(p4) then
         Success:=EExecP3(d2,Y,p3,p4,Att_p3,Att_p4,1,1*Sg1,OW1,NIL) or Success;
      if not Assigned(o1) then
         Success:=EExecO0(p3,X,o1,Att_o1,1,1*Sg2,NIL) or Success;
   until not Success;

     out_prm1:=o1.CreateCopy(OW1);
     out_prm1.OAtt:=att_1;

     out_prm2:=p3.CreateCopy(OW2);
     out_prm2.OAtt:=att_2;

    MassFree([d2,o1,p2,p3,p4,X,Y]);
end; // EExecP4_1