@Override
    public Point getNextLocation(int ix, int iy, int fx, int fy) {
        int dx = fx - ix;
        int dy = fy - iy;

        if (dx != 0) {
            dx = (int)Math.round(Math.max(Math.abs(dx*MAGIC_RATE_CONSTANT), 1))* ProjUtils.getSign(dx);
        }
        if (dy != 0) {
            dy = (int)Math.round(Math.max(Math.abs(dy*MAGIC_RATE_CONSTANT), 1))* ProjUtils.getSign(dy);
        }

        if ((dx | dy) == 0) {
            return null;
        }

        return new Point(ix + dx, iy + dy);
    }