Skocz do zawartości

Wykrycie przecięcia lini z punktem


Rekomendowane odpowiedzi

Opublikowano

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ć?

Opublikowano
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
        }
    }
}

Opublikowano

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

Opublikowano

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 ) {

Opublikowano

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.
Opublikowano

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.

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...