Я пытаюсь растеризовать и заполнить гиперсферу. По сути, у меня есть двумерная сетка фиксированного размера и сфера (центр, радиус), и я хочу выяснить, какие ячейки сетки перекрываются со сферой, и сохранить их координаты.
Мне известен алгоритм Срединной окружности , который использует 8-стороннее зеркальное отображение и создает внешние ячейки (границу) круга. Я также изменил связанный код википедии, чтобы заполнить круг (то есть, чтобы получить координаты всех ячеек внутри границы).
Однако я не знаю ни одного алгоритма для более высокого измерения. Например, в 4d я думал о реализации путем создания всех возможных кругов, как в следующем псевдокоде. Основная идея заключается в том, что поскольку 4-мерная сфера имеет вид (x-x0) 2 + (y-y0) ** 2 + (z-z0) ** 2 + (k-k0) ** 2 = r 2, это равно (x-x0) 2 + (y-y0) ** 2 = r 2 - (z-z0) ** 2 - (k-k0) ** 2. Так как я знаю, как нарисовать круг, мне просто нужно создать все круги для всех возможных значений z и k.
assume center=(x0,y0,z0,k0) and radius r
for all dimensions equal or higher than 2://this is z and k
//make a list of possible values this dimension can take
//from z0 to z0+radius with a step of 1
all_lists.append([dim0,dim0+1,...,dim0+radius])
produce the product of all the lists in all_lists
//now i have a list [[z0,k0],[z0,k0+1],....,[z0+1,k0],[z0+1,k0+1],....,[z0+radius,k0],...[z0+radius,k0+radius]]
for every element l of the list, compute the radius of the circular "cut"
l.append(r**2 - z**2 - k**2)
Now call the Midpoint Circle Algorithm, but for every (x,y) pair that it produces, we need to export 4 points, namely (x,y,±z,±k)
Этот вопрос кажется актуальным, но я не понимаю ответа.