栅格化体育场形状

时间:2019-02-18 10:58:27

标签: geometry rasterizing

我想使用这个被称为体育场的人物:

Stadium shape

可以使用三个参数将其定义为与线段[AB]的距离小于或等于r的所有点的集合。

给定正方形网格的轴对齐栅格,其中每个正方形都定义了两个整数坐标,那么计算体育场内全部或部分重叠的所有像元的集合的最有效方法是什么? (我在这里不需要任何抗锯齿)

问题:

  • 我找不到体育场广场重叠测试算法
  • 即使有一个栅格,我也必须迭代整个栅格(实际上是无限的,但可以在其中定义一个有限的搜索区域),并检查每个像元是否与体育场重叠。那将是一个计算量大的操作,并且在我的项目(游戏)中需要相对快速的操作。

1 个答案:

答案 0 :(得分:0)

您可以使用Bresenham圆栅格化算法(以及其他类似中点算法的算法)。

重点是使用对称性。让体育场(也称为“胶囊”)以原点为中心,并具有以下参数:半径R和半圆之间的距离D

从Bresenham弧的右点开始(在(R, 0)坐标处)。生成点(x,y)以形成四分之一圆,并生成反射点和偏移点以生成水平扫描线

(x + D/2 , y) connect to (-x - D/2, y)
(x + D/2, -y) connect to (-x - D/2, -y)

对于任意方向,值得将交点按Y排序并最多划分5个区域-扫描线为弧线,弧线,线线,线弧,弧线。然后为每个Y坐标计算X端坐标