从初始点开始,然后在每一步检查接下来将与哪个单元格相交。此任务假定像素不是无大小的点,而是定义大小的单元S。初始单元格具有坐标(0,0)
使用抛物线方程我们计算抛物线与垂直线的交点x=S
y = a * S * S + b * S
y_index = floor(y/S)`
所以我们遍历单元格(0,0), (0,1)...(0,y_index),然后直接进入(1,y_index)(y_index 可能等于零)
重复与第二级线y_index_1 = a * 2*S*2*S + b*2*S的交点,得到y_index1,标记单元格从(1,y_index)到(1,y_index1)等等。
Python 示例
import math
def markcells(a, b, S, xmax):
newy = 0
oldy = 0
step = 0
while step * S <= xmax:
step += 1
edgex = step * S
newy = math.floor((a*edgex*edgex + b*edgex)/S)
lst = []
for y in range(oldy, newy + 1):
lst.append([step - 1, y])
print(lst)
oldy = newy
markcells2(0.05, 0.1, 1, 5)
[[0, 0]]
[[1, 0]]
[[2, 0]]
[[3, 0], [3, 1]]
[[4, 1]]
[[5, 1], [5, 2]]
附言
我省略了抛物线恰好穿过单元格角的情况(当y/S 是整数时) - 为这种情况选择想要的策略:要么标记单元格,要么不标记(例如,抛物线x=2 为x=2:我们应该标记@987654336 @ 和(4,3)?)