如何计算一个圆圈接触哪个方格?

我有一个由大约400万像素组成的图像。 每个像素都有一个地理XY坐标(坐标位于像素的中心),每个像素对应一个A x A米的正方形。

比方说,我将一个随机点放在图像上(使用随机的XY坐标),并围绕此点绘制一个半径为B米的圆:

在这里输入图像描述

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


你需要一个有效的函数来确定圆是否与正方形相交(也包括,也在里面)。 这个(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;
链接地址: http://www.djcxy.com/p/84985.html

上一篇: How to calculate which grid squares a circle touches?

下一篇: Polygon area, perimeter and side length around the circle with python