Wielokąt na układzie współrzędnych, kolizje

0

Tak jak w nazwie tematu, jak wykrywać kolizji na podstawie krawędzi (odcinków) z czego jeden punkt składa się z X i Y.

  ------- 
 /          \
/           /   
\          /   O <- Punkt wykrywający kolizje wielokątu.
 \_____/

Porównywałem aktualną pozycję, tak aby znajdowała się pomiędzy x z X a y z Y (razem z 5 odcinków = 10 punktó XY), ale nic z tego mi nie wychodziło. Jakieś koncepcje z waszej strony. Potrafię wykrywać kolizję na prostokąt i kwadrat, ale żeby wykrywać z równoległoboku i rombu to już ciężka sprawa. Słucham waszych wypowiedzi.

0

Na podstawie boków wielokąta wyznaczasz proste i sprawdzasz czy punkt leży po odpowiedniej stronie tej prostej. Powinno działać dla dowolnych wielokątów czy to wklęsłych czy wypukłych. Google i znajdziesz sporo na ten temat

0

To co mówisz to się nie sprawdza, powiedziałem to w poprzednim poście o tym. Jedynie jeżeli oś x lub y znajduje się pomiędzy to wtedy się da wykryć kolizję, ale w ich połączeniu nie da rady.

Znalazłem to, ale za nic nie mogę zrozumieć o co chodzi.
http://en.wikipedia.org/wiki/Polygon

Robię double posta, gdyż zapomniałem coś dodać. Proszę moderatora o podpięcie do mojego ostatniego postu.

Na początek chciałbym wykonać wykrywanie kolizji na trójkącie i proszę was o pomoc, jak to wykonać.

1

google ci pomoże: naiwne zapytanie i masz wynik

0

Okej jest super, trochę sie poczytało lecz przydała by mi się jedna rzecz. Chciałbym sprawdzić czy dany 'XY' znajduje się pomiędzy dwoma punktami (na odcinku) w wyniku czego będę mógł odliczyć ilość krawędzi, z którymi miał styczność punkt 'XY'. Porównywanie mniejszości, większości 'XY' z punktami (na odcinku) nie daje zamierzanego rezultatu :(

Rysuneczek dla oka:
http://iv.pl/upload.php

Prawidłowo powinien wykrywać żółty punkt, a robi zupełnie inaczej tworząc przekątna dla kwadratu z najbliżej i najdalej wysuniętego punktu 'XY' co kolizją staję się kwadrat :(

Warunek wykrywania kolizji na odcinku:

 
//x, y - punkt, który ma odpowiadać za wykrywanie odcinka
//X1 Y1, X1 Y2 - punkty odpowiadające wierzchołkom odcinka

if( (X1 < x && x < X2) && (Y1 < y && y < Y2)  

Będe bardzo wdzięczny za pomoc.

PS. Oczywiście proszę mnie nie łapać o to, że ustalam stałą, która liczba ma być niby większa. To już uprzednio ustalone, że ma znajdować się pomiędzy mniejszą, a wiekszą współrzedną.

Przepraszam, pomyliłem linki:
http://iv.pl/images/50103844231598181159.jpg

0

odcinek wyznacza prostą o równaniu: Ax+By+C=0. Odległość punktu od prostej to: d=\frac{|A\cdot x+B\cdot y+C|}{\sqrt{A<sup>2 + B</sup>2}}.
Jeśli d<epsilon (mała wartość) to znaczy, że punkt leży na prostej.
By sprawdzić czy punkt leży pomiędzy końcami odcinka, liczysz iloczyn skalarny wektorów łączących ten punkt i końce odcinka.
Wartość ujemna oznacza, że punkt jest pomiędzy końcami odcinka.

0

Sory, ale walnięciem prosto z mostu jakimiś wzorami, w których nie wszystko wiadomo o co chodzi mi nie pomoże. Z prawej strony wzoru wynika, że oblicza dystans, ale po lewej nie wiadomo o co sie rozchodzi. Mógłbyś to rozwinąć..

Szybkie sprawdzanie czy punkt leży na odcinku

To mi bardzo pomogło.

Przepraszam double post, ta metody z linki powyżej nie jest zbyt dokładna jak się okazywało. Nadal potrzebuję pomocy z waszej strony.

1 użytkowników online, w tym zalogowanych: 0, gości: 1