Anströmwinkel / Angle of Attack
Übersicht

![]() |
BenibaerenstarkBetreff: Anströmwinkel / Angle of Attack |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo zusammen
in meiner 3D-Flugsimulation möchte ich den Anströmwinkel der Tragflächen berechnen. ![]() Von der Strömungsgeschwindigkeit ist x,y- und z-Anteil bekannt (vx,vy,vz) Vom der Tragfläche kenne ich leider nur die winkel (Pitch, Yaw, Roll) Meine Fragen: 1.Wie rechne ich die Winkel in einen Vektor mit x,y und z-Anteil um? (im Beispiel ox, oy, oz genannt) 2.Wie berechne ich damit den Anströmwinkel? -->Der Winkel zwischen den Beiden Vektoren(via Skalarprodukt) alleine genügt nicht, da die seitliche Drehung (Mausrad in folgender Demo) ja die anströmgeschwindigkeit beeinflusst. Voila, die Demo, um das Ganze zu veranschaulichen: die gelbe Linie ist der Geschwindigkeitsvektor, die Tragfläche bewegt sich also von rechts nach links. Code: [AUSKLAPPEN] gfxwidth=1024
gfxhight=768 Graphics3D gfxwidth, gfxhight,32, 1 cam =CreateCamera() PositionEntity cam,-2,2,-5 light=CreateLight() RotateEntity light,45,45,0 ;Flügel erstellen AP0=CreatePivot();-->Pivots für Schriftpositionierung APX=CreatePivot(AP0) APY=CreatePivot(AP0) APZ=CreatePivot(AP0) PositionEntity APX,5,0,0 PositionEntity APY,0,5,0 PositionEntity APZ,0,0,5 AXAchse=createline(0,0,0,5,0,0,0,AP0);-->Linien erstellen AYAchse=createline(0,0,0,0,5,0,0,AP0) AZAchse=createline(0,0,0,0,0,5,0,AP0) EntityFX AXAchse, 17;-->Aus beiden Seiten sichtbar 16 und leuchtend 1 EntityFX AYAchse, 17 EntityFX AZAchse, 17 EntityColor AXAchse,255,0,0;-->Farbe wählen EntityColor AYAchse,0,255,0 EntityColor AZAchse,0,0,255 AXSpitz = CreateCone (8,1,APX);-->Spitzen erstellen AYSpitz = CreateCone (8,1,APY) AZSpitz = CreateCone (8,1,APZ) ScaleEntity AXSpitz,0.15,0.5,0.15;-->Grösse anpassen ScaleEntity AYSpitz,0.15,0.5,0.15 ScaleEntity AZSpitz,0.15,0.5,0.15 EntityFX AXSpitz,1;leuchtend machen EntityFX AYSpitz,1 EntityFX AZSpitz,1 EntityColor AXSpitz,255,0,0;-->Farbe anpassen EntityColor AYSpitz,0,255,0 EntityColor AZSpitz,0,0,255 RotateEntity AXSpitz,0,0,-90;-->Ausrichten RotateEntity AYSpitz,0,0,0 RotateEntity AZSpitz,90,0,0 ScaleEntity AP0,0.2,0.2,0.2 wing=CreateCube(AP0) ScaleEntity wing,0.5,0.1,2 ;geschwindigkeitsvektor (global) vx#=-2 vy#=0 vz#=0 velocity=createline(0,0,0,vx,vy,vz,0,0) EntityColor velocity,255,255,0 EntityFX velocity,17 While Not KeyHit(1) ;Ausrichtung entity (global) mxs#=mxs#+(MouseXSpeed()/5.0) mys#=mys#+(MouseYSpeed()/5.0) mzs#=mzs#+MouseZSpeed() RotateEntity AP0,-mys#,mzs#,-mxs# MoveMouse gfxwidth/2,gfxhight/2 ;reset mit leertaste If KeyHit(57) mxs#=0 mys#=0 mzs#=0 EndIf CameraClsMode(cam, 1, 1) WireFrame(0) RenderWorld() CameraClsMode(cam, 0, 0) WireFrame(1) RenderWorld() ;winkel zwischen Geschwindigkeits- und X-Vektor ; ;orientirungsvektor bestimmen (ob=Betrag=1): wie geht das richtig?? ob#=1 ox#=ob*Cos(EntityRoll(AP0,1)) oy#=ob*Sin(EntityRoll(AP0,1)) oz#=ob*Sin(EntityYaw(AP0,1)) ;betrag vom geschwindigkeitsvektor: vb#=Sqr(vx^2+vy^2+vz^2) ;Skalarprodukt alpha#=ACos(((ox*vx)+(oy*vy)+(oz*vz))/(ob*vb)) Text 0,0,"EntityPitch: "+EntityPitch(AP0,1) Text 0,15,"EntityYaw: "+EntityYaw(AP0,1) Text 0,30,"EntityRoll: "+EntityRoll(AP0,1) Text 0,50,"OX: "+ox Text 0,65,"OY: "+oy Text 0,80,"OZ: "+oz Text 0,100,"VBetrag: "+vb Text 0,120,"Winkel zwischen Geschwindigkeitsvektor und Orientierungsvektor: "+alpha Text 400,0,"Maus (inkl. Rad) um Flügel zu bewegen, Leertaste um Zurückzusetzten" Flip Wend End Function createline(x1#,y1#,z1#, x2#,y2#,z2#, mesh=0,parent=0) If mesh = 0 Then mesh=CreateMesh() EntityFX(mesh,16) surf=CreateSurface(mesh) verts = 0 AddVertex surf,x1#,y1#,z1#,0,0 Else surf = GetSurface(mesh,1) verts = CountVertices(surf)-1 End If AddVertex surf,(x1#+x2#)/2,(y1#+y2#)/2,(z1#+z2#)/2,0,0 ; you could skip creating the above vertex and change the line below to ; AddTriangle surf,verts,verts+1,verts+0 ; so your line mesh would use less vertices, the drawback is that some videocards (like the matrox g400) ; aren't able to create a triangle with 2 vertices. so, it's your call :) AddVertex surf,x2#,y2#,z2#,1,0 AddTriangle surf,verts,verts+2,verts+1 EntityParent mesh,parent Return mesh End Function gruess beni |
||
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu |
![]() |
BenibaerenstarkBetreff: 72 views, keine Antwort |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() für Hilfe wäre ich sehr Dankbar Gruss Beni |
||
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem ist im grunde eine Berechnungsstufe einfacher als mein Problem mit den Rädern die auf ein Terrain kollidieren, da da noch ein Vektor hinzu kommt. Bei meinem Problem konnte mir auch keiner wirklich helfen. Dabei fragte ich insgesamt dreimal (im Zeitraum von insgesamt ~10 Monaten) hier im Forum.
Meine Antowort ist also: Ich weiß es nicht, aber vielleicht fällt mir noch was dazu ein. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Winkel auf Vektor: Da fehlt leider deinerseits eine grundlegende Angabe: Winkel zu was?
Winkel zu den Achsen? Winkeln zu den Seitenebenen? Im Raum benötigt man eigentlich nur 2 Winkel um einen Vektor von NormLänge zu erzeugen (siehe Kugel Koordinaten System). Ausgehend davon könntest du auch aus den Winkeln wieder den Vektor erzeugen indem du folgende Gleichungen umdrehst (oder Matheseiten / wikipedia befragst): x = R * cos(alpha)*cos(beta) y = R * cos(alpha)*sin(beta) z = R* sin(alpha) Alpha wird dabei von der Z Achse zum Vektor gemessen Beta von der X Achse in der X-Y Ebene R ist der Radius Anzumerken ist, das in math: koordinatensystemen Z die Richtung nach oben ist, in Blitz ist jedoch Z in den Bildschirm hinein und Y nach oben. Berechnen des Anströmwinkels -> winkel zwischen Wind und Normale ScalarProdukt(VecA,VecB) = LängeA * LängeB * cos(alpha) und alpha ist der winkel zwischen den Vektoren. Das umformen, winkel bestimmen und von 90° abziehen und du hast deinen Winkel. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Benibaerenstark |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke erstmal für die Hinweise, allerdings klappt es immer noch nicht.
mit den Winkeln meinte ich EntityPitch, Yaw und Roll. Wie kriege ich die "Normale" eines Entitys? Hier mein Versuch: Code: [AUSKLAPPEN] ; ;Normale bestimmen (ob=Betrag=1): wie geht das richtig?? ob#=1 ox#=ob*Cos(EntityPitch(AP0,1))*Cos(EntityYaw(AP0,1)) oy#=ob*Cos(EntityPitch(AP0,1))*Sin(EntityYaw(AP0,1)) oz#=ob*Sin(EntityPitch(AP0,1)) ;betrag vom geschwindigkeitsvektor: vb#=Sqr(vx^2+vy^2+vz^2) ;Skalarprodukt umgeformt: alpha#=ACos(((ox*vx)+(oy*vy)+(oz*vz))/(ob*vb));die x,y und z Anteile der beiden Vektoren werden multipiziert ;und durch das Produkt ihrer Beträge geteilt, Arcuscosinus liefert den Winkel und hier nochmal der komplette Code zum Ausführen: Code: [AUSKLAPPEN] gfxwidth=1024
:
gfxhight=768 Graphics3D gfxwidth, gfxhight,32, 1 cam =CreateCamera() PositionEntity cam,-2,2,-5 light=CreateLight() RotateEntity light,45,45,0 ;Flügel erstellen AP0=CreatePivot();-->Pivots für Schriftpositionierung APX=CreatePivot(AP0) APY=CreatePivot(AP0) APZ=CreatePivot(AP0) PositionEntity APX,5,0,0 PositionEntity APY,0,5,0 PositionEntity APZ,0,0,5 AXAchse=createline(0,0,0,5,0,0,0,AP0);-->Linien erstellen AYAchse=createline(0,0,0,0,5,0,0,AP0) AZAchse=createline(0,0,0,0,0,5,0,AP0) EntityFX AXAchse, 17;-->Aus beiden Seiten sichtbar 16 und leuchtend 1 EntityFX AYAchse, 17 EntityFX AZAchse, 17 EntityColor AXAchse,255,0,0;-->Farbe wählen EntityColor AYAchse,0,255,0 EntityColor AZAchse,0,0,255 AXSpitz = CreateCone (8,1,APX);-->Spitzen erstellen AYSpitz = CreateCone (8,1,APY) AZSpitz = CreateCone (8,1,APZ) ScaleEntity AXSpitz,0.15,0.5,0.15;-->Grösse anpassen ScaleEntity AYSpitz,0.15,0.5,0.15 ScaleEntity AZSpitz,0.15,0.5,0.15 EntityFX AXSpitz,1;leuchtend machen EntityFX AYSpitz,1 EntityFX AZSpitz,1 EntityColor AXSpitz,255,0,0;-->Farbe anpassen EntityColor AYSpitz,0,255,0 EntityColor AZSpitz,0,0,255 RotateEntity AXSpitz,0,0,-90;-->Ausrichten RotateEntity AYSpitz,0,0,0 RotateEntity AZSpitz,90,0,0 ScaleEntity AP0,0.2,0.2,0.2 wing=CreateCube(AP0) ScaleEntity wing,0.5,0.1,2 ;geschwindigkeitsvektor vx#=-2 vy#=0 vz#=0 velocity=createline(0,0,0,vx,vy,vz,0,0) EntityColor velocity,255,255,0 EntityFX velocity,17 While Not KeyHit(1) ;Ausrichtung entity (global) mxs#=mxs#+(MouseXSpeed()/5.0) mys#=mys#+(MouseYSpeed()/5.0) mzs#=mzs#+MouseZSpeed() RotateEntity AP0,-mys#,mzs#,-mxs# MoveMouse gfxwidth/2,gfxhight/2 ;reset mit leertaste If KeyHit(57) mxs#=0 mys#=0 mzs#=0 EndIf CameraClsMode(cam, 1, 1) WireFrame(0) RenderWorld() CameraClsMode(cam, 0, 0) WireFrame(1) RenderWorld() ;winkel zwischen Geschwindigkeits- und X-Vektor ; ;Normale bestimmen (ob=Betrag=1): wie geht das richtig?? ob#=1 ox#=ob*Cos(EntityPitch(AP0,1))*Cos(EntityYaw(AP0,1)) oy#=ob*Cos(EntityPitch(AP0,1))*Sin(EntityYaw(AP0,1)) oz#=ob*Sin(EntityPitch(AP0,1)) ;betrag vom geschwindigkeitsvektor: vb#=Sqr(vx^2+vy^2+vz^2) ;Skalarprodukt umgeformt: alpha#=ACos(((ox*vx)+(oy*vy)+(oz*vz))/(ob*vb));die x,y und z Anteile der beiden Vektoren werden multipiziert ;und durch das Produkt ihrer Beträge geteilt, Arcuscosinus liefert den Winkel Text 0,0,"EntityPitch: "+EntityPitch(AP0,1) Text 0,15,"EntityYaw: "+EntityYaw(AP0,1) Text 0,30,"EntityRoll: "+EntityRoll(AP0,1) Text 0,50,"OX: "+ox Text 0,65,"OY: "+oy Text 0,80,"OZ: "+oz Text 0,100,"VBetrag: "+vb Text 0,120,"Winkel zwischen Geschwindigkeitsvektor und Orientierungsvektor: "+alpha Text 400,0,"Maus (inkl. Rad) um Flügel zu bewegen, Leertaste um Zurückzusetzten" Flip Wend End Function createline(x1#,y1#,z1#, x2#,y2#,z2#, mesh=0,parent=0) If mesh = 0 Then mesh=CreateMesh() EntityFX(mesh,16) surf=CreateSurface(mesh) verts = 0 AddVertex surf,x1#,y1#,z1#,0,0 Else surf = GetSurface(mesh,1) verts = CountVertices(surf)-1 End If AddVertex surf,(x1#+x2#)/2,(y1#+y2#)/2,(z1#+z2#)/2,0,0 ; you could skip creating the above vertex and change the line below to ; AddTriangle surf,verts,verts+1,verts+0 ; so your line mesh would use less vertices, the drawback is that some videocards (like the matrox g400) ; aren't able to create a triangle with 2 vertices. so, it's your call :) AddVertex surf,x2#,y2#,z2#,1,0 AddTriangle surf,verts,verts+2,verts+1 EntityParent mesh,parent Return mesh End Function Danke für eure Hilfe |
||
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group