我有一个问题,我必须选择部分在圆内的所有正方形(想象像素)(即使圆圈只穿过正方形的一个小角落,但如果它穿过一个角顶点则不会)。半径是像素大小的整数倍 问题是圆的中心在像素之间,即在四个像素的角顶点上 我只想访问每个像素一次。
例如,我想在以下图像中选择所有白色像素:
R = 8 px
R = 10 px
对于中心位于像素中心的圆圈,这不会有问题,我可以使用Bresenham算法的常用形式:
subprojects {
tasks.withType(JavaCompile) {
options.compilerArgs << '-parameters'
}
}
可悲的是,我不知道如何调整它以支持像素间圈。
答案 0 :(得分:1)
对于第一个象限 - 如果左下角位于圆圈内,则应标记单元格,因此可以使用简单循环进行栅格化
for dy = 0 to R-1
dx = 0
sq = R * R - dy * dy
while dx * dx < sq
mark (dx, dy)
mark (dx, -dy-1)
mark (-dx-1, dy)
mark (-dx-1, -dy-1)
要填充整个水平线,您可以计算dx的最大值
for dy = 0 to R-1
mdx = Floor(Sqrt(R * R - dy * dy))
fill line (-mdx-1,dy)-(mdx,dy)
fill line (-mdx-1,-dy-1)-(mdx,-dy-1)