bool alarge = _mB < _mA; int a = alarge ? _mB :_mA; int b = alarge ? _mA :_mB; int aa = a*a; int bb = b*b; int d2 = 0; int d1 = 4*bb - 4*aa*b + aa; int x = 0; int y = b; int deltaE = 12*bb; int deltaSE1 = 12*bb + 8*aa - 8*aa*b; int deltaSE2 =8*bb + 12*aa - 8*aa*b; int deltaS = 12*aa - 8*aa*b; int deltaSQEtoE = 8*bb; int deltaSQEtoSE1 = 8*bb; int deltaSQEtoSE2 = 8*bb; int deltaSQSE1toE = 8*bb; int deltaSQSE1toSE1 =8*bb + 8 * aa; int deltaSQSE1toSE2 =8*bb + 8 * aa; int deltaSQSE1toS =8 *aa; int deltaSQSE2toSE2 =8*bb + 8 *aa; int deltaSQSE2toS = 8 * aa; int deltaSQStoSE2 = 8 * aa; int deltaSQStoS = 8 * aa; int GradX =2 * bb; int GradY = 2*aa*b - aa; int deltaEtoGradX = 2*bb; int deltaSEtoGradX = 2*bb; int deltaSEtoGradY = -aa; //set pixel with symmetry. if (alarge) DrawSymmetricalPoints(y,x,window); else DrawSymmetricalPoints(x,y,window); while(GradY > GradX && y > 0){ //check if still in quadrant 1 if (d1 < 0) { //East d1 += deltaE ; deltaE += deltaSQEtoE; deltaSE1 += deltaSQEtoSE1; deltaSE2 += deltaSQEtoSE2; GradX += deltaEtoGradX; } else { d1 += deltaSE1; deltaE += deltaSQSE1toE; deltaSE1 += deltaSQSE1toSE1; deltaSE2 += deltaSQSE1toSE2; deltaS += deltaSQSE1toS; GradX += deltaSEtoGradX; GradY += deltaSEtoGradY; --y; } ++x; if (alarge) DrawSymmetricalPoints(y,x,window); else DrawSymmetricalPoints(x,y,window); } //bottom region. d2 = 4*bb*x*x + 4*bb*x + bb + 4*aa*y*y - 8*aa*y + 4*aa - 4*aa*bb; //guh! while (y > 0) { //still inside bottom region if (d2 < 0) { //South east d2 += deltaSE2; deltaSE2 += deltaSQSE2toSE2; deltaS += deltaSQSE2toS; ++x; } else { d2 += deltaS; deltaSE2 += deltaSQStoSE2; deltaS += deltaSQStoS; } --y; if (alarge) DrawSymmetricalPoints(y,x,window); else DrawSymmetricalPoints(x,y,window); }