Trägheitsgesetz
Übersicht

Mr HoppBetreff: Trägheitsgesetz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Scheiß Physik ![]() ![]() Das Problem ist, dass man im Weltall ja bekanntlich immer geradlinig fliegt, so lange nichts passiert. D.h. wenn ich beschleunige, dann das Triebwerk abschallte und das Raumschiff rotiere, fliegt es nicht "immer der Nase lang" sondern einfach weiter, bis ich das Triebwerk einschallte....... Die Grundüberlegung habe ich geschafft, ich wollte einen Pivot für die Fliehkraft erstellen, an den das Raumschiff und die Kamera gebunden sind. Somit fliegt der Pivot, und nicht das Raumschiff, welches sich drehen kann, wie es will, und trotzdem in die Flieh-Richtung fliegt. Das eigentliche Problem besteht jetzt aber darin, dass irgendwann ja auch gewünscht wird, die Richtung zu ändern....... Also, wer Ahnung von Physik hat, könnte mir doch bitte, wenn er Zeit und Lust hat, ein bisschen was von der Fliehkraft und dem ganzen Zeugs erklären ![]() Mfg Mr Hopp |
||
coldie |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich würd sagen du musst einen geschwindigkeitsvektor machen, der die bewegung vom piviot verursacht. Mit dem triebwerk kannst du dann einfluss auf den geschwindigkeitsvektor nehmen, je nachdem wie das raumschiff gedreht ist wenn du gasgibst.
kenn mich aber noch nicht so gut mit bb aus vll. gehts auch einfacher. |
||
![]() |
Benibaerenstark |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es geht auch ohne Vektoren!
Ich würde drei Variabeln nehmen XSpeed, YSpeed, ZSpeed. Je nach Ausrichtung und Schub wird der Speed beeinflusst. Wie sich der Schub auf die drei Geschwindigkeiten verteilt, berechntest du mit Sin/Cos von den drei Drehungen EntityPitch, Yaw, Roll. Für Details: Nehme ein Blatt Papier, zeichne ein 3D-Koordinatensystem und da hinein die Ausrichtung deines Modelles. Zeichne dir die Winkel und überlege logisch. (Definition von Sin/Cos ist die einzige mathematische Grundlage, die bekannt sein sollte)Ist ein bisschen Arbeit, aber wenn du es selber ausrechnest und verstehts, was dein Code macht, macht es viel mehr Spass. mfg beni |
||
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu |
coldie |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Ich würde drei Variabeln nehmen XSpeed, YSpeed, ZSpeed
häää? genau das ist doch ein geschwindigkeitsvektor ![]() |
||
![]() |
Benibaerenstark |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok, wenn du meinst. ich habe noch nie "Vektorrechnen" gemacht, und ich komme auch ohne den Begriff "Vektor" aus. Ich baue meinen code einfach durch logische überlegungen. Doch mir solls recht sein - wenn er damit was anfangen kann... | ||
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu |
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok......ich werd mal sehen, was sich mit Cos und Sin machen lässt, ich hatte das ja noch nie in der Schule, also werde ich ein bisschen nachforschen müssen ![]() ![]() |
||
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sorry, ich muss das Thema nochmal ansprechen ![]() Erstmal: Soll ich jetzt einen Fliehpunkt erstellen??? Und zu den Vektoren (Was auch immer das ist^^), soll ich da - X_Speed - Y_Speed - Z_Speed und - X_Rotation - Y_Rotation - Z_Rotation erstellen??? ICH HAB KEINEN PLAN!!!! ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn du so etwas willst musst du mehr als nur Trägheit alleine einführen:
1. Die gesamte Steuerung muss über Kräfte erfolgen. Also wenn man nach links / rechts dreht wird die aktuelle Richtung durch eine Kraft aus der entsprechenden Richtung beeinflusst 2. Der Antrieb ist auch eine Kraft 3. Rotationen sind keine Kräfte und haben auf die bewegung keinen Einfluss Daraus folgt auch, dass die Rotation über Turnentity erfolgt, die bewegung jedoch über moveentity mit der global flag anstatt im Koordinatensystem des Objektes. Wichtig dafür sind die folgenden Dinge: Kraft = Masse * Beschleunigung - Wenn du also eine kraft hast und eine masse, so kannst du daraus leicht die beschleunigung in die entsprechende Richtung ausrechnen. Diese musst du dann zum aktuellen geschwindigkeitsvektor addieren. Impuls = Masse * Geschwindigkeit - Das sagt dir etwas darüber, wieviel Energie aktuell in der bewegten Masse ist. Das ist auch das, was im Endeffekt die Trägheit erzeugt, da der Impuls erst beseitig werden muss, der von der trägen Masse (ungleich schwere Masse) erzeugt wird. Wenn du noch mehr Infos brauchst, empfehle ich dir eine der vielen ausführlichen Physikseiten zu besuchen, die dir das ganze näher bringt. Dann wird dir auch einleuchten warum man dafür Vektoren nimmt. (Dann kann man die Gleichungen nämlich ganz einfach aufstellen etc Es gibt sogar einige Operationen die ohne Vektoren garnicht gehen, wie richtig abprallen und dergleichen) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
erstmal vielen vielen Dank für die ausführliche Hilfe ![]() ![]() ![]() ![]() Wäre auf jeden Fall sehr nett ![]() Edit: Außerdem wüsste ich gar nicht, wie ich Kraft und Masse im Spiel umsetzen könnte ![]() Nochmal Edit: Sorry, aber ich habe gerade beim Nachforschen festgestellt, dass Vektoren was ganz anderes zu sein scheinen, als ich dachte.....da bedarf es also auch noch einer Erklärung ![]() ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Masse ist eigentlich einfach: Alle Objekte haben eine Masse. Was keine Masse hat erfährt keinerlei physikalischen Einfluss, da alles von Masse abhängt.
Kraft: Das ist ein Vektor mit einer Richtung und einer Länge. Die Länge ist die Kraft. Und wirst leider nicht drumherum kommen dir diese "Endlosformeln" anzutun, denn ohne ist nicht viel zu machen. Aber am besten fangst du mit lernen von vorne an anstatt in der Mitte bzw. am Ende. Sprich erst einmal Vektormathe, dann Ort-Geschwindigkeit-Beschleunigung, dann Kräfte, dann grundlegende Mechanik wie Reibung etc (auch Kräfte) und dann Impulse, Trägheit etc. Ich möchte und werde dir keine "fertige Implementation" liefern, da das 0 Sinn hat. Wenn du nicht verstehst wie es funktioniert führt das nur dazu das wir dir in ein paar Tagen das nächste Problem lösen müssen und das ist nicht der Sinn. Wenn du physik nicht lernen möchtest, so ist das natürlich ok. Aber dann möchte ich dich bitten, sie auch nicht zu benutzen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
nein nein, du verstehst mich falsch ![]() ![]() ![]() Also auf jeden Fall vielen Dank und GANZ WICHTIG: Mr Hopp WILL lernen, er akzeptiert keine fertigen Lösungen, die er nicht versteht ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gut
Werd Mal sehen ob ich den anderen Artikel wieder finde, der das ganze stück um stück aufbaut. Ein guter war, wenn ich mich richtig entsinne, im Wiki zu finden. Wobei ich nimmer weiss ob der deutsch war. Die gescheiten sind leider mit ziemlicher sicherheit in englisch gehalten ... aber da sich die Namensgebungen in niedriger Mathe kaum unterscheiden von D zu E und das Summen- als auch das Produktzeichen eh identisch sind ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Mr.Hopp,
ich denke um eine "einfache" Space-Physik zu machen muss man nicht erst einen Physik oder Vektorrechnungs - Kurs machen, sondern logisches Denkvermögen und die genannten Formeln sollten ausreichen. Kraft = Masse * Beschleunigung Geschwindigkeit = Beschleunigung * Zeit Strecke = Geschwindigkeit * Zeit [+ zurückgelegte_Strecke] Bei vielen Sachen kann man die Physik auch faken um einen ähnlichen Effekt zu erziehlen, wie z.B. bei Reibung... Ich hab das gerade mal ausprobiert, vieleicht hilft dir das ja weiter(Als denkanzatz, oder so...)?! ...Läuft auf jeden Fall: Code: [AUSKLAPPEN] Graphics3D 640,480,16 SetBuffer BackBuffer() ;zählt wie viele frames beschleunigtwird ( anstatt Zeitmessung) count=0 ;BeschleunigungsVector aX# = 0 aY# = 0 aZ# = 0 ;Geschwindigkeitsvector SpeedX# = 0 SpeedY# = 0 SpeedZ# = 0 ;Sterne For i=0 To 4000 bli=CreateSphere() PositionEntity bli,Rand(-1000,1000),Rand(-1000,1000),Rand(-1000,1000) ;EntityColor bli,Rand(0,255),Rand(0,255),Rand(0,255) Next ;Licht light = CreateLight(1) TurnEntity light,25,00,0 PositionEntity light ,0,1,-5 ;Camera camera = CreateCamera() TurnEntity camera,25,0,0 ;Spieler player = CreateCube() PositionEntity player,0,-3,5 ;für beschleunigungsvector um sich berechnung ;der einzelnen ax,ay und az beschleunigungswerte aus Rotation zu ersparen sp=CreateSphere() PositionEntity sp,0,-3,4 ScaleEntity sp,0.25,0.25,0.25 EntityColor sp,0,200,0 EntityParent camera ,player EntityParent light ,player EntityParent sp,player While Not KeyHit(1) aX#= ( EntityX(player,1) - EntityX(sp,1) ) aY#= ( EntityY(player,1) - EntityY(sp,1) ) aZ#= ( EntityZ(player,1) - EntityZ(sp,1) ) If KeyDown (203) Then TurnEntity player,0,1,0 If KeyDown (205) Then TurnEntity player,0,-1,0 If KeyDown (200) Then TurnEntity player,1,0,0 If KeyDown (208) Then TurnEntity player,-1,0,0 If KeyDown(57) Then ;V=A*t count=count+1 SpeedX = SpeedX + aX*(0.01666*count) SpeedY = SpeedY + aY*(0.01666*count) SpeedZ = SpeedZ + aZ*(0.01666*count) laenge# = Sqr(SpeedX*SpeedX+SpeedY*SpeedY+SpeedZ*SpeedZ) Else count=0 EndIf PositionEntity player, EntityX(player)+SpeedX*0.01666,EntityY(player)+SpeedY*0.01666,EntityZ(player)+SpeedZ*0.01666 RenderWorld Text 0,0,"Speed: "+Sqr(SpeedX*SpeedX+SpeedY*SpeedY+SpeedZ*SpeedZ) Flip Wend End Ps: es kann helfen die Sachen die man machen will erstmal 2-dimensional durchzudenken...(bei mir zumindest ![]() |
||
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen vielen Dank, genau sowas hab ich gesucht ![]() 1. Warum wird da die Wurzel gezogen??? 2. Was hat es mit 0.01666 auf sich, ist die Zahl beliebig??? |
||
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: 1. Warum wird da die Wurzel gezogen???
Die Zeile kann gelöscht werden... (Da wird die Laenge des Speed-Vektors ausgerechnet...mit Pydgoras) Zitat: 2. Was hat es mit 0.01666 auf sich, ist die Zahl beliebig???
Das ist die Zeit, die ein frame bei einer Framerate von 60 Bildern/s dauert... S=V*t+S0 => t=0.0166666 mfg |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich fake auch immer sehr gerne... hier noch eine kleine anregung aus einem kleinen 2D SpaceShooter von mir:
Code: [AUSKLAPPEN] ;Drehsteuerung: If speed#<-speedfaktor# Then;vorwärts If KeyDown(205) And pitch#<maxpitch Then pitch#=pitch#+pitchfaktor# If KeyDown(203) And pitch#>-maxpitch Then pitch#=pitch#-pitchfaktor# ElseIf speed#>speedfaktor# Then;rückwärts If KeyDown(203) And pitch#<maxpitch Then pitch#=pitch#+pitchfaktor# If KeyDown(205) And pitch#>-maxpitch Then pitch#=pitch#-pitchfaktor# EndIf ;Drehung: winkel=(winkel+pitch#) Mod 360 If winkel<0 Then winkel=360+winkel If winkel=360 Then winkel=359 ;Verlangsamung: If pitch#>0 Then pitch#=pitch#-(pitchfaktor#/5) If pitch#<0 Then pitch#=pitch#+(pitchfaktor#/5) und ähnlich sieht das dann auch mit dem bewegen aus! MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok....dann vielen dank, ich mach mich dann mal an die arbeit ![]() |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Als Hilfe läßt sich auch gut ein Pivot mißbrauchen der am Schiff hängt .
Den setzt du einfach lokal auf Pos. 0,0,0 und bewegst ihn wie du die Düsen gerne Steuern würdest , also mit MoveEntity (für jedes Frame) . Vom Schiff und vom Pivot nimmst du jetzt die Globale Pos. und rechnest den Richtungsvector aus (ohne Sin,Cos) . Richtungsvector=Beschleunigung und addierst die auf die Geschwindigkeit . |
||
Krümel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo, Mr Hopp!
ich bin auf folgende löung deines problems gekommen: (die "pivot"-Variante) Code: [AUSKLAPPEN] Graphics3D 800,600,16,2 SetBuffer BackBuffer() CreateLight() camera=CreateCamera() MoveEntity camera,0,0,-10 UfoPivot=CreatePivot() Ufo=CreateCone(40,True,UfoPivot) TurnEntity Ufo,50,0,0 ScaleEntity Ufo,1,1.5,0.25 EntityColor Ufo,100,100,150:EntityShininess Ufo,0.8 Reibung#=0.995 While Not KeyHit(1) If KeyDown(30) Schub#=Schub+0.005 ;richtungsvektor ermitteln: TFormVector 0,Schub,0, Ufo,0 RichtungX#=TFormedX():RichtungY#=TFormedY():RichtungZ#=TFormedZ() EndIf If KeyDown(200) DrehungX#=DrehungX+0.01 If KeyDown(208) DrehungX#=DrehungX-0.01 If KeyDown(203) DrehungY#=DrehungY+0.01 If KeyDown(205) DrehungY#=DrehungY-0.01 MoveEntity UfoPivot,RichtungX*Schub,RichtungY*Schub,RichtungZ*Schub TurnEntity Ufo,DrehungX,0,DrehungY ;bewegungen abbremsen DrehungX=DrehungX*Reibung:DrehungY=DrehungY*Reibung Schub=Schub*Reibung RenderWorld Flip Wend |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group