Skocz do zawartości

najwieksza odległość między obiektami


Rekomendowane odpowiedzi

przy tworzeniu zapisz ich id do tablicy

GML
var odl,naj1,naj2;

odl=0;

for(i=0;i<liczba_obiektow(jakis byl na to kod nie pamietam jaki);i+=1){

for(j=0;j<liczba_obiektow(jakis byl na to kod nie pamietam jaki);j+=1){

with(tablica){

if (distance_to_object(tablica[j])>odl)

{odl=distance_to_object(tablica[j];

naj1=tablica;

naj2=tablica[j];}

}}

odl - odleglosc

naj1 i naj2 - najdalsze obiekty od siebie

Odnośnik do komentarza
Udostępnij na innych stronach

Zrobiłem to tak:

 

GML
for(i=1; i<global.ilosc_boxow; i+=1)

{

for(j=1; j<global.ilosc_boxow; j+=1)

{

 

if(box_click != 0 and box_click[j] != 0 and box_click != box_click[j] )

{

with(box_click)

{

if (distance_to_object( box_click[j] ) > odleglosc)

{

odleglosc=distance_to_object( box_click[j] );

}

}

}

}

}

 

 

i tez na inny sposób:

 

GML
i=1;

while(box_click != 0)

{

j=1;

while(box_click[j] != 0)

{

with(box_click)

{

if (distance_to_object( box_click[j] ) > odleglosc)

{

odleglosc=distance_to_object( box_click[j] );

}

}

j+=1;

}

 

 

i+=1;

}

box_click to tablica z id obiektów, global.ilosc_boxow to liczba wszystkich obiektów

 

ale tu i tu wywala ten sam error:

___________________________________________
ERROR in
action number 1
of Alarm Event for alarm 2
for object SYSTEM:

Error in code at line 53:
                   if (distance_to_object( box_click[j] ) > odleglosc)

at position 52: Unknown variable j

 

Czasem tez wywala Unknown variable odleglosc...

Poradzicie cos?

Odnośnik do komentarza
Udostępnij na innych stronach

Czas potrzebny na wykonanie skryptu poszukiwania dwóch najdalej położonych od siebie obiektów spośród n obiektów rośnie wykładniczo. Jeśli się nie mylę, wyraża się on wzorem n!/2 dla n > 1, gdzie jednostką jest porównanie odległości dwóch obiektów.

 

Dlatego lepiej użyć funkcji instance_furthest, wtedy czas wykonania skryptu wynosi co najwyżej n.

 

Pisząc tę wypowiedź nie uwzględniłem Twojego ostatniego postu.

Odnośnik do komentarza
Udostępnij na innych stronach

GML
a = 0 //a to odległość od siebie najdalszych obiektów

g1 = 0 //pierwszy tymczasowy obiekt

g2 = 0 //drugi tymczasowy obiekt

id1 = -4 //pierwszy obiekt

id2 = -4 //drugi obiekt

for(i = 0; i < instance_number(obiekt); i += 1)

{

g1 = instance_find(obiekt,i)

g2 = instance_furthest(g1.x,g1.y,obiekt)

if(point_distance(g1.x,g1.y,g2.x,g2.y) > a)

{

id1 = g1

id2 = g2

a = point_distance(g1.x,g1.y,g2.x,g2.y)

}

}

 

Nie jestem całkowicie pewien, czy zadziała, ale powinno.

Odnośnik do komentarza
Udostępnij na innych stronach

GML
id_first = noone;

id_second = noone;

distance = 0;

with( Object ) {

var _id, _distance;

_id = instance_furthest( x, y, Object );

_distance = point_distance( x, y, _id.x, _id.y );

if( _distance > other.distance ) {

other.distance = _distance;

other.id_first = _id;

other.id_second = id;

}

}

NO! Teraz ok. W zmiennych id_first i id_second masz ID tych obiektów, a w distance masz odległość.

 

 

https://gmclan.org/up152_14_100511_gm81_furest_pair.html

Myszą przesuwasz obiekty.

Odnośnik do komentarza
Udostępnij na innych stronach

GML
a = 0 //a to odległość od siebie najdalszych obiektów

g1 = 0 //pierwszy tymczasowy obiekt

g2 = 0 //drugi tymczasowy obiekt

id1 = -4 //pierwszy obiekt

id2 = -4 //drugi obiekt

r = instance_number(obiekt);

i = 0;

repeat( r )

{

g1 = instance_find(obiekt,i)

g2 = instance_furthest(g1.x,g1.y,obiekt)

d = point_distance(g1.x,g1.y,g2.x,g2.y);

if(d > a)

{

id1 = g1

id2 = g2

a = d

}

i+=1;

}

Try now. ;)
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ę...