Вычисление расстояния
Теперь, когда мы нашли пересечение с объектом, встает вопрос о том, как вычислить расстояние до него. Поскольку мы нашли точку пересечения, то можем найти и расстояние от этой точки до позиции игрока. Это расстояние нам нужно для двух вещей:
§
Чтобы узнать тип пересечения (вертикальное или горизонтальное);
§ Чтобы выяснить масштаб стен.
Формула 6.6. Теорема Пифагора.
Мы можем использовать для этого теорему Пифагора;
Н =sqrt (х2 + у2)
Это прекрасная формула, но ужасно сложная для ПК, поскольку вычисление квадратного корня — процесс весьма медленный и долгий. Мы, конечно, можем использовать табличное представление функции квадратного корня, но и в этом нет ничего хорошего. Есть другой, более простой способ найти удаление точки пересечения от игрока, если вычислить координаты точек и найти sin © и cos ©.
Давайте посмотрим на рисунок 6.26.
Поскольку мы уже вычислили точки вертикального и горизонтального пересечения, мы можем воспользоваться известным правилом, чтобы найти синус и косинус угла наклона:
§ Угол наклона луча (он у нас есть);
§ Длина гипотенузы (мы ее хотим найти);
§ Длина сторон треугольника (который мы имеем).
Назвав переменные так же, как они обозначены на рисунке 6.26, напишем формулы для вычисления длины- гипотенузы (или, что то же самое - искомого расстояния).
Формула 6.7. Вычисление расстояния до точки Х-пересечения.
расстояние = (Xi
- Хр) х cos-1
A
Формула 6.8. Вычисление расстояния до точки Y-пересечения.
расстояние = (Yi
- Yp) x
sin-1
A
где А - это угол луча, который рассматривается в настоящее время. В программе это просто индекс от 0 до 1920 для таблицы вычисленных значений sin-1 и cos-1.
Это может показаться громоздким, но если это правильно написать и оптимизировать, то процесс будет занимать несколько миллисекунд. После того как расстояние будет вычислено, встает вопрос, что ближе, а что дальше на экране.