2016-07-26 2 views
-5

Мне нужно наилучшее возможное решение, и, если возможно, не грязный код, а некоторый умный код.Определить, находится ли точка в 3D-кубе

Я не знаком с 3D-программированием.

Мне нужно написать функцию, которая вернется, если точка находится в трехмерном пространстве (x, y, z). Диапазон объема куба в пространстве будет поставляться (например, диапазон {{1,2,1}, {5,6,4}})

Любые идеи?

+4

Продумали ли вы проблему? Как, например, вы бы определили, что x-координата удовлетворяет этой единственной оси? –

+1

Это домашнее задание? Это не так много прорывов, но не ожидайте полного «умного» кода. Указатель в правильном направлении поможет вам больше. – Jamiec

+0

Если вы не знакомы с 3D-программированием, я полагаю, вы либо находите (и оплачиваете) кого-то, кто есть, либо учите его самостоятельно. –

ответ

2

Достаточно проверить, имеет ли данная точка все координаты, лежащие между точками. Таким образом, если (x1, y1, z1) является минимальным углом и (x2, y2, z2) является максимальной точкой, чтобы проверить точку (x, y, z), проверьте, что x1 < = x < = x2 и аналогично для y и z.

Если это не кажется очевидным, просто поймите, что куб, выровненный с координатными осями, является областью, лежащей слева от плоскости x = x1, и справа от плоскости x = x2 над плоскостью y = y1 и ниже y = y2 и т. д. Точками в кубе являются те, которые одновременно удовлетворяют всем шести неравенствам. Это именно то, что вы проверяете.

Если куб не выровнен с координатными осями, вы не можете определить его из двух углов. Скорее, он описывается путем предоставления неравенств для плоскостей, определяющих грани размера. Вам нужно будет проверить, что все шесть удовлетворены. Это всегда можно записать в виде матричного неравенства. В этом случае матрица 6x3, три столбца, так как точки находятся в трехмерном пространстве и одна строка для каждого ограничения. Это общий случай, но это проблема, как заявлено.

+0

Хмммм. Может работать. Я понял, что можно использовать матрицы, но у меня математика ржаветь – Systellence

+0

Да, вы можете использовать матрицы, но это излишне. Если ваш куб всегда выровнен с координатными плоскостями, то это решение корректно, так как куб представляет собой набор точек, координата которых находится между координатами x1 и x2 и y между y1 и y2 и т. Д. –

+1

Просто будьте осторожны со знаками - например, если P1 (-10, 10, -10) и P2 равен (10, -10. 10) –

0

Например, вы можете вычислить 3 проекции (для каждой из осей). Например, если вы хотите иметь проекцию для Z ах вы можете просто стереть Z-значение с вашей точки координаты:

projection({1,2,3}) -> {1,2} 

, а затем просто определить, является проекция (точка) внутри квадрата, который также просто проекция нижний (или верхний) 4 балла. Ans то же самое для атерных осей.

1

Точка p = (x, y, z) находится внутри куба с расширениями [x_0, x_1] x [y_0, y_1] x [z_0, z_1], когда каждая из координат точки находится в соответствующих диапазонах для x, y и z. То есть в псевдокоде

bool PointIsInCube(Point3D p, float x_max, float x_min, float y_max, float y_min, float z_max, float z_min) 
    { 
     return (p.x <= x_max && p.x >= x_min) && (p.y <= y_max && p.y >= y_min) && (p.z <= z_max && p.z >= z_min); 
    } 

С вашим данным кубом интервалы были бы [1,5] х [2,6] х [1,4], если я прочитал, что правильно. (первый интервал для x, второй для y, третий для z)

Смежные вопросы