baca Opublikowano 10 Grudnia 2010 Opublikowano 10 Grudnia 2010 Mam x punktów i bym chciał określić pomiędzy dwoma przecięcie np: ... Point a(100, 100); Point b(200, 200); ... i jak kliknę pomiędzy punktem a i b, to żeby mi wykryło kolizję z linią pomiędzy tymi punktami. Jak to zrobić?
Tymon Opublikowano 10 Grudnia 2010 Opublikowano 10 Grudnia 2010 Znaczy chcesz zbudować odcinek i sprawdzić czy kliknięty punkt leży na odcinku?
Tymon Opublikowano 10 Grudnia 2010 Opublikowano 10 Grudnia 2010 mouse = { x, y } points = { a : { x, y }, b : { x, y } }; if( mouse.x >= min( points.a.x, points.b.x ) && mouse.x <= max( points.a.x, points.b.x ) ) { if( mouse.y >= min( points.a.y, points.b.y ) && mouse.y <= max( points.a.y, points.b.y ) ) { a = ( points.a.y - points.b.y ) / ( points.a.x - points.b.x ); b = points.a.y - a * points.a.x; if( mouse.x * a + b == mouse.y ) { // ok } else { // bad } } }
Tymon Opublikowano 10 Grudnia 2010 Opublikowano 10 Grudnia 2010 https://gmclan.org/up152_12_101210_gm8_point_on_line.html Szybki test. Spacja restart rooma.
Kofel Opublikowano 10 Grudnia 2010 Opublikowano 10 Grudnia 2010 Tak żeby było bardziej analitycznie, musisz sobie wyznaczyć za pomocą tych dwóch punktów funkcje liniową, i później podstawić pozycję myszki do tej funkcji
Tymon Opublikowano 10 Grudnia 2010 Opublikowano 10 Grudnia 2010 A niby jak jest tutaj to zrobione? :)
Kofel Opublikowano 10 Grudnia 2010 Opublikowano 10 Grudnia 2010 Skont mam wiedzieć, jestem koniem. Przecież nie napisałem, że u Ciebie jest inaczej ;o Dodał bym tylko jakiś zakres tolerancji: if( abs( mouse.x * a + b - mouse.y ) < 0.5 ) {
Tymon Opublikowano 10 Grudnia 2010 Opublikowano 10 Grudnia 2010 Zabrzmiało jakbyś w ogóle nie widział co napisałem. =P Dodał bym tylko jakiś zakres tolerancji: if( abs( mouse.x * a + b - mouse.y ) < 0.5 ) { Zależy czy oczekuje takiej tolerancji. Niemniej: +1.
baca Opublikowano 10 Grudnia 2010 Autor Opublikowano 10 Grudnia 2010 Tolerancja to jest dobry pomysł ponieważ jest mi to potrzebne do edytora vektorów. a jak wiadomo nie jest łatwo trafić w linię grubości 1-2px.
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się