Как я могу рассчитать, если местоположение находится внутри 3d куба - PullRequest
0 голосов
/ 28 августа 2018

Я ищу способ вычислить, находится ли местоположение внутри куба с вращением.

Информация у меня есть местоположение (x, y, z) , вращение (x, y, z) и размер (x, y, z) . Я использую Javascript для этого, я пробовал так же, как это сделано в плагинах Minecraft, но тогда он не включает вращение:

x >= min.x && 
x <= max.x && 
y >= min.y && 
y <= max.y && 
z >= min.z && 
z <= max.z

Как я могу это сделать?

1 Ответ

0 голосов
/ 28 августа 2018

Скорее всего, у вас уже есть трансформация для вашего кубоида, которая включает в себя позиционирование, масштабирование и вращение. Вы можете использовать это преобразование (точнее, его обратное), чтобы преобразовать любую точку в локальную систему координат кубоида. И там очень легко проверить, находится ли точка внутри куба.

Я сделаю несколько предположений здесь. Если они не соответствуют вашему сценарию, вам нужно немного изменить подход. Но принцип остается прежним. Я предполагаю, что стандартный куб выровнен по оси и находится между (0, 0, 0) и (1, 1, 1). Я также предполагаю, что эта позиция относится к нижнему углу. Затем вы вычисляете общее преобразование (которое вы, скорее всего, уже имеете) как:

T = translate(position) * rotation * scale(size)

Если нам нужно выяснить, находится ли точка p внутри куба, преобразуйте ее с обратной величиной T:

pInLocalSpace = inverse(T) * p

И, наконец, проверьте, находится ли это в стандартном кубе:

if(pInLocalSpace.x >= 0 && pInLocalSpace.x <= 1
   && pInLocalSpace.y >= 0 && pInLocalSpace.y <= 1
   && pInLocalSpace.z >= 0 && pInLocalSpace.z <= 1)
    ; //point is inside the cube
else
    ; //point is outside of the cube
...