Въпрос относно колизия между правоъгълници


2

Здравейте, опитвам се да накодя една игра, но не знам как мога да проверя за колизия между два завъртяни(rotated) правоъгълника, опитах се да потърся в интернет, но уви,

не успях.Пробвах как работи с 

            if (Bx <= Ax + Awidth) {
                if (Ax <= Bx + Bwidth) {
                    if (By <= Ay + Aheight) {
                        if (Ay <= By + Bheight) {
                            return 1;
                        }
                    }
                }
            }

но тази колизия е неточна.Бих бил доста благодарен, ако получа малко помощ. Tук можете да видите кода ми(F12) и докъде съм стигнал с играта http://blablabla.free.bg/rect/start.html




Отговори



0

На прима виста се сещам за решение с пресечна точка на две отсечки (подчертавам отсечки, а не прави).

Всяка страна на четириъгълника ти е отсечка, имаш 4 страни (4 отсечки) от четириъгълник (А) и още толкова от четириъгълник (Б). Общо 16 комбинации, които да провериш.

Формулите за проверка на пресечна точка на две отсечки можеш да намериш в нета или в сборници по математика.

Например ето ТУК.


от INKolev (4141 точки)


0
Тук вече ще ти трябват някои "хакове" от математиката... :)

http://mathforum.org/library/drmath/view/54386.html

Y - Y1- ((Y2 - Y1)/(X2 - X1)*(X-X1)

Това ще ти връща положително число  за всяка точка (X,Y) която е от едната страна на правата (X1,Y1)-(X2,Y2) и отрицателно за точка от другата й страна.

(x1*y2 - y1*x2 -x0*y2 + y0*x2 + x0*y1 - y0*x1)

Това ще ти връща положително число ако при обхождане на триъгълника (X0,Y0)-(X1,Y1)-(X2,Y2) си се движил обратно 
на часовниковата стрелка и отрицателно ако обхождането е било в другата посока.

И при двата случая трябва да сравниш точката която те интересува и с 4-те страни на правоъгълника. 
Поиграй си с тези формули, нарисувай си нещата на хартия и мисля, че ще решиш успешно задачата.



П.С. И весели празници :)



от JulianG (5316 точки)


1
Ще си поиграя с тези формули, ще нарисувам как изглеждат нещата и след това ще размишлявам върху това как работи. Наистина много ми помогнахте. Желая ви весели празници !! :)

от svilenf (55 точки)


0

Казано по малко по-разбираем начин - ако обходиш един правоъгълник по контура му и точката ВИНАГИ се пада от една и съща страна (примерно от ляво) на всяка от отсечките, то точката е вътре в правоъгълника.

Проблема вероятно ще ти дойде от начина на съхраняване на правоъгълниците в програмата...


от JulianG (5316 точки)