Abfrage
Übersicht

![]() |
rambo256Betreff: Abfrage |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie wärs mit einfach Code: [AUSKLAPPEN] ...
? Oder hab ich dich falsch verstanden?
If e <> i Then ... End If ... |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 ![]() THX Dieser beitrag war an: Edlothiol gerichtet. @Rallimen,ich probiers mal aus und sag dann ebscheid ob es funzt.Thx |
||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
dubitat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
nö,jetzt hab ich es ja ![]() THX nochmals an alle! |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group