powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JAVA BUFFEREDIMAGE
2 сообщений из 2, страница 1 из 1
JAVA BUFFEREDIMAGE
    #39783885
dim_sim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
только начинаю работать с 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()); //ОШИБКА ТУТ
}
}


ЗДЕСЬ РИСУЮ ОДИН ГЕКСАГОН:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    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;
        }

    }
...
Рейтинг: 0 / 0
JAVA BUFFEREDIMAGE
    #39784361
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dim_simException in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
Судя по этому сообщению у вас координаты вышли за пределы области рисования.
Посмотртите под отладчиком что происходит перед ошибкой.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JAVA BUFFEREDIMAGE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]