First, let k = a/b, where a and b are integers.
F(x,y) = a(x-x0)^2 - b(y-y0)
d = F(x+1,y+0.5)
if d<0
midpoint is above line
go E
d_new = F(x+2, y+0.5)
delta_d = d_new - d = F(x+2, y+0.5) - F(x+1, y+0.5)
= a (2*x + 3 - 2*x0)
if d>0
midpoint is below line
go NE
d_new = F(x+2, y+1.5)
delta_d = d_new - d = F(x+2, y+1.5) - F(x+1, y+0.5)
= a (2*x + 3 - 2*x0) - b
d_start = F(x0 +1, y0+0.5)
= a - 0.5*b
Let d' = 2*d to make the algorithm all integer
Final algorithm
d = 2*a - b
x = x0
y = y0
while (slope<=1)
setpixel(x,y,colour)
tmp = 2*a*(2*x + 3 - 2*x0)
if (d>0) { /* go NE */
d = d + tmp - 2*b
y = y + 1
} else {
d = d + tmp
}
x = x + 1
}