abfrage zwischen zwei types

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Philon

Betreff: abfrage zwischen zwei types

BeitragMi, Aug 12, 2009 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
hi!

habe ein type.
mehrere instanzen dieses types sollen sich alle gegenseitig anziehen (gravitation...)

wie soll ich das machen, weil man kann ja nicht das machen:
Code: [AUSKLAPPEN]

for green.square=each square
for green.square=each square
....
next
next

oware

BeitragMi, Aug 12, 2009 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
for local t1:type = eachin list
  for local t2:type = eachin list
   if t1 <> t2
     'was auch immer
   endif
  next
next


tippe ich mal so ins blaue...
oder was meintest du?

und jemand sollte es nach blitzbasic übersetzen Wink
www.myspace.com/oliverpuetz -> Mein Instrumentalprojekt

Xeres

Moderator

BeitragMi, Aug 12, 2009 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie Oware schon schreibt...
BlitzBasic: [AUSKLAPPEN]
For t1.square = Each square 
For t2.square = Each square
If t1 <> t2 Then

EndIf
Next
Next

Alle Types vom Typ square sind in einer Liste. Die kannst du mit beliebigen Zugriffsvariablen durchgehen - du musst nur überprüfen, ob du nicht ein Objekt mit sich selbst vergleichst.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Philon

BeitragMi, Aug 12, 2009 17:43
Antworten mit Zitat
Benutzer-Profile anzeigen
hm.. also mir ist da was nicht klar..

hier mein ergebnis:

Code: [AUSKLAPPEN]
For t1.square=Each square
      For t2.square=Each square
         If t1 <> t2 Then
            t1\ax=0      
            t1\ay=0      
      
            distance=Sqr((t2\xPos-t1\xPos)^2+(t2\yPos-t1\yPos)^2) ;entfernung der beiden squares
            a=6.67*(10^-11)*(t1\mass/(distance^2)) ;a=G*(m/(d^2)) ;daraus entstehende Beschleunigung
            ax=((t2\xPos-t1\xPos)/distance)*a ;
            ay=((t2\yPos-t1\yPos)/distance)*a ;aufspalten der beschleunugung in x-und y-Richtung
         
            t1\ax=t1\ax+ax
            t1\ay=t1\ay+ay
         EndIf
      Next
   Next


es hatt gar keine auswirkung auf meine green.squares . (da staht ja auch nur was von t2 und t2.squares?) bitte erklähr mir wer wie das alles funkioniert! deise t1 und t2 sache verwirrt mich.

philon

Xeres

Moderator

BeitragMi, Aug 12, 2009 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ob die Zugriffsvariable green, t1, t2 oder sonstwie heißt, ist egal. Du brauchst nur zwei Verschiedene um ein und die selbe Type-Liste verschachtelt zu durchlaufen.
Wenn du die Koordinaten im Inneren der Schleife auf 0 setzt, würde es mich auch wundern, wenn sich deine Objekte irgendwo hin bewegen - sie starten ja alle immer wieder vom Koordinatenursprung.
Auch das du die Gravitationskonstante benutzt ist nicht unbedingt hilfreich... Lass dir so eine Berechnung mal ausgeben... 10^-11 ! ist verdammt klein. Wenn du die Koordinaten nicht in Float variablen abspeicherst werden sie auch sowieso immer 0 sein.
- Float benutzen
- Benutze Debuglog, stop o.ä. um dir die Werte auszugeben -> wenn sie zu klein sind, musst du mal Gott Spielen und die Gravitation so bearbeiten, dass du sichtbare Effekte erzielst. Das wichtigste ist nur, dass der die Kraft mit 1/r² abnimmt - dann sieht's realistisch aus, egal wie die Zahlenwerte sind.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Philon

BeitragMi, Aug 12, 2009 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo!
ich habe schon an alles gedacht:
-alles sind floats
-um gegen die G-konstante anzugehen haben die squares eine sehr hohe masse
-was ich da auf 0 setze ist die beschleunigung, die später mit der geschwindigkeit verrechnet wird

frage: wenn ich "t1.square sage", spreche ich dann dieselben squares wie mit "green.square" an?
ich dachte das währen dann zwei verschiedene square-typen.

philon

Xeres

Moderator

BeitragMi, Aug 12, 2009 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Philon hat Folgendes geschrieben:
wenn ich "t1.square sage", spreche ich dann dieselben squares wie mit "green.square" an?
Ja, das sind die selben. Es gibt pro Type nur eine Liste. Immer wenn du new square aufrufst, wird an die square-Liste ein neuer Eintrag angehängt.
Bsp.:
BlitzBasic: [AUSKLAPPEN]
Type Ttest
Field Wert%
End Type

Local test.Ttest, green.Ttest, blue.Ttest

test = New Ttest
test\Wert = 1

green = New Ttest
green\Wert = 2

green = New Ttest
green\Wert = 3

For blue = Each Ttest
Print(blue\Wert)
Next

WaitKey

Die Zugriffsvariablen zeigen immer nur auf einen Eintrag. Mit green = null zeigt eine Variable auf "kein Objekt".
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Philon

BeitragMi, Aug 12, 2009 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
aaah! DANKE!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group