Physikalische Berechnung in 3D?
Übersicht

![]() |
hecticSieger des IS Talentwettbewerb 2006Betreff: Physikalische Berechnung in 3D? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kennt jemand ein gutes Tutorial in deutsch oder sowas, welches physikalische einflüsse auf Körper bearbeitet oder zumindest, wo und wonach ich suchen soll? Habe immer und immer wieder folgendes Problem. Ein Körper soll beschleunigt werden und gleichzeitig soll der Drehimpuls dazu berechnet werden. Beispiel:
Code: [AUSKLAPPEN] Ein Körper der auf dem Boden liegt.
________ | | | | | Körper | | | |________| <---Kraft Wenn Kraft größer als die Gravitation ist, dann kommt es zu folgendem: /\ / \ / \ / \ \ / \ / \ / ______\/______ Der Körper 'hebt' ab. Bisher habe ich das immer nur mit einer 'Notlösung' geschafft, aber diese funktioniert auch nur bedingt. Wenn zB das Objekt umkippt, dann funktioniert die Notlösung nicht mehr... Bitte keine Tokanak-Lösung, oder wie die Physikengine heisst. Will das schon selbst in einem Lauffähigem Code haben... |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, vielleicht vergissdt du die REibung, die verschiedene Seitren bremst,
und die Bewegung aber vom Zentrum der Masse ausgeht. |
||
between angels and insects |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Um umkippen und dergleichen zu kontrollieren sind 2 Dinge notwendig:
1. Einführung von Reibung 2. Einführung von Momenten (Drehmoment,...) Letzeres würde dafür sorgen, dass der Würfel oder was auch immer, auf dem Boden bleibt, wenn du unten dagegen drückst, solange eine Gravitation gegen unten wirkt und keine andere Kraftwirkung ein Abheben verursacht. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmmm, ok, das mit dem Drehmoment ist mir klar, nur wie berechne ich diesen in einer 3D-Welt? Atan2 hat ja nur zwei Dimensionen. Muß ich jetzt im Raum 3mal triangulieren um mit Atan2 ein Drehmoment herrauszufinden? Dieses Wissen kann ich auch sehr gut für mein aktuelles Projekt 'thrust' gebrauchen um die Kollisionsabfrage des Raumschiffes (2D) besser berechnen zu können. Die folgende Spielerei diehnt mir zusätzlich als Basis des Projektes...
edit1: Code ist selbständig lauffähig. Es wird versucht den Energieerhaltungssatz zu berücksichtigen. Sowohl zur Geschwindigkeit als auch beim Drehimpuls... edit2: Problem ist hier vor allem, wenn das Fahrzeug einen Winkel über 90° erreicht. Dann fliegt es auf und davon... ![]() Code: [AUSKLAPPEN] gfx=800
gfy=600 ghx=gfx/2 ghy=gfy/2 Graphics3D gfx,gfy,0,2 SetBuffer BackBuffer() ;Camera erstellen camera=CreateCamera() PositionEntity camera,-20,12,-6 RotateEntity camera,10,-40,0 CameraZoom camera,.75 ;Licht erstellen light=CreateLight() RotateEntity light,20,0,0 ;Boden erstellen plane=CreatePlane() mirror=CreateMirror() EntityColor plane,64,64,96 EntityAlpha plane,.5 EntityType plane,2 ;Schanze erstellen cube=CreateCube() PositionEntity cube,10,0,30 RotateEntity cube,45,0,0 ScaleEntity cube,10,10,10 EntityType cube,2 ;Auto erstellen car=CreateCube() ScaleMesh car,4,2,8 PositionMesh car,0,2,0 EntityAlpha car,.6 ;Reifen Dim whe(3) For q=0 To 3 whe(q)=CreateSphere(12,car) ScaleEntity whe(q),2,2,2 EntityRadius whe(q),2 EntityType whe(q),1 Next PositionEntity whe(0),-4,0,+5 PositionEntity whe(1),+4,0,+5 PositionEntity whe(2),-4,0,-5 PositionEntity whe(3),+4,0,-5 Collisions 1,2,2,2 RotateEntity car,30,0,4 car_xp#=0 car_yp#=8 car_zp#=0 car_xg#=0 car_yg#=0 car_zg#=0.01 car_xr#=0 car_yr#=0 car_zr#=0 ;Hauptschleife While Not KeyHit(1) If KeyDown(200) car_zg=car_zg+.02 If KeyDown(208) car_zg=car_zg-.02 car_xg=car_xg/1.001 car_yg=car_yg/1.001 car_zg=car_zg/1.001 car_xr=car_xr/1.001 car_yr=car_yr/1.001 car_zr=car_zr/1.001 car_yg=car_yg-.01 car_xp=car_xp+car_xg car_yp=car_yp+car_yg car_zp=car_zp+car_zg PositionEntity whe(0),-4,0,+5 PositionEntity whe(1),+4,0,+5 PositionEntity whe(2),-4,0,-5 PositionEntity whe(3),+4,0,-5 UpdateWorld For q=0 To 3 If CountCollisions(whe(q))>0 car_xg=car_xg/1.03 car_yg=car_yg/1.03 car_zg=car_zg/1.03 car_xr=car_xr/1.005 car_yr=car_yr/1.005 car_zr=car_zr/1.005 End If car_yg=car_yg+EntityY(whe(q))/50 Next car_xr=car_xr+(EntityY(whe(2))+EntityY(whe(3))-EntityY(whe(0))-EntityY(whe(1)))/20 car_zr=car_zr+(EntityY(whe(3))+EntityY(whe(1))-EntityY(whe(2))-EntityY(whe(0)))/20 PositionEntity car,car_xp,car_yp,car_zp TurnEntity car,car_xr,car_yr,car_zr RenderWorld Flip Wend End |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Für Momente brauchst du eigentlich garkein Atan, das läuft alles über Vektoren:
Drehmoment = Arm x Anliegende Kraft (x ist Vektorprodukt, nicht Skalarprodukt) Im Falle eines Würfels , wo die Kraft am Ecken angreifen würde, wäre das zb Moment = [width/2 height/2 depth/2] x [kraftX kraftY kraftZ] ([] sind jeweils als Vektoren gemeint, als Referenzpunkt habe ich den Mittelpunkt gewählt) Das heisst, dass das Moment immer senkrecht auf den beiden anderen Vektoren steht. Wenn mehrere Kräfte angreifen, so ist das Moment einfach die Summe über i von Arm_i x Anliegende Kraft_i |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group