如何计算圆圈接触的网格方格?

时间:2016-05-06 19:02:55

标签: matlab geometry

我的图像大约有4,000,000像素。每个像素具有地理XY坐标(坐标位于像素的中心),并且每个像素对应于A×A米平方。

假设我在图像上放置一个随机点(使用随机XY坐标)并在此点周围绘制一个半径为B米的圆圈:

enter image description here

我的问题是:如何有效地计算圆圈接触的方块?

1 个答案:

答案 0 :(得分:2)

您需要一个有效的函数来确定圆是否与正方形相交(也包括,也位于内部)。这(Delphi实现)不使用三角法蚂蚁平方根。 enter image description here

请注意,此功能适用于单个方格。但是这种方法可能会针对方形网格进行修改 - 您可以评估整个列的水平移位值一次,整个行的垂直移位值一次,然后使用计算值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;