{ геометрические алгоритмы: Точка внутри треугольника?  Вариант 2          }
{ ------------------------------------------------------------------------ }
{ Идея: Пусть есть треугольник ABC и точка P. Если Площадь ABC равна сумме }
{ площадей треугольников ABP,BCP,CAP, то точка внутри треугольника.        }
{ ------------------------------------------------------------------------ }

(* функция вычисляет расстояние между точками *)
Function Distance(ax,ay,bx,by:real):real;
begin
  Distance := sqrt(sqr(ax-bx)+sqr(ay-by));
end;

(* функция вычисляет площадь треугольника по формуле Герона *)
Function SqrGeron(ax,ay,bx,by,cx,cy:real):real;
var p,a,b,c :real;
Begin
  a:=Distance(cx,cy,bx,by);
  b:=Distance(ax,ay,cx,cy);
  c:=Distance(ax,ay,bx,by);
  p:=(a+b+c)/2;
  SqrGeron:=sqrt(p*(p-a)*(p-b)*(p-c));
End;

(* функция определеяет относительное положение точки: внутри или нет *)
Function PointInsideTreangle(ax,ay,bx,by,cx,cy,px,py:real):boolean;
const error = 1.000001;
var s,s1,s2,s3 :real;
begin
    PointInsideTreangle:=TRUE;
    s :=SqrGeron(ax,ay,bx,by,cx,cy);
    s1:=SqrGeron(ax,ay,bx,by,px,py);
    s2:=SqrGeron(bx,by,cx,cy,px,py);
    s3:=SqrGeron(cx,cy,ax,ay,px,py);
    if s*error>s1+s2+s3 then PointInsideTreangle:=TRUE
                        else PointInsideTreangle:=FALSE;
end;

Begin (* Тело основной программы *)
   writeln(PointInsideTreangle(1,1,8,1,1,8,2,2)); {TEST1, Inside}
   writeln(PointInsideTreangle(1,1,8,1,1,8,6,6)); {TEST2, Outside}
End.
