Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 JAVA BUFFEREDIMAGE  [new]
dim_sim
Member

Откуда:
Сообщений: 1
только начинаю работать с Java, хочу нарисовать поле из правильных шестиугольников(гексагонов). использую BufferedImage, рисую линии методом брезенхема.
не могу понять в чем дело, при некоторых параметрах радиуса поле не рисуется, более того, даже тулбар странно отображается
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds! выдает такую ошибку, но я не понимаю что делать
дебажил, значения все существуют
да и странно, при радиусе 70 работает, а 50 нет

АЛГОРИТМ:

public void Bresenham(double x0, double y0, double x1, double y1) {
double x, y, dx, dy, incx, incy, pdx, pdy, es, el, err;

dx = x1 - x0;//проекция на ось икс
dy = y1 - y0;//проекция на ось игрек

incx = sign(dx);
incy = sign(dy);
dx = Math.abs(dx);
dy = Math.abs(dy);

if (dx > dy)
//определяем наклон отрезка:
{

pdx = incx;
pdy = 0;
es = dy;
el = dx;
} else {
pdx = 0;
pdy = incy;
es = dx;
el = dy;//тогда в цикле будем двигаться по y
}

x = x0;
y = y0;
err = el / 2;
image.setRGB((int) Math.round(x), (int) Math.round(y), Color.BLACK.getRGB());

for (int t = 0; t < el; t++) {
err -= es;
if (err < 0) {
err += el;
x += incx;
y += incy;
} else {
x += pdx;
y += pdy;
}
image.setRGB((int) Math.round(x), (int) Math.round(y), Color.BLACK.getRGB());
//ОШИБКА ТУТ
}
}


ЗДЕСЬ РИСУЮ ОДИН ГЕКСАГОН:
    public void paintHex(double x, double y, int radius, BufferedImage image) {
        double angle;
        int i;
        double x_new, y_new;
        for (i = 0; i < 6; i++) {
            angle = 2 * Math.PI * i / 6;
            x_new = radius * cos(angle + Math.PI / 6) + x;
            y_new = radius * sin(angle + Math.PI / 6) + y;
            image.setRGB((int) Math.round(x), (int) Math.round(y), Color.BLACK.getRGB());
            Bresenham(x, y, x_new, y_new);
            x = x_new;
            y = y_new;
        }

    }
8 мар 19, 16:35    [21828024]     Ответить | Цитировать Сообщить модератору
 Re: JAVA BUFFEREDIMAGE  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 3981
dim_sim
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!

Судя по этому сообщению у вас координаты вышли за пределы области рисования.
Посмотртите под отладчиком что происходит перед ошибкой.
11 мар 19, 09:32    [21828893]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить