{$mode objfpc}
unit u7;
interface
type
TMyPoint=record
x,y:double;
end;
TLine=record// хранит коэффициенты прямой типа y=k*x+c
k,c:double;
end;
TApexes=record// хранит вершины фигуры
a1,a2,a3,a4:TMyPoint;
end;
TPFourPoints=^TFourPoints;
TFourPoints=object
Points:TApexes;
constructor assign(a1,a2,a3,a4:TMyPoint);//инициализируем Points
function contains(p:TMyPoint):boolean;// провеяем входит ли точка в объект
end;
implementation
type
ProcPosition=Function(line:TLine; point:TMyPoint):boolean;
function Above(line:TLine; point:TMyPoint):boolean; far;//проверяем правда что точка point выше прямой line
begin
Above:=(point.x*line.k+line.c)>point.y;
end;
function Below(line:TLine; point:TMyPoint):boolean; far;//проверяем правда что точка point ниже прямой line
begin
Below:=(point.x*line.k+line.c)<=point.y;
end;
function FindLine(p1,p2:TMyPoint):TLine;//находим коэффициенты прямой по двоим точкам
var line:TLine;
begin
line.k:=(p2.x-p1.x)/(p2.y-p1.y);
line.c:=p1.y-line.k*p1.x;
FindLine:=line;
end;
function PosRelToLine(line:TLine; point:TMyPoint; pos:ProcPosition):boolean;// совмещаем Above и Below
begin
PosRelToLine:=pos(line,point);
end;
constructor TFourPoints.assign(a1,a2,a3,a4:TMyPoint);//инициализируем Points
begin
Points.a1:=a1;
Points.a2:=a2;
Points.a3:=a3;
Points.a4:=a4
end;
function TFourPoints.contains(p:TMyPoint):boolean;// провеяем входит ли точка в объект
begin
with Points do
begin
if (PosRelToLine(FindLine(a1,a2),p,below)) and //!!!Ошибка!!! Error: Wrong number of parameters specified
(PosRelToLine(FindLine(a2,a3),p,above)) and
(PosRelToLine(FindLine(a3,a4),p,above)) and
(PosRelToLine(FindLine(a4,a1),p,below)) then
contains:=true
else
contains:=false;
end;
end;
end.
Я ж не должен там ставить параметры, что ему не нравится?