我的图像大约有4,000,000像素。每个像素具有地理XY坐标(坐标位于像素的中心),并且每个像素对应于A×A米平方。
假设我在图像上放置一个随机点(使用随机XY坐标)并在此点周围绘制一个半径为B米的圆圈:
我的问题是:如何有效地计算圆圈接触的方块?
答案 0 :(得分:2)
您需要一个有效的函数来确定圆是否与正方形相交(也包括,也位于内部)。这(Delphi实现)不使用三角法蚂蚁平方根。
请注意,此功能适用于单个方格。但是这种方法可能会针对方形网格进行修改 - 您可以评估整个列的水平移位值一次,整个行的垂直移位值一次,然后使用计算值SquaredDist = SqDistForRow[Row] + SqDistForColumn[Col]
function IsCircleIntersectsSquare
(CX, CY, CR: Integer; {circle}
SX, SY, A: Integer{square}): Boolean;
var
halfA, dx, dy, t, SquaredDist: Integer;
begin
//halfsize
halfA := A div 2;
//distances to square center
dx := CX - SX;
dy := CY - SY;
SquaredDist := 0;
//square sides divide plane to 9 parts
t := dx + halfA;
if t < 0 then
SquaredDist := t * t
else begin
t := dx - halfA;
if t > 0 then
SquaredDist := t * t
end;
t := dy + halfA;
if t < 0 then
SquaredDist := SquaredDist + t * t
else begin
t := dy - halfA;
if t > 0 then
SquaredDist := SquaredDist + t * t
end;
Result := SquaredDist <= CR * CR
end;