Simulation der Anziehungskraft zwischen (mehreren) Massen ..
Übersicht BlitzBasic Codearchiv
Markus2Betreff: Simulation der Anziehungskraft zwischen (mehreren) Massen .. |
Sa, Jan 17, 2004 0:24 Antworten mit Zitat |
|
---|---|---|
Man hat ja sonnst nix zu tun 8)
Simulation der Anziehungskraft zwischen Massen In 3D und 2D Code: [AUSKLAPPEN] ;Simulation der Anziehungskraft zwischen (mehreren) Massen mit Spielerei :-) von M.Rauch Jan 2004 ;BlitzBasic 2D 3D mit Umschaltmodus ! ;MR 16.01.2004 ;############################################################### ; Kurzanleitung ; Wenn Constante Mode3D=0 dann hat man die 2D Ansicht von Vorne ; und bei BallNew wird Position Z=0 ; 3D ; Linke Maustaste = Objekt Fixieren An/Aus ; Rechte Maustaste = Objekt Wegstoßen ; Enter wenn Maus über Objekt = Objekt auf Null Punkt setzen ; 2D ; Linke Maustaste über Kreis = Objekt bewegen ;############################################################### Const Mode3D=1 ;############################################################### If Mode3D=1 Then Graphics3D 1024,768,16,2 Else Graphics 1280,1024,16,2 EndIf AppTitle "Simulation der Anziehungskraft zwischen (mehreren) Massen mit Spielerei :-) von M.Rauch Jan 2004" SetBuffer BackBuffer() ;############################################################### Global cam If Mode3D=1 Then cam=CreateCamera() CameraRange cam,0.1,10000 CameraZoom cam,2 PositionEntity cam,0,0,-20 EndIf ;############################################################### Global light If Mode3D=1 Then AmbientLight 16,16,16 light=CreateLight(2) LightRange light,75 PositionEntity light,EntityX(cam)-10,EntityY(cam)+10,EntityZ(cam)-10 EndIf ;############################################################### Global myFont=LoadFont("FixedSys",9) SetFont myFont ;############################################################### Type V3D ;Vector Field x# Field y# Field z# End Type Global DummyV3D.V3D=New V3D ;############################################################### Type BallType Field Entity Field EntityFix Field plast.V3D ;Positions Vector zuletzt Field p.V3D ;Positions Vector Field d.V3D ;Richtungs Vector Field Geschwindigkeit.V3D ;v in Meter/Sekunde m/s Field Beschleunigung# ;a in Meter/Sekunde² m/s² Field Masse# ;m in Kilogramm kg Field Radius# ;r in Meter m Field Kraft# ;F in Newton N Field RGB ;Farbe in Bunt Field Colli ;Collision in Bit Field Moveable ;1=bewegbar 0=keine Geschwindigkeit End Type Global Ball.BallType Global BallEntity If Mode3D=1 Then BallEntity=CreateSphere(16) HideEntity BallEntity EntityShininess BallEntity,0.25 EntityAlpha BallEntity,0.90 ;beim Auskommentieren sieht man den Fix Punkt nicht ! EndIf ;############################################################### Type WegType Field Entity Field x# Field y# Field z# Field RGB End Type Global Weg.WegType Global WegEntity If Mode3D=1 Then WegEntity=CreateCube() HideEntity WegEntity EndIf ;############################################################### BallNew -3, 3 ,-3,175,RGB(255,0,0),0 BallNew 3,-3 , 3,175,RGB(255,0,0),0 BallNew 0,0 ,3,25,RGB(255,128,64),1 BallNew 0,2 ,2,50,RGB(255,255,0),1 BallNew 0,-2 ,1,28,RGB(0,255,0),1 BallNew 0,-3 ,-2,22,RGB(0,0,255),1 ;############################################################### ;F=Kraft in 1 Newton = N ;m=Masse in 1 Kilogramm = kg -> 1 t(Tonne) = 1000 kg ;M=Drehmoment in 1 Newtonmeter = Nm ;v=Geschwindigkeit in m/s = delta x / delta t ist auch x' oder auch Strecke/Zeit also s/t ;Beispiel 100 km/h = 100 km pro Stunde ;x ist in Meter ;t ist in Sekunden ;100 km sind 100m*1000=100000m ;1 Std. hat 3600 Sekunden ;100000m / 3600s = 27.777777 ms ;von meter in der sekunde zu km/h ist m/s * 3.6 ;=99.999997 km/h ;a=Beschleunigung im Meter/(Sekunde*Sekunde) = m/s² ;a=delta v / delta t ist auch v' ;F=Kraft in N -> muss man zufügen um bei xxx Kilogramm was zu beschleunigen ! ;F=m*a ;a= (F / m) -> a = Beschleunigung in m/s2 ;G=m*g -> g = Fallbeschleunigung in m/s² z.B. 9.81 und G = Gewichtskraft in Newton ;g=G / m ;############################################################### Main End Function Main() Local ti# Local mx#,my# Local e While Not KeyHit(1) ;ESC ti=MilliSecs() If Mode3D=0 Then Cls EndIf mx=MouseX() my=MouseY() If MouseDown(1)=True And Mode3D=0 Then BallMausTest mx,my BallGravity ;Kraft erzeugen BallAcceleration ;Beschleunigen also Geschwindigkeit +- BallMove ;mit der Geschwindigkeit bewegen WegShow ;Spur anzeigen :-) BallShow ;und zeigen :-) BallShowRichtung ;Ja wo will er denn hin ? If Mode3D=1 Then If MouseHit(2)>0 Then ;Rechte Maustaste e=CameraPick(cam,mx,my) If e Then BallKick e EndIf If MouseHit(1)>0 Then ;Linke Maustaste e=CameraPick(cam,mx,my) If e Then BallToggleFix e EndIf If KeyDown(28) Then ;Enter wenn Maus über Objekt e=CameraPick(cam,mx,my) If e Then BallZero e EndIf RenderWorld EndIf ;BallStatus While Abs(MilliSecs()-ti)<20 Wend Flip Wend Delete Each V3D Delete Each BallType WegFreeAll End Function ;############################################################### Function BallNew(px#,py#,pz#,Masse#,RGB,Moveable) Ball.BallType = New BallType Ball\Kraft =0.0 Ball\Beschleunigung =0.0 Ball\Moveable=Moveable Ball\Geschwindigkeit=newV3D(0.0,0.0,0.0) Ball\Masse =Masse Ball\Radius=Masse/100.0 If Mode3D=1 Then Ball\Entity=CopyEntity(BallEntity) ScaleEntity Ball\Entity,Ball\Radius,Ball\Radius,Ball\Radius Color 0,0,RGB EntityColor Ball\Entity,ColorRed(),ColorGreen(),ColorBlue() EntityRadius Ball\Entity,Ball\Radius EntityPickMode Ball\Entity,1 NameEntity Ball\Entity,"Ball" EndIf If Mode3D=1 Then Ball\EntityFix=CopyEntity(WegEntity) ScaleEntity Ball\EntityFix,Ball\Radius/10.0,Ball\Radius/10.0,Ball\Radius/10.0 If Moveable=1 Then HideEntity Ball\EntityFix EndIf Else pz=0 EndIf Ball\p =newV3D(px,py,pz) Ball\plast=newV3D(px,py,pz) Ball\d =newV3D(0,0,0) Ball\RGB=RGB End Function ;############################################################### Function BallGravity() ;Local G#=6.6726 * 10^-11 Local G# If Mode3D=1 Then G=6.6726 * 10^-2 Else G=6.6726 * 10^-3 EndIf ;DebugLog G Local BallX.BallType Local m1#,m2#,r2# Local F# For Ball.BallType = Each BallType Ball\Kraft=0.0 m1=Ball\Masse For BallX.BallType = Each BallType If Ball<>BallX Then m2=BallX\Masse r2=VENT(Ball\p,BallX\p)^2.0 If Abs(r2)=>(Ball\Radius+BallX\Radius)^2 Then ;TEST damit es spannender ist ;-) F#=G*((m1*m2)/r2) Ball\Kraft=Ball\Kraft+F EndIf EndIf Next Next ;Bewegen wir uns da hin wo die meiste Kraft ist Local F1# Local F2# Local FG# Local d.V3D = New V3D Local dg.V3D = New V3D Local anz=0 For Ball.BallType = Each BallType anz=anz+1 Next For Ball.BallType = Each BallType F1=Ball\Kraft FG=0.0 dg\x=0.0 dg\y=0.0 dg\z=0.0 For BallX.BallType = Each BallType If Ball<>BallX Then F2=BallX\Kraft VDIR Ball\p,BallX\p,d d\x=d\x*F2 d\y=d\y*F2 d\z=d\z*F2 VADD dg,d,dg FG=FG+F2 EndIf Next Ball\d\x=dg\x / FG Ball\d\y=dg\y / FG Ball\d\z=dg\z / FG Next Delete d Delete dg End Function ;############################################################### Function BallAcceleration() ;a= (F / m) Local a# For Ball.BallType = Each BallType Ball\Beschleunigung=Ball\Kraft / Ball\Masse a=MeterJeSekunde(Ball\Beschleunigung) Ball\Geschwindigkeit\x=Ball\Geschwindigkeit\x+(a*Ball\d\x) Ball\Geschwindigkeit\y=Ball\Geschwindigkeit\y+(a*Ball\d\y) Ball\Geschwindigkeit\z=Ball\Geschwindigkeit\z+(a*Ball\d\z) Next End Function ;############################################################### Function BallMove() Local p1.V3D = New V3D ;Position Local p2.V3D = New V3D Local BallX.BallType ;Simulieren wo beide hin wollen For Ball.BallType = Each BallType Ball\Colli=0 If Ball\Moveable=0 Then Ball\Geschwindigkeit\x=0.0 Ball\Geschwindigkeit\y=0.0 Ball\Geschwindigkeit\z=0.0 EndIf Next For Ball.BallType = Each BallType p1\x=Ball\p\x+Ball\Geschwindigkeit\x p1\y=Ball\p\y+Ball\Geschwindigkeit\y p1\z=Ball\p\z+Ball\Geschwindigkeit\z For BallX.BallType = Each BallType If Ball<>BallX Then ;And (Ball\Colli=0 And BallX\Colli=0) Then p2\x=BallX\p\x+BallX\Geschwindigkeit\x p2\y=BallX\p\y+BallX\Geschwindigkeit\y p2\z=BallX\p\z+BallX\Geschwindigkeit\z If VENT(p1,p2) <= (Ball\Radius+BallX\Radius)+0.01 Then ;Stop BallBounce Ball ,BallX,p1,p2 Ball\Colli=Ball\Colli+1 BallX\Colli=BallX\Colli+1 Else ;Ball\Colli=0 ;BallX\Colli=0 EndIf EndIf Next Next ;Bischen Reibung For Ball.BallType = Each BallType ;If Ball\Colli=>1 Then Ball\Geschwindigkeit\x=Ball\Geschwindigkeit\x*0.99 Ball\Geschwindigkeit\y=Ball\Geschwindigkeit\y*0.99 Ball\Geschwindigkeit\z=Ball\Geschwindigkeit\z*0.99 ;EndIf Next ;Jetzt erst bewegen ! ;aber nur wenn man nicht irgendwo drin landet ! Local drin For Ball.BallType = Each BallType VADD Ball\p,Ball\Geschwindigkeit,p1 drin=0 For BallX.BallType = Each BallType If Ball<>BallX Then If VENT(p1,BallX\p) <= (Ball\Radius+BallX\Radius) Then ;+0.01 ;drin=1 If SphereIntersect(p1,Ball\d,BallX\p,Ball\Radius,BallX\Radius,p1)=True Then EndIf Exit EndIf EndIf Next If drin=0 Then VADD Ball\p,Ball\Geschwindigkeit,Ball\p If VENT(Ball\plast,Ball\p)>0.1 Then VCOPY Ball\p,Ball\plast WegNew Ball EndIf EndIf Next Delete p1 Delete p2 End Function ;############################################################### Function BallShow() Local x#,y#,z# Local r# For Ball.BallType = Each BallType If Mode3D=1 Then PositionEntity Ball\Entity ,Ball\p\x,Ball\p\y,Ball\p\z If Ball\EntityFix Then PositionEntity Ball\EntityFix,Ball\p\x,Ball\p\y,Ball\p\z EndIf Else x=Ball\p\x y=Ball\p\y z=Ball\p\z r=Ball\Radius Color 0,0,Ball\RGB Circle x,y,r EndIf Next If Mode3D=0 Then ;Wenn er fest steht dann ein Kreuz malen Color 128,128,128 For Ball.BallType = Each BallType If Ball\Moveable=0 Then toV3D DummyV3D,-1,0,0 LineMeter Ball\p,DummyV3D,Ball\Radius/10.0 toV3D DummyV3D, 1,0,0 LineMeter Ball\p,DummyV3D,Ball\Radius/10.0 toV3D DummyV3D,0,-1,0 LineMeter Ball\p,DummyV3D,Ball\Radius/10.0 toV3D DummyV3D,0, 1,0 LineMeter Ball\p,DummyV3D,Ball\Radius/10.0 EndIf Next EndIf End Function ;############################################################### Function BallShowRichtung() If Mode3D=1 Then Return ;2D Color 255,255,255 For Ball.BallType = Each BallType LineMeter Ball\p,Ball\d,Ball\Radius Next End Function ;############################################################### Function BallStatus() Local fy=12 Local i=0 Local x=10:y=10 For Ball.BallType = Each BallType Color 0,0,Ball\RGB i=i+1 Text x,y,"Ball Nummer " + i :y=y+fy Text x,y,"Kraft " + Ball\Kraft :y=y+fy Text x,y,"Beschleunigung " + Ball\Beschleunigung :y=y+fy Text x,y,"Geschwindigkeit X " + Ball\Geschwindigkeit\x :y=y+fy Text x,y,"Geschwindigkeit Y " + Ball\Geschwindigkeit\y :y=y+fy Text x,y,"Geschwindigkeit Z " + Ball\Geschwindigkeit\z :y=y+fy Text x,y,"Masse " + Ball\Masse :y=y+fy Text x,y,"Radius " + Ball\Radius :y=y+fy Text x,y,"Richtung X " + Ball\d\x :y=y+fy Text x,y,"Richtung Y " + Ball\d\y :y=y+fy Text x,y,"Richtung Z " + Ball\d\z :y=y+fy Text x,y,"Position X " + Ball\p\x :y=y+fy Text x,y,"Position Y " + Ball\p\y :y=y+fy Text x,y,"Position Z " + Ball\p\z :y=y+fy Text x,y,"Colli " + Ball\Colli :y=y+fy y=y+fy Next End Function ;############################################################### Function BallMausTest(mx#,my#) ;Reinklicken und bewegen :-) mx=(mx-GraphicsWidth() /2.0)/100.0 my=(my-GraphicsHeight()/2.0)/100.0 For Ball.BallType = Each BallType If Entf2D(Ball\p\x,Ball\p\y,mx,my) < Ball\Radius Then Ball\p\x=mx Ball\p\y=my Ball\p\z=0.0 Ball\Geschwindigkeit\x=0.0 Ball\Geschwindigkeit\y=0.0 Ball\Geschwindigkeit\z=0.0 Exit EndIf Next End Function ;############################################################### Function BallToggleFix(Entity) ;3D ;Fix Punkt An/Aus :-) For Ball.BallType = Each BallType If Ball\Entity=Entity Then Ball\Moveable=1-Ball\Moveable If Ball\Moveable=1 Then HideEntity Ball\EntityFix Else ShowEntity Ball\EntityFix EndIf Exit EndIf Next End Function ;############################################################### Function BallKick(Entity) ;3D ;Anstoßen :-) For Ball.BallType = Each BallType If Ball\Entity=Entity Then If Ball\p\z > EntityZ(cam) And Ball\p\z<10.0 Then Ball\Geschwindigkeit\z=Ball\Geschwindigkeit\z+0.5 Else Ball\Geschwindigkeit\z=Ball\Geschwindigkeit\z-0.5 EndIf Exit EndIf Next End Function ;############################################################### Function BallZero(Entity) ;3D ;Zu 0,0,0 For Ball.BallType = Each BallType If Ball\Entity=Entity Then toV3D Ball\p,0.0,0.0,0.0 toV3D Ball\Geschwindigkeit,0.0,0.0,0.0 Exit EndIf Next End Function ;############################################################### Function Circle(x#,y#,r#) ;Parameter in Meter darum * 100.0 ;1 Meter = 100 Pixel x=to2DX(x) y=to2DY(y) r=to2D(r) Oval x-r,y-r,r*2.0,r*2.0,False End Function ;############################################################### Function Entf2D(x1#,y1#,x2#,y2#) Local dx#,dy# dx#=x2#-x1# dy#=y2#-y1# Return Sqr(dx*dx + dy*dy) End Function ;############################################################### .Vectoren Function toV3D.V3D(v.V3D,x#, y#, z#) ;MR 22.06.2003 ;V must be exist ! V\x = x V\y = y V\z = z Return v End Function ;############################################################### Function newV3D.V3D(x#, y#, z#) ;MR 22.06.2003 Local v.V3D=New V3D V\x = x V\y = y V\z = z Return v End Function ;############################################################### Function VDIR(v1.V3D,v2.V3D,d.V3D) ;MR 15.01.2004 Local hyp# d\x = v2\x-v1\x d\y = v2\y-v1\y d\z = v2\z-v1\z hyp = Sqr(d\x * d\x + d\y * d\y + d\z * d\z) If hyp <> 0.0 Then d\x = d\x / hyp d\y = d\y / hyp d\z = d\z / hyp Else d\x = 0.0 d\y = 0.0 d\z = 0.0 End If End Function ;############################################################### Function VADD(v1.V3D,v2.V3D,v3.V3D) ;MR 15.01.2004 v3\x = v1\x + v2\x v3\y = v1\y + v2\y v3\z = v1\z + v2\z End Function ;############################################################### Function VSUB(v1.V3D,v2.V3D,v3.V3D) ;MR 15.01.2004 v3\x = v1\x - v2\x v3\y = v1\y - v2\y v3\z = v1\z - v2\z End Function ;############################################################### Function VCOPY(v.V3D, vout.V3D) ;MR 22.06.2003 ;= vout\x = v\x vout\y = v\y vout\z = v\z End Function ;############################################################### Function VMUL(v1.V3D, v2.V3D,vout.V3D) ;MR 22.06.2003 ;* vout\x = v1\x * v2\x vout\y = v1\y * v2\y vout\z = v1\z * v2\z End Function ;############################################################### Function VENT#(a.V3D, b.V3D) ;MR 22.06.2003 ;Entfernung Local ve.V3D=New V3D Local e# VSUB b, a,ve e = Sqr(ve\x * ve\x + ve\y * ve\y + ve\z * ve\z) Delete ve Return e End Function ;############################################################### Function VINV(a.V3D,b.V3D) ;MR 22.06.2003 ;Invertiert Vector , aus Plus wird Minus und umgekehrt b\x = -a\x b\y = -a\y b\z = -a\z End Function ;############################################################### Function VDOT#(a.V3D, b.V3D) ;MR 22.06.2003 ;Dotprodukt - Skalarprodukt ;berechnet ein Skalarprodukt zweier Vectoren Return (a\x * b\x + a\y * b\y + a\z * b\z) End Function ;############################################################### Function VNORM(a.V3D) ;MR 22.06.2003 ;gibt Normvector zurück , aufpassen auf überlauf ! Local fa# fa = Sqr(VDOT(a, a)) If fa = 0 Then a\x = 0 a\y = 0 a\z = 0 Else fa = 1.0 / fa a\x = a\x * fa a\y = a\y * fa a\z = a\z * fa End If End Function ;############################################################### Function VCROSS(a.V3D,b.V3D,c.V3D) ;MR 22.06.2003 ;gibt Vectorprodukt zurück c\x = a\y * b\z - b\y * a\z c\y = a\z * b\x - b\z * a\x c\z = a\x * b\y - b\x * a\y End Function ;############################################################### Function SphereIntersect(start.V3D, dir.V3D, kugel.V3D,Radius1#,Radius#,colli.V3D) ;MR 22.06.2003 Local a# Local b# Local c# Local t1# Local t2# Local Radius2# Radius2 = Radius * Radius a = dir\x * dir\x + dir\y * dir\y + dir\z * dir\z b = 2.0 * dir\x * (start\x - kugel\x) + 2.0 * dir\y * (start\y - kugel\y) + 2.0 * dir\z * (start\z - kugel\z) c = kugel\x * kugel\x + kugel\y * kugel\y + kugel\z * kugel\z + start\x * start\x + start\y * start\y + start\z * start\z - 2.0 * (kugel\x * start\x + kugel\y * start\y + kugel\z * start\z) - Radius2 Local discriminant# discriminant = b * b - 4.0 * a * c If discriminant >= 0.0 Then Local t# t=-(b/2.0)+Sqr(discriminant) ;Da ist der Aufprallpunkt t=t-Radius1 ;wieder zurück t=t+0.001 ;bischen nach außen ;Stop colli\x=start\x+dir\x*t colli\y=start\y+dir\y*t colli\z=start\z+dir\z*t Return True ;Intersection End If Return False End Function ;############################################################### Function Round2#(x#) ;MR 14.04.2003 Return Int(x*100.0)/100.0 End Function ;-------------------------------------------------------- Function Round4#(x#) ;MR 14.04.2003 Return Int(x*10000.0)/10000.0 End Function ;############################################################### Function ms_to_kmh#(ms#) ;MR 21.04.2003 ;1 Kilometer = 1000 Meter ;1 Stunde hat 3600 Sekunden ;Ret : v = Geschwindigkeit in Kilometer/Stunde = km/h ;(ms / 1000.0) * 3600.0 ;sekunden Return ms * 3.60 End Function ;############################################################### Function MeterJeSekunde#(ms#) Return ms * 0.02 End Function ;############################################################### Function RGB(r,g,b) Return ((r * $10000) Or (g * $100) Or b) End Function ;############################################################### Function mMax#(a#, b#) ;MR 22.06.2003 If a > b Then Return a Else Return b End If End Function ;############################################################### Function mMin#(a#, b#) ;MR 22.06.2003 If a < b Then Return a Else Return b End If End Function ;############################################################### Function sqare#(x#) ;MR 23.06.2003 Return (x * x) End Function ;############################################################### Function BallBounce(b1.BallType,b2.BallType,p1.V3D,p2.V3D) ;MR 16.01.2004 ;VV Vector Richtung ;VN Vector Collisions Oberflächennormale Local dc.V3D = New V3D VDIR p1,p2,dc Local vdot1# Local vdot2# Local optimizedP# vdot1=b1\Geschwindigkeit\x*dc\x + b1\Geschwindigkeit\y*dc\y + b1\Geschwindigkeit\z*dc\z vdot2=b2\Geschwindigkeit\x*dc\x + b2\Geschwindigkeit\y*dc\y + b2\Geschwindigkeit\z*dc\z optimizedP = (2.0 * (vdot1-vdot2)) / (b1\Masse + b2\Masse) b1\Geschwindigkeit\x =b1\Geschwindigkeit\x - optimizedP * b2\Masse * dc\x b1\Geschwindigkeit\y =b1\Geschwindigkeit\y - optimizedP * b2\Masse * dc\y b1\Geschwindigkeit\z =b1\Geschwindigkeit\z - optimizedP * b2\Masse * dc\z b2\Geschwindigkeit\x =b2\Geschwindigkeit\x - optimizedP * b1\Masse * -dc\x b2\Geschwindigkeit\y =b2\Geschwindigkeit\y - optimizedP * b1\Masse * -dc\y b2\Geschwindigkeit\z =b2\Geschwindigkeit\z - optimizedP * b1\Masse * -dc\z Delete dc End Function ;############################################################### Function WegNew(b.BallType) Local c Local WegFirst.WegType For Weg.WegType = Each WegType c=c+1 If c=100 Then WegFirst= First WegType WegFree WegFirst Exit EndIf Next Weg.WegType = New WegType If Mode3D=1 Then Weg\Entity=CopyEntity(WegEntity) ScaleEntity Weg\Entity,0.025,0.025,0.025 Color 0,0,b\RGB EntityColor Weg\Entity,ColorRed(),ColorGreen(),ColorBlue() EndIf Weg\x=b\p\x Weg\y=b\p\y Weg\z=b\p\z Weg\RGB=b\RGB End Function ;############################################################### Function WegShow() For Weg.WegType = Each WegType If Mode3D=1 Then PositionEntity Weg\Entity,Weg\x,Weg\y,Weg\z Else Color 0,0,Weg\RGB PlotMeter Weg\x,Weg\y,Weg\z EndIf Next End Function ;############################################################### Function WegFreeAll() For Weg.WegType = Each WegType WegFree Weg Next End Function ;############################################################### Function WegFree(W.WegType) If W\Entity Then FreeEntity W\Entity Delete W End Function ;############################################################### Function PlotMeter(x#,y#,z#) x=to2DX(x) y=to2DY(y) Plot x,y End Function ;############################################################### Function LineMeter(v.V3D,d.V3D,l#) Local x1#,y1#,x2#,y2# x1=to2DX(v\x) y1=to2DY(v\y) x2=to2DX(v\x+d\x*l) y2=to2DY(v\y+d\y*l) Line x1,y1,x2,y2 End Function ;############################################################### Function to2D#(l#) Return l#*100.0 End Function Function to2DX#(x#) Return x#*100.0+GraphicsWidth()/2.0 End Function Function to2DY#(y#) Return y#*100.0+GraphicsHeight()/2.0 End Function ;############################################################### |
||
junky |
Sa, Jan 17, 2004 10:00 Antworten mit Zitat |
|
---|---|---|
eigentlich schade ... häts gern ma angeschaut
aber wenn man "nur" BB2D besitzt, erkennt er die befehle allgemein nicht ( da hilft auch kein umschalten von ner Konstanten , hab ich so das Gefühl ) |
||
gestern stand ich noch vorm Abgrund
heute bin ich einen Schritt weiter... |
Markus2 |
Sa, Jan 17, 2004 17:43 Antworten mit Zitat |
|
---|---|---|
junky hat Folgendes geschrieben: ... aber wenn man "nur" BB2D besitzt ...
Mode3D=0 und alle 3D Befehle zwischen If Mode3D=1 Then rausnehmen oder auskommentieren dann gehts auch bei dir |
||
CodeMaster |
Sa, Jan 17, 2004 17:58 Antworten mit Zitat |
|
---|---|---|
Waaaaahoooooo! Mal eben so irgendwas mit 1200 Zeilen schreiben?
Sieht geil aus, nur rollen die Bälle wenn ich sie alle anklicke immer aus dem Bildschirm raus Jedenfalls geiler Effekt! |
||
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.
Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102 |
TheShadowModerator |
So, Jan 18, 2004 14:11 Antworten mit Zitat |
|
---|---|---|
wird da auch zentrifugalkraft eingerechnet? wenn sich ein ball dreht, dann muss es sich durch die masse nach ausßen bewegen... | ||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Markus2 |
So, Jan 18, 2004 17:40 Antworten mit Zitat |
|
---|---|---|
TheShadow hat Folgendes geschrieben: wird da auch zentrifugalkraft eingerechnet? wenn sich ein ball dreht, dann muss es sich durch die masse nach ausßen bewegen...
Ne, dafür muß man noch ein Bezugsystem haben und die Winkelgeschwindigkeit ausrechnen . In dem Beispiel also kann ja jeder Ball um alle anderen rotieren . a=-w²*r Fz = m * w² * r |
||
- Zuletzt bearbeitet von Markus2 am Di, Jan 20, 2004 0:04, insgesamt einmal bearbeitet
Markus2 |
Di, Jan 20, 2004 0:03 Antworten mit Zitat |
|
---|---|---|
Hi,
habe mich mal schlau gemacht EDIT: Ich glaube da muß die Coriolis-Kraft und die Zentrifugalkraft eingebaut werden ... ??? ... mehr Input ... |
||
D2006Administrator |
Di, Jan 20, 2004 0:57 Antworten mit Zitat |
|
---|---|---|
Coriolikraft ist was anderes. Spielt hier keine Rolle.
Zentrifugalkraft ist die Fliehkraft, sprich die Kraft die einen Körper in der Kreisbahn nach außen drückt. Zentripedalkraft könnte man frei (also in diesem Beispiel) als Gravitation bezeichnen. Es ist also die Kraft, die einen Körper auf der Kreisbahn hält bzw. ihn nach ihnen zieht. Zur Vollständigkeit: Corioliskraft spielt auf der Erde eine Rolle. Am Äquator ist die Drehgeschwindikeit (in metern) höher als an den Polen. Dadurch driften Nordpolarwinde beispielsweise auf dem Weg zum Äquator nach Westen (?) ab. Oder auch nach Osten, weiß ich jetzt nicht so genau. MfG (In den hier zur Vefügung gestellten Informationen können durchaus Fehler enthalten sein. Der Verfasser hat sie frei nach seinem Kopfwissen niedergeschrieben) |
||
Markus2 |
Di, Jan 20, 2004 10:11 Antworten mit Zitat |
|
---|---|---|
@2006
Jo, aber den gemeinsamen Schwerpunkt muß man berücksichtigen , da ich weiß noch nicht genau wie ich das umsetzen kann . Weil alles soll sich erstmal aus dem Stillstand bewegen . |
||
stfighter01 |
Sa, Jan 31, 2004 14:25 Antworten mit Zitat |
|
---|---|---|
cooles demo
aber ich glaub bei der anziehungskraft ist noch ein fehler enthalten. (bitte sei nicht bös wenn ich blödsiinn quatsch) soweit ich mitbekommen hab (laut deiner doku im programm) bewegst du deine bälle immer in die richtung in die die meiste anziehungskraft herrscht. du müsstet aber jeden ball zu jeden anderen ball hinbeschleunigen. und zwar abhänging von distanz^2 und masse der bälle. btw. rotation spielt hier keine rolle, es sein denn man berüksichtigt die reibung zwischen den bällen. mfg stfighter |
||
Denken hilft! |
Markus2 |
Sa, Jan 31, 2004 17:37 Antworten mit Zitat |
|
---|---|---|
@stfighter01
Ne , kann man so nicht sagen , ich habe für jeden Ball einen Richtungs Vector nur der ist unterschied lich stark(lang) und am Ende habe ich einen Vector der übrig bleibt . Was in dem Beispiel oben fehlt ist die Fliehkraft und der gemeinsame Schwerpunkt , habs schon umgesetzt bin mit dem Ergebnis aber noch nicht zu frieden . Um was zu beschleunigen braucht man Kraft und die wird ja schon ausgerechnet mit Masse und Entfernung zwischen den Bällen . Diese Beschleunigung habe ich also zusammen gefaßt . Wenn 5 Leute gleichzeitig an dir ziehen würden mit unterschiedlichen kräften würdest du dich auch nur in eine richtung bewegen mit der Kraft die übrig bleibt . [/quote] |
||
Übersicht BlitzBasic Codearchiv
Powered by phpBB © 2001 - 2006, phpBB Group