Skocz do zawartości

sprawdzanie, czy pixel jest nad krzywą linią


pablo1517

Rekomendowane odpowiedzi

Zacznę od obrazka, który ma za zadanie przybliżyć zagadnienie.

 

matematikus.png

 

I teraz tak. Opiszę prosty przykład zrobienia platform, na które da się wskoczyć od dołu, przelatując przez nie, a potem na nich stanąć. By coś takiego wykonać, wystarczy porównać pozycje bohatera z pozycją Y górnej krawędzi naszej kwadratowej platformy. A co, jeśli nasza platforma jest trójkątem, i jej górna krawędź jest krzywa? Trzeba by wtedy uwzględnić pozycję X naszego bohatera... ale właśnie tu jest pies pogrzebany... jak to zrobić?

Odnośnik do komentarza
Udostępnij na innych stronach

Procenty miałeś kiedykolwiek? :P

tri.png

Do której? BC? Ok.

//Szerokość
w = max( Bx, Cx ) - min( Bx, Cx );
//Wysokość
h = max( By, Cy ) - min( By, Cy );

//Jakiś obiekt O o danym X który należy do < Bx, Cx >, a szukamy jego Y
Oy = h * ( w - ( Ox - min( Bx, Cx ) ) ) / w;

I masz Y od którego Y obiektu powinno być mniejsze. ;P

 

Można też użyć prostego równania prostej ax + b z takim samym warunkiem. ;P

Odnośnik do komentarza
Udostępnij na innych stronach

Zaraz sprawdzę czy działa. BTW: Jak to się widzi, jeśli takich obiektów ma być sporo xD?

 

Zrobiłem sobie, i dodałem obiektowi ruszanie sie na boki (oś x) czy jeśli jest ok to obiekt powinien poruszac sie wtedy po wyznaczonej linii? Bo u mnie to dany obiekt porusza się tworząc takie jakby lustrzane odbicie wyrysowanej linii xD

 

wyrysowałem se twój kod na kartce i podstawiłem liczby i Tymon zrobił błąd, i to pewnie specjalnie!! ARGH XD

 

Nie działa ;( To zwraca małe wartosci, nie większe niż szerokość tej linii. Tu jakiś wał jest drogi tymonie

Odnośnik do komentarza
Udostępnij na innych stronach

Ax = 100;
Ay = 300;

Bx = 400;
By = 300;

Cx = 100;
Cy = 100;

Ox = mouse_x;
Oy = 0;

//Szerokość
w = Bx - Cx;
//Wysokość
h = By - Cy;

//Jakiś obiekt O o danym X który należy do < Bx, Cx >, a szukamy jego Y
Oy = By - ( h * ( w - ( Ox - Cx ) ) / w );

draw_set_color( c_black );
draw_line( Ox, 0, Ox, Oy );
draw_triangle( Ax, Ay, Bx, By, Cx, Cy, true );
draw_circle( Ox, Oy, 5, true );
draw_set_color( c_red );
draw_line( Bx, By, Cx, Cy );

Ale tutaj wszystko będzie się zmieniać w zależności od położenia punktów. Pomęcz to. ;P

Odnośnik do komentarza
Udostępnij na innych stronach

Eh... Czemu newbom dajesz gotowca a mi zawsze taki, żebym sam dochodził xD.

Ha, tu już wszystko working xD genialnie xD

 

PS: Tymon napisz na gg, bo mam też inny problem, taki związany z GMem, ale nie wiem czy w ogóle idzie go rozwiązać, i nie jest to problem matematyczny. Na forum go nie bardzo opisywać, więc napisz jakby co proszę.

Odnośnik do komentarza
Udostępnij na innych stronach

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