public double[] NewtonIterate(double i, double j, int mode) {
		int n = 0;
		Complex z = new Complex(i, j);
		Complex old = new Complex(i, j);

		z = Newt(z, i, j, mode);

		double hue = 0;
		double w = 0;
		while (n < depth && distance(old, z) > rootBoundry) {
			old = z;

			z = Newt(z, i, j, mode);

			if (mandelbrotAddition)
				z = z.add(new Complex(i / 2, j / 2));

			n++;

			// normal smoothing
			w = 1.0 / z.sub(old).abs();
			hue += Math.pow(1.05, -w);
		}

		double[] vals = new double[4];
		if (n != depth) {
			vals[0] = hue;
			vals[1] = addRoot(z);
		} else {
			vals[0] = n;
			vals[1] = 0;
		}

		vals[2] = z.re;
		vals[3] = z.im;

		return vals;
	}