Path2D.intersect () Аналогично Area.intersect ()

1

Я играл с Area.intersect() и задавался вопросом, есть ли способ создать метод, похожий на этот, с использованием Path2D, потому что я заметил, что при использовании Path2D в качестве фигуры я заметил скачок производительности. Другими словами, возьмите часть большого Path2D и создайте меньший Path2D из этой части.

Рисование карты Изображение 174551Просмотр в игре Изображение 174551

Примечание. Используя нижеследующую хэш-карту, я визуализирую черепичные фигуры в область просмотра в соответствии с каждым "объектом", который в этом случае будет разными типами изображений: "Океан", "Трава", "Обсидиан", "Рок", "Песок и грязь"...

LinkedHashMap<Point, LinkedHashMap<Object, Path2D.Double>>

EDIT: каждый тип изображения имеет всю собственную собственную карту, которая равна 10000px на 100000px. Мои фрагменты, которые пересекаются, составляют 100px на 100px, которые перемещаются в связанную хэш-карту по точке в виде заданного типа Path2D.Double и отображаются на экране по точкам в текущей области просмотра.

  • 1
    Функциональность «конструктивная сплошная геометрия» добавляется исключительно классом Area . Вы должны сказать более четко, где вы заметили «скачок производительности». Но обратите внимание, что в любом случае вы можете выполнять необходимые операции с объектами Area , а затем преобразовывать область в Path2D , вызывая Path2D p = new Path2D.Double(); p.append(area.getPathIterator(null,1.0f));
  • 0
    @Marco13 Marco13 Благодаря вашим последним ответам я стал больше разбираться в тайлах для своей игры, и переход от texturepaint к использованию изображений был огромен. Я также продвинулся вперед и грубо выложил каждую фигуру в соответствии с типом изображения. Я отредактирую свой пост, добавив изображение, демонстрирующее мои методы.
Показать ещё 4 комментария
Теги:
intersect
area
2d-games
path-2d

1 ответ

1

Непонятно, с каким SDK вы работаете, с каким предложением Area.intersect(). Однако, если вы планируете пересекать свой путь, это может быть сложной проблемой - обратите внимание, что путь 2D, пересеченный с многоугольником, может превратиться в несколько путей!

Однако существует некоторый известный алгоритм пересечения пути с многоугольником, например, Сайрус-Бек или Сазерленд-Коэн.

Я нашел этот фрагмент кода для Cohen-Sutherland в Java:

http://worldofenggcodes.blogspot.co.il/2013/10/cohen-sutherland-line-clipping-algorithm.html

Что кажется ОК, хотя вам может понадобиться извлечь код в более удобную функцию. Кир-Бек, вероятно, был бы лучшим вариантом, хотя я мог найти только псевдокод:

http://www.moreprocess.com/computer-graphics/cyrus-beck-line-clipping-algorithm

После того, как вы внедрили это, вы должны применить его к каждой строке вашего пути, чтобы получить новый список строк, которые пересекаются с квадратом.

  • 0
    Есть ли в Интернете реализация Java одного из этих алгоритмов, потому что я искал и не смог найти? Также я пересекаю его с большим нерегулярным объектом Path2D с простым квадратом, если это облегчает задачу :).
  • 0
    Я обновил ответ несколькими ссылками - боюсь, я не смог найти простую реализацию и не нашел ее на лету ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню