Я работаю над некоторой графикой рендеринга, у меня есть такая модель, я использую инструменты для холста Java и окна, иначе независимо написанные.
Все части представляют собой либо прямоугольные многоугольники, либо сегменты линии. Как это бывает в этой модели, все части многоугольника выровнены с плоскостями x, y или z, причем xy-origin работает от переднего угла модели на изображении. (можно разглядеть прямоугольное подразделение сторон, внимательно изучив, как они выглядят пропатченными вместе, но устранение этого артефакта здесь не рассматривается)
Я не разработал метод получения чистой сортировки глубины, этот метод основан на самой последней вершине. Я пробовал некоторые наивные методы, и у них у всех есть различные артефакты. Я отметил разбиение двоичного пространства и алгоритм Ньюэлла без деления, но у меня есть ощущение, что в этом случае должен быть более простой способ, особенно при условии, что все части выровнены по правому краю и параллельны осям. Любые советы о путях его оценили
Обновление
Я придумал эту идею, которая может иметь что-то для нее.
С учетом плоского граничного ограничения существует 6 возможных отношений: (плоскость x-x), (плоскость x-y), (плоскость x-z), (плоскость y-y), (плоскость y-z) и (плоскость z-z).
Легко сортировать два многоугольника, если они имеют одну и ту же плоскость, остальные 3 комбинации показаны выше (xy на xz), (xy на yz) и (xz на yz), с разным порядком по глубине, что может произойти.
Я думаю, что мое условие сравнения может пойти примерно так: P1 = polygon1 и P2 = polygon2
if (P1 == xy_plane) return min(P1.z, P2.z)
if (P2 == xy_plane) return min(P2.z, P1.z)
if (P1 == xz_plane) return min(P1.y, P2.y)
if (P2 == xz_plane) return min(P2.y, P1.y)
P1 или P2 должны лежать в одной из первых двух плоскостей, поэтому для постановки задачи должно быть достаточно, необходимо подтвердить, работает ли этот подход
Update2
У меня был некоторый прогресс по этой идее, и кажется, что сортировка по согласованию полигонов делает что-то интересное, оно работает частично, я бы сказал, что это выглядит просто, но... ну, надеюсь, вы думаете, что это есть и может сказать мне, что мне нужно делать.
Вдоль линии выше, в первую очередь, вопреки моему предположению, многоугольники в одной плоскости не тривиальны, они могут иметь несколько различных конфигураций, показанных здесь; параллельно и не обменивается другой осью, такой как в первых двух, или параллельной и на одной плоскости. Иногда это означает, что им не важно, какие оси они сортируют (для парного сравнения) (и говорит о более глубокой стороне этого преследования).
Создавая серию условных утверждений, независимо от того, что было сделано в соответствии с вышеизложенным предложением, имеющим грубый аромат с обширной серией "if-else", я думаю, что в конце концов я нашел правильный парный многоугольник к сопоставлению многоугольников, так что в этом понятии можно сказать, конечно, если субъект или другой ближе.
Работая на одной стороне модели здесь, удалось создать нечто, что выглядит довольно убедительно. Процесс в целом чувствует себя близко к блокировке, но пытается избавиться от какой-то окончательной несогласованности, как-то вызывающе, поскольку старые физические тривиции, фиксирующие одну сторону, всегда нарушаются.