Определение угла

Занялся разработкой 3D движка на python и возникла проблема: есть угол обзора игрока, а точнее два угла (left = angle - FOV/2 и right = angle + FOV/2) и угол относительно некой материальной точки (вершина объекта) (формула angle = math.acos((x-self.x)/distance)), где x - координата вершины объекта, self.x - координата игрока, distance - расстояние от игрока до вершины, также при y-self.y < 0: angle = 2*math.pi - angle)

Нужно написать функцию, которая проверяет эти три угла и выводит 0, 1 или 2: если 1, что вершина находится между left и right, если 0 то левее, если 2, то правее.


Ответы (1 шт):

Автор решения: MBo

Если работать в углах - считаем знаковый угол между центральным направлением angle и направлением на объект

dx = x-self.x
dx = y-self.y
diff = math.atan2(dx*sin(angle)-dy*cos(angle), dy*sin(angle)+dx*cos(angle))
if abs(diff < Fov/2):
    внутри сектора
elif diff > 0:
    слева
else:
    справа  

    
→ Ссылка