Геометрія у комп’ютерних іграх
Всім привіт! Колись давним-давно я робив прості іграшки на Flash. Наприклад: іграшка - провести курсор мишки через лабіринт, не торкаючись стін і ухиляючись від будь-яких об'єктів, що рухаються. Деякі з цих об'єктів рухаються по заданій траєкторії, деякі женяться за курсором, а деякі стріляють в курсор іншими об'єктами, що рухаються.
Зараз я захопився програмуванням під андроїд і зробив приблизно таку саму іграшку. І зіткнувся з тими самими геометричними завданнями, з якими зустрічався тоді.

Для цього я поділив стіни на фігури: прямокутники та багатокутники.
З прямокутниками все просто: Просто намалювати:
і просто перевірити чи знаходиться точка всередині нього чи ні.
З багатокутником справа не така проста: намалювати її вже трохи складніше.
А перевірити торкання з крапкою ще складніше. Я спробував згадати шкільний курс геометрії, потім погуглив і знайшов таке рішення:
Багатокутник обов'язково має бути опуклим.

І описувати його треба обов'язково за годинниковою стрілкою.

При цьому кожне ребро має початкові та кінцеві координати, тобто є вектором. І можна визначити, чи знаходиться точка справа або зліва від нього.
І тому є проста формула.
Щоб визначити всередині точка або зовні я в циклі перебираю всі ребра, і якщо хоч для одного ребра точка знаходиться зліва (в даному випадку це ребро BC) - значить вона зовні, так як багатогранник описаний за годинниковою стрілкою.

Завдання 4:гармата весь час спрямована на крапку. Якобчислити кут який її треба повернути? Дуже просто. І тому існує метод atan2.
Висновок:Стаття вийшла досить стисла і коротка, але, сподіваюся, корисна багатьом розробникам ігор, що починають. Всім удачі у навчанні та розробці!
Хардкорна конфа за С++. Ми запрошуємо лише профі.