Skocz do zawartości

Warunek sprawdzający liczbę z przedziału


Mind

Rekomendowane odpowiedzi

Witam, jestem w trakcie robienia projektu, w którym niestety nie mogę się obejść za bardzo bez sprawdzania czy dana liczba leży w danym przedziale. Dam przykład(y):

Sprawdzanie czy różnica kierunku od danego punktu jest większa niż powiedzmy 30 (w systemie koła 0-360, tak jakby różnica kątu), próbowałem w ten sposób:

GML
var pd=point_direction(x,y,obiekt.x,obiekt.y)

if direction>pd

{

if direction!=direction-pd>30

{

if speed>3

speed-=1

direction-=5

}

else

if speed<c_speed (c_speed = jego wcześniejsza wartość speed)

speed+=1

}

i na odwrót z pd>direction

 

Niestety to nie zadziałało, obiekt zaczynał chodzić w kółko, nie mógł znaleźć momentu w którym różnica kierunku będzie większa niż 30

 

Np. gdy robiłem przedział przy pobieraniu kolorów barw z RGB, sprawdzałem czy kolor jest czerwony, zrobiłem to w ten sposób:

GML
if (r>200 and g<50 and b<50)

 

Pytanie jest jedno, czy jest może jakaś wbudowana funkcja do sprawdzania przedziału? Jeśli nie, w jaki sposób zrobić to najbardziej optymalnie?

Odnośnik do komentarza
Udostępnij na innych stronach

Skoro nie mozesz uzyc funckji bo masz GM8..

Może istnieją lepsze rozwiązania niż to, to walnąłem na szybkiego ale zasada jest taka:

GML
// val1 i val2 to kąty

Roznica = min(max(val1,val2)-min(val1,val2),min(val1,val2) + (360-max(val1,val2)) )

 

EDIT:

Teoretycznie wydajniejsza wersja

GML (getangledifference)
var a0 = min(argument0,argument1);

var a1 = max(argument0,argument1);

return (min(a1-a0,a0+(360-a1)));

Ogólna idea jest taka, że sprawdzamy odległość z obu stron, więc w jednej opcji lecimy zgodnie ze wskazówkami zegara(tak jak kąt się zwiększa - robimy max-min) a w drugiej zgodnie ze wskazówkami zegara(kąt malejący, tutaj do mniejszego kąta dodajemy odległość większego kąta od 360). Funkcją min wybieramy krótszy kąt.

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