Abstand zweier Bildpunkte zur Kollisionserkkenung

ThePosterity

Aktives Mitglied
Also ich möchte gerne den Abstand von Bildpunkten zur erkennung von Kollisionen ermitteln
aber ich weiss leider nicht genau wie ich das realiesire kann:(
Die punkte bewegen sich in einer umlaufbahn also im Kreis!
Das ganze sollte mit einem array p(z)= x,y,Durchmesser) gemacht werden denk ich ???
es sollen später evtl merere punkte (ca 1000 oder mehr) kontoliert werden.

Es solte etwa soetwas herrauskommen:
der abstand = p(0) zu p(4) -(p(x)Durchmesser/2 + p(x)Durchmesser/2)
z=new array();
p(z)=3,3,5
p(z)=1,1,5
p(z)=9,2,5
p(z)=9,4,5
p(z)=5,5,5
p(z)=2,7,5
 
wenn ich dich richtig verstanden habe hast du ein 2d-Koordinatensystem mit den Punkten.
Und du möchtest nun die Entfernungen der Punkte bestimmen bzw die Kollisionen also der Entfernung 0.

Wieso versuchst dus nicht vektoriell:

Vektor v(a1,a2)

v12=v2-v1 damit bekommst du den vektor von punkt1 nach punkt2

und dann die länge des Vektors v12 mit dem Betrag bestimmen:
|v12|=wurzel(a1^2 + a2^2) wenn dies 0 ist gibts eine Kollision

wenn der Druchmesser auf die Punkte(dann wärens Kreise) bezogen ist müsstest du natürlich den Radius beider von des Betrages abziehen.
 
ups habe ich total vergessen da ich leider selber kein internet habe
sad.gif

aber mich würde das doch mehr interesieren mit dem abstand
smile.gif


das mit dem vektoren kapier ich noch nicht ganz
sad.gif


ich habe erstmal ein feld von x=100 y=100
P=planet
fv=flugvehikel

da habe ich jetzt z.b. planeten !
1. p(1)x=50 p(1)y=50 p(1)d=20
2. p(2)x=20 p(2)y=20 p(2)d=25

und natürlich flugvehikel oder sowas:

1. fv(1)x=45 fv(1)y=20 fv(1)d=2

so wie würde ich das denn konkret realisieren können ?
ich brauche eine funktion für kolission die mir ausgibt
wer zusammengestozen ist z.b.

fv(1) mit p(1)

nachher sollten aber viel mehr planeten und vehikel vorhanden sein
daher müsste ich wissen wie das mit der serverbelastung wäre !

the-posterity


 
naja zB so:

ich denke geh mal davon aus dass alles Klassen sind.
Dann gibste dem Flugvehikel eine Methode namens "kollision" oder sowas.
Diese rackert dann eine Liste aller vorhandenen Planeten ab und prüft auf Kollision.
Dies würde zB so gehen:

CODE
for(i=0;i<planet.length;i++){ //läuft alle Planeten der Liste durch
abstandX = planet[i].x - this.x; //berechnet den Abstandsvektor
abstandY = planet[i].y - this.y;
abstand = sqrt ( abstandX * abstandX + abstandY * abstandY ); // Rechnet den Abstand aus
abstand -= planet[i].d / 2; //zieht vom Abstand die Durchmesser beider Objekte ab
abstand -= this.d / 2;
if(abstand<=0){ //wenn <=0 ist eine Kollision vorhanden und es wird die Fehlerbehandlung ausgeführt, hier ein Ausnahmehandler, kann man machen wie man will
throw new collisionException(planet[i]);
}else{
return true; //keine Kollision
}
}



nun müsste man nu noch die Liste alles Vehikel durchlaufen und jedesmal die methode kollision(); ausführen. Iwe mit der Belastung is kann ich dir net sagen, glaube aber kaum das sowas einfaches belastend ist.
 
Zurück
Oben