Distance_LP - pre zadaný bod a priamku vypočíta vzdialenosť bodu od priamky

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Kategória: Zadania Pascal

Program: Poilinp.pasPoilinu.pas
Súbor exe: Poilinp.exePoilinu.tpu
Potrebné: Angeom02.tpuUninout.tpuEgavga.bgi
Vývoják: Poilin.docAmater.txt
Príklady: Angeom02.pasUninout.pas

Pre programovú jednotku (unit) AnGeom02 (algebraická geometria) vytvorte funkciu Distance_LP, ktorá pre zadaný bod a priamku vypočíta vzdialenosť bodu od priamky.

FUNCTION Distance_LP(Line1:TLine; bodA:TPoint): Real;
{ Unit - zadanie z Objektovo orientovaneho programovania }
{ Autor:  Ja                                             }
UNIT PoiLinU;
 
INTERFACE
 
USES AnGeom02;
 
  FUNCTION Distance_LP(Line1:TLine; bodA:TPoint): Real;
 
IMPLEMENTATION
 
 
{ Funkcia vypocita vzdialenost bodu od priamky.              }
{ Pred vypoctom testuje ci bod, alebo priamka existuju.      }
{ V debug rezime vypisuje pripadne chyby ktore nastanu.      }
 
FUNCTION Distance_LP(Line1:TLine; bodA:TPoint): Real;
var err : boolean;
    mez, sq : real;           { medzivysledok }
begin
  { Najprv dame default ktory tam zostane v pripade neuspechu }
  Distance_LP := -1.0;
  err := false;
 
  { bod ktory chcem pouzit nieje definovany }
  if( bodA.bYnit = false )then begin
      Error( 1, 'Bod pre urcenie vzdialenosti bodu od priamky neexistuje',
                'Distance_LP', '' );
      err := true;
  end;
 
  { line ktoru chcem pouzit nieje definovana }
  if( Line1.bYnit = false )then begin
      Error( 1, 'Priamka pre urcenie vzdialenosti bodu od priamky neexistuje',
                'Distance_LP', '' );
      err := true;
  end;
 
  { samotny vypocet, len ak existuju bod a priamka }
  if (err = false )then begin
      mez := Line1.a * bodA.ox + Line1.b * bodA.oy + Line1.c;
      sq  := Sqr(Line1.a) + Sqr(Line1.b);
 
      { este kontrola delenia nulou - teoreticky nemoze nastat lebo uz boli kontroly }
      if( sq=0 )then
          Error( 1, 'Vyskytla sa chyba delenia nulou pri pocitani vzdialenosti bodu od priamky',
                    'Distance_LP', '' )
      else
          Distance_LP := Abs( mez ) / Sqrt( sq );
  end;
 
end;  { Distance_LP }
 
{ hlavne begin-end unity }
begin
end.