Я играл с Area.intersect() и задавался вопросом, есть ли способ создать метод, похожий на этот, с использованием Path2D, потому что я заметил, что при использовании Path2D в качестве фигуры я заметил скачок производительности. Другими словами, возьмите часть большого Path2D и создайте меньший Path2D из этой части.
Рисование карты Просмотр в игре
Примечание. Используя нижеследующую хэш-карту, я визуализирую черепичные фигуры в область просмотра в соответствии с каждым "объектом", который в этом случае будет разными типами изображений: "Океан", "Трава", "Обсидиан", "Рок", "Песок и грязь"...
LinkedHashMap<Point, LinkedHashMap<Object, Path2D.Double>>
EDIT: каждый тип изображения имеет всю собственную собственную карту, которая равна 10000px на 100000px. Мои фрагменты, которые пересекаются, составляют 100px на 100px, которые перемещаются в связанную хэш-карту по точке в виде заданного типа Path2D.Double и отображаются на экране по точкам в текущей области просмотра.
Непонятно, с каким 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
После того, как вы внедрили это, вы должны применить его к каждой строке вашего пути, чтобы получить новый список строк, которые пересекаются с квадратом.
Area
. Вы должны сказать более четко, где вы заметили «скачок производительности». Но обратите внимание, что в любом случае вы можете выполнять необходимые операции с объектамиArea
, а затем преобразовывать область вPath2D
, вызываяPath2D p = new Path2D.Double(); p.append(area.getPathIterator(null,1.0f));