Y
YB_unique
Unregistered / Unconfirmed
GUEST, unregistred user!
本来这张帖子是为了chassis开的,但担心又为论坛增加一张水贴!
所以特贴上一些微末技巧!希望大家喜欢。
不过事先声明:其中100分是归 chassis 的!
下面的代码是图象处理方面的,算是对卷兄的一种支持!不过实在是贻笑大方了!如果还好,请给点鼓励!
Thanks!
一个关于检测给定的一点是否在指定的一块多边形区域中的函数
Function PointInPolygonTest(x, y: Integer; aList: Array of TPoint): Boolean;
var
L, I, J: Integer;
function xp(aVal: Integer): Integer;
begin
Result := PPoint(@aList[aVal]).X;
end;
function yp(aVal: Integer): Integer;
begin
Result := PPoint(@aList[aVal]).Y;
end;
begin
Result := False;
L := Length(aList) ;
if L = 0 then
exit;
J := L - 1;
for I := 0 to L - 1 do
begin
if ((((yp(I) <= y) and (y < yp(J))) or ((yp(J) <= y) and (y < yp(I)))) and
(x < (xp(J) - xp(I)) * (y - yp(I)) / (yp(J) - yp(I)) + xp(I))) then
Result := not Result;
J := I;
end;
end;
所以特贴上一些微末技巧!希望大家喜欢。
不过事先声明:其中100分是归 chassis 的!
下面的代码是图象处理方面的,算是对卷兄的一种支持!不过实在是贻笑大方了!如果还好,请给点鼓励!
Thanks!
一个关于检测给定的一点是否在指定的一块多边形区域中的函数
Function PointInPolygonTest(x, y: Integer; aList: Array of TPoint): Boolean;
var
L, I, J: Integer;
function xp(aVal: Integer): Integer;
begin
Result := PPoint(@aList[aVal]).X;
end;
function yp(aVal: Integer): Integer;
begin
Result := PPoint(@aList[aVal]).Y;
end;
begin
Result := False;
L := Length(aList) ;
if L = 0 then
exit;
J := L - 1;
for I := 0 to L - 1 do
begin
if ((((yp(I) <= y) and (y < yp(J))) or ((yp(J) <= y) and (y < yp(I)))) and
(x < (xp(J) - xp(I)) * (y - yp(I)) / (yp(J) - yp(I)) + xp(I))) then
Result := not Result;
J := I;
end;
end;