Рисование сферы с заданным началом (Voxel Engine)

Я отчаянно пытался создать сферический инструмент в своем воксельном движке. Я знаю общую функцию для создания сферы:

public bool getPoint (int x, int y, int z) {
    return (x*x+y*y+z*z < r*r) ? true : false;
}

Эта функция создаст сферу, предполагая, что начало координат находится в точке (0, 0, 0). Тем не менее, я хочу иметь возможность создать сферу с пользовательским источником (или определенным пользователем), скажем, источник находится в (10, 10, 10). Как мне изменить эту функцию, чтобы переместить источник в другую позицию?


person Sam Skips Fowler    schedule 03.02.2014    source источник
comment
Короткая версия: вычтите 10 из ваших координат, прежде чем делать математику. Вы применяете отрицательный мировой перевод, чтобы компенсировать действительное движение объекта. Это не имеет ничего общего ни с созданием сфер, ни с теорией вокселей.   -  person Blindy    schedule 04.02.2014


Ответы (1)


Пусть ox, oy, oz будет центром вашей сферы. Затем вы просто вычитаете центр из x, y, z перед выполнением вычислений:

public bool getPoint (int x, int y, int z, int ox, int oy, int oz)
{
    x -= ox;
    y -= oy;
    z -= oz;
    return (x*x+y*y+z*z < r*r);
}

Обратите внимание, что выражение expr ? true : false эквивалентно expr независимо от того, что такое expr.

person Timothy Shields    schedule 04.02.2014