Найти координаты точек внутри пирамидальной области
Дан массив точек в пространстве. Обозначим точку из него как P. Из некоторой точки C вдоль оси OZ проведена четырехугольная пирамида такая, что ребра ее основания параллельны осям OX и OY, а сам четырехугольник является прямоугольником. Также известен угол между OZ и гранями пирамиды (пусть phi1 - угол с гранью, основание которой параллельно OX, а phi2 - угол с гранью, основание которой параллельно OY). Задача состоит в том, чтобы из всех P заданного массива отобрать те точки, которые лежат внутри заданной пирамиды.
При чем, пирамида имеет бесконечную высоту, поэтому при попытке решить данный вопрос я пыталась ориентироваться именно на углы отклонения от высоты, которая и лежит на OZ.
Моя идея была такова:
1) Пусть P = (Px, Py, Pz), C = (cx, cy, cz)
2) Pxz = (Px-cx, Py-cy), Pyz = (Py-cy, Py-cy)
3) Ox = (cx+1,cy,cz), Oy = (cx,cy+1,cz), Oz = (cx,cy,cz+1)
4) Далее ищем угол между Pxz и Oz (alpha) и угол между Pyz и Oz (beta)
5) Если |alpha|<=phi1 и |beta|<=phi2, то точка P нам подходит, иначе смотрим следующую точку.
Однако, когда я делала это в Matlab, результат выдавался неверным.
На изображении показана общая картина. Голубая, малиновая и зеленая линии - это система координат, относительно которой строится пирамида. Синяя линия - пространственный эллипс, точки которого - это заданный массив.

Ответы (1 шт):
Задаётся пирамида, конечно, альтернативненько....
Подразумеваем, что P - верхняя точка пирамиды.
Сечение пирамиды плоскостью z = P.Z является прямоугольником с полуразмерами
hw = (P.Z - C.Z) * tan(phi1)
hh = (P.Z - C.Z) * tan(phi2)
Остаётся проверить, что
abs(P.X - C.X) <= hw && abs(P.Y - C.Y) <= hh