Abfrage

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

rambo256

Betreff: Abfrage

BeitragDi, Apr 20, 2004 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi leute,ich habe eine Frage.
Ich habe wieder Bälle und die Daten der Bälle,also die Koordinaten und so,
in einem Array gespeichert.
Nun möchte ich den Abstand zwischen allen Bällen ermitteln.
Klar mit For-Schleifen und den abstand errechne ich mit dem Satz des Pythagoras.Hört sich einfach an,isset aber nicht,denn
wenn ich das mit 2 Forschleifen machen würde also so:
Code: [AUSKLAPPEN]

For i=1 to Max_Ball
    For e=1 to Max_Ball
        blbblblb
    next
next

Aber da gibt es ja ein Problem,denn wenn i=1 ist,dann ist gleichzeitig e ja auch 1.Da ich alle Koordinaten eines Balles in einem Array habe,würde ich also dummerweise den Abstand zwischen dem 1 Ball und nochmal dem 1 Ball abfragen.Das ist ja dann auch wenn i=2,dann e=2,dann bringt das ja wieder nichts!!!
Frage nun: Wie kann ich das umgehen?
Das hier ist ein Versuch von mir:

Code: [AUSKLAPPEN]
For i=1 To Max_BallH
      For e=i+1 To Max_BallH
         For f = i-1 To Max_BallH
               
               Distanz_BallH_BallH_i_e# = Sqr(((Ball_H(i,0)-Ball_H(e,0))^2)+((Ball_H(i,1)-Ball_H(e,1))^2))
               Distanz_BallH_BallH_i_f# = Sqr(((Ball_H(i,0)-Ball_H(f,0))^2)+((Ball_H(i,1)-Ball_H(f,1))^2))
               Distanz_BallH_BallH_e_f# = Sqr(((Ball_H(e,0)-Ball_H(f,0))^2)+((Ball_H(e,1)-Ball_H(f,1))^2))
               
               If Distanz_BallH_BallH_i_e# > 20 Then
                  Ball_H(i,3) = -Cos(Winkel(Ball_H(i,0),Ball_H(i,1),Ball_H(e,0),Ball_H(e,1)))
                  Ball_H(i,4) = -Sin(Winkel(Ball_H(i,0),Ball_H(i,1),Ball_H(e,0),Ball_H(e,1)))
                  Ball_H(e,3) = Cos(Winkel(Ball_H(i,0),Ball_H(i,1),Ball_H(e,0),Ball_H(e,1)))
                  Ball_H(e,4) = Sin(Winkel(Ball_H(i,0),Ball_H(i,1),Ball_H(e,0),Ball_H(e,1)))
               EndIf
               
               If Distanz_BallH_BallH_i_f# > 20 Then
                  Ball_H(i,3) = -Cos(Winkel(Ball_H(i,0),Ball_H(i,1),Ball_H(e,0),Ball_H(f,1)))
                  Ball_H(i,4) = -Sin(Winkel(Ball_H(i,0),Ball_H(i,1),Ball_H(f,0),Ball_H(f,1)))
                  Ball_H(f,3) = Cos(Winkel(Ball_H(i,0),Ball_H(i,1),Ball_H(f,0),Ball_H(f,1)))
                  Ball_H(f,4) = Sin(Winkel(Ball_H(i,0),Ball_H(i,1),Ball_H(f,0),Ball_H(f,1)))
               EndIf
               
               If Distanz_BallH_BallH_e_f# > 20 Then
                  Ball_H(e,3) = -Cos(Winkel(Ball_H(e,0),Ball_H(e,1),Ball_H(f,0),Ball_H(f,1)))
                  Ball_H(e,4) = -Sin(Winkel(Ball_H(e,0),Ball_H(e,1),Ball_H(f,0),Ball_H(f,1)))
                  Ball_H(f,3) = Cos(Winkel(Ball_H(e,0),Ball_H(e,1),Ball_H(f,0),Ball_H(f,1)))
                  Ball_H(f,4) = Sin(Winkel(Ball_H(e,0),Ball_H(e,1),Ball_H(f,0),Ball_H(f,1)))
               EndIf
               
               
         Next
      Next
   Next      


Es wäre sehr nett wenn ihr mir helfen würdet

THX
 

Edlothiol

BeitragDi, Apr 20, 2004 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wärs mit einfach Code: [AUSKLAPPEN]
...
If e <> i Then
...
End If
...
? Oder hab ich dich falsch verstanden?

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, Apr 20, 2004 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
For i=1 to Max_Ball -1
    For e= i + 1 to Max_Ball
        blbblblb
    next
next


so könnte es gehen.....
[BB2D | BB3D | BB+]

rambo256

BeitragDi, Apr 20, 2004 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist mein Array für meine Bälle,das i steht quasi für einen Ball.
Aber ich glaub,das wirst du auch wissen Laughing

Code: [AUSKLAPPEN]
For i=1 to Max_Ball
      Ball_H(i,0)= BallH_X#
      Ball_H(i,1)= BallH_Y#+(i*30)
      Ball_H(i,2)= BallH
      Ball_H(i,3)= BallH_Speed_X#
      Ball_H(i,4)= BallH_Speed_Y#
      Ball_H(i,5)= Winkel_BallW_BallH
      Ball_H(i,6)= Winkel_BallH_BallH
      Ball_H(i,7)= Winkel_BallH_Wand1
      Ball_H(i,8)= Winkel_BallH_Wand2
      Ball_H(i,9)= Winkel_BallH_Wand3
      Ball_H(i,10)= Winkel_BallH_Wand4
      Ball_H(i,11)= 10
      Ball_H(i,12)= BallH_Speed#
      Kollisions_Distanz# = BallW_radius+Ball_H(i,11)
next


Ich möchte halt nur vermeiden,das er wie schon gesagt,ein und denselben Ball abfragt.
Ich wüsste jetzt nicht wie mir dein Vorschlag weiterhelfen könnte,oder ich selbst bin zu doof Laughing ,Scherz beiseite,vll könnteste so eine Probeschleife als Beispiel mir mal schreiben?
THX

Dieser beitrag war an: Edlothiol
gerichtet.
@Rallimen,ich probiers mal aus und sag dann ebscheid ob es funzt.Thx

rambo256

BeitragDi, Apr 20, 2004 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
also es klappt soweit,aber da gibbet noch ein problem...
,anchmal bleiben die bälle einfach aneinander kleben!
hier der code:

Code: [AUSKLAPPEN]
   For i=1 To Max_BallH-1
      For e=i+1 To Max_BallH
         Distanz_BallH_BallH# = Sqr(((Ball_H(i,0)-Ball_H(e,0))^2)+((Ball_H(i,1)-Ball_H(e,1))^2))
         
         If Distanz_BallH_BallH# < 20 Then
            collide = collide + 1
            Ball_H(i,3) = Cos(Winkel(Ball_H(i,0),Ball_H(i,1),Ball_H(e,0),Ball_H(e,1)))
            Ball_H(i,4) = Sin(Winkel(Ball_H(i,0),Ball_H(i,1),Ball_H(e,0),Ball_H(e,1)))
            Ball_H(e,3) = -Cos(Winkel(Ball_H(i,0),Ball_H(i,1),Ball_H(e,0),Ball_H(e,1)))
            Ball_H(e,4) = -Sin(Winkel(Ball_H(i,0),Ball_H(i,1),Ball_H(e,0),Ball_H(e,1)))
            Kollisionen(i,1) = Kollisionen(e,1)
         EndIf
      Next
   Next

rambo256

BeitragDi, Apr 20, 2004 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
so.hab es jetzt gelöst,kollisionen(i,1) stand für den generellen BallSpeed und ich musste nun sicherstellen,das der ball der den anderen ball anstoßen soll keinen Ball Speed ungleich null hat.
@Rallimen: THX für deine Hilfe!! Nun klappt es endlich und ich bin nun einen riesen Schritt in meinem Prog weiter gekommen.
Ich glaub ihr wisst eh schon was das wird Wink
 

dubitat

BeitragDi, Apr 20, 2004 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würde es so machen:

Code: [AUSKLAPPEN]
íf ballx(1) > ballx(2) then ballx(1) - ballx(2) endif



und das gleiche einfach für y auch... du musst es auch andersrum prüfen und dann haste ganz einfach den abstand in pixeln... ist das denn so schwer?
Erare humanum est - Irren ist Menschlich

rambo256

BeitragDi, Apr 20, 2004 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
nö,jetzt hab ich es ja Wink
THX nochmals an alle!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group