当前位置: 首页 > 知识库问答 >
问题:

如何计算一个圆碰到哪些网格正方形?

公冶高义
2023-03-14

我有一个由大约4,000,000像素组成的图像。每个像素都有一个地理XY坐标(坐标位于像素的中心),每个像素对应于一个a×am平方。

假设我把一个随机点放在图像上(用随机的xy坐标),并围绕这个点画一个半径为B米的圆:

我的问题是:我怎样才能高效地计算出圆触及的是哪些正方形?

共有1个答案

鲜于谦
2023-03-14

注意,这个函数是针对单正方形的。但是对于方形网格,可以修改这种方法--您可以计算整列的水平移位值一次,计算整行的垂直移位值一次,然后使用计算值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;
 类似资料:
  • 我确实知道AABBs,但我现在只使用大约10个粒子,AABB现在不是必需的。

  • 这是一个基于我的编程问题的几何问题。基本上,我有一个充满经纬度点的MySQL数据库,每个经纬度点间隔为1km,对应于每个点周围平方公里内居住的人口。然后,我想知道,这些网格中每一个的相对分数,被一个任意大小的圆圈所占,这样我就可以计算出,在一个给定的圆圈内,大致住着多少人。 以下是问题的一种形式(距离不按比例)的一个实际例子: 我想知道居住在X点半径内的人口数量。我的数据库计算出a点和B点的条目与

  • 有2个圆和他们的中心是固定的,将作为输入给出。然后将会有n个点,它们的x和y坐标被给出作为输入。 最后,还会有q个查询。对于每个查询,将给出两个圆(设为r1和r2)的半径。为每个查询输出第一个圆或第二个圆内的点总数。如果一个点到圆心的距离小于或等于圆的半径,则该点位于圆内。 约束条件:n,q<=10^6r1,r2<=10^7,对于每个坐标,x和y<=10^6 我正在寻找一个O(nlogn)或O(n

  • 我确实看到了这个StackOverflow,它似乎是一个类似的问题:在一个圆形扇区中有效地找到点,我用Java实现了它,但如果没有向量,它似乎就不能翻译,我对数学有点困惑,不能让它工作。 我一直试图解决这个问题,我希望任何类型的实现的帮助(不要介意添加触发计算),以及任何理解问题的帮助。谢谢!!

  • 本文向大家介绍Css选择符有哪些?哪些属性可以继承?优先级算法如何计算?相关面试题,主要包含被问及Css选择符有哪些?哪些属性可以继承?优先级算法如何计算?时的应答技巧和注意事项,需要的朋友参考一下 1.id选择器( # myid) 2.类选择器(.myclassname) 3.标签选择器(div, h1, p) 4.相邻选择器(h1 + p) 5.子选择器(ul < li) 6.后代选择器(li

  • 我正在编写软件,扩展圆-矩形碰撞检测(交集),以包括对碰撞的响应。圆边和圆矩形是相当直接的。但一圈又一圈地把我难住了。 例如,在离散事件模拟中,让两个圆碰撞,一个红一个绿。我们可能会出现以下情况: 在它们碰撞后,我们可以立即: 这里的RIP和GIP是在前一个时钟滴答的圆圈的位置。在当前时钟滴答时,在RDP和GDP处检测到冲突。然而,当两个圆位于RCP和GCP时,碰撞发生在时钟滴答之间。在时钟滴答声