Программирование игр для Windows. Советы профессионала

Вычисление расстояния


Теперь, когда мы нашли пересечение с объектом, встает вопрос о том, как вычислить расстояние до него. Поскольку мы нашли точку пересечения, то можем найти и расстояние от этой точки до позиции игрока. Это расстояние нам нужно для двух вещей:

§

Чтобы узнать тип пересечения (вертикальное или горизонтальное);

§          Чтобы выяснить масштаб стен.

Формула 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.

Это может показаться громоздким, но если это правильно написать и оптимизировать, то процесс будет занимать несколько миллисекунд. После того как расстояние будет вычислено, встает вопрос, что ближе, а что дальше на экране.



Содержание раздела