Геометрія у комп’ютерних іграх

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

Зараз я захопився програмуванням під андроїд і зробив приблизно таку саму іграшку. І зіткнувся з тими самими геометричними завданнями, з якими зустрічався тоді.

геометрія
Завдання 1:намалювати стіни. І відразу виникаєЗавдання 2:визначити чи точка стіни чи ні (програв ти або продовжувати гру).

Для цього я поділив стіни на фігури: прямокутники та багатокутники.

З прямокутниками все просто: Просто намалювати:

і просто перевірити чи знаходиться точка всередині нього чи ні.

З багатокутником справа не така проста: намалювати її вже трохи складніше.

А перевірити торкання з крапкою ще складніше. Я спробував згадати шкільний курс геометрії, потім погуглив і знайшов таке рішення:

Багатокутник обов'язково має бути опуклим.

іграх

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

геометрія

При цьому кожне ребро має початкові та кінцеві координати, тобто є вектором. І можна визначити, чи знаходиться точка справа або зліва від нього.

І тому є проста формула.

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

геометрія

Завдання 4:гармата весь час спрямована на крапку. Якобчислити кут який її треба повернути? Дуже просто. І тому існує метод atan2.

Висновок:Стаття вийшла досить стисла і коротка, але, сподіваюся, корисна багатьом розробникам ігор, що починають. Всім удачі у навчанні та розробці!

Хардкорна конфа за С++. Ми запрошуємо лише профі.