DELPHI点在多边形内算法——判断一个点是否在一个复杂多边形的内部
//多边形数组
duoX:Array of TPoint;
//判断函数
function gPointIn(p :TPoint) :Boolean;
var i,j:Integer;
p1,p2:TPoint;
begin
Result := False;
if(High(duoX) < 2) then Exit;
j := High(duoX);
for i := Low(duoX) to High(duoX) do
begin
p1 := duoX[i];
p2 := duoX[j];
if(p1.y < p.y) and (p2.y >= p.y) or (p2.y < p.y) and (p1.y >= p.y) then
if (p1.x + (p.y - p1.y) / (p2.y - p1.y) * (p2.x - p1.x) < p.x) then
Result := not Result;
j := i;
end;
end;
//调用栗子
if gPointIn(Point(X,Y)) then CheckBox1.Caption := '内' else CheckBox1.Caption := '外';