zielsuchende raketen ...-->
Übersicht

![]() |
AlfadurBetreff: zielsuchende raketen ...--> |
![]() Antworten mit Zitat ![]() |
---|---|---|
high,
eine kurze einführung : ich hab ein raumschiff, das kann raketen auf andere raumschiffe schießen... das raumschiff ist ein type der unter anderem auch den winkel, in dem das raumschiff gerade gedreht ist, enthält, nennen wir ihn turn#. wenn ich jetzt eine rakete schieße, hat diese rakete erstmal denselben wert turn# wie das raumschiff. aber wenn die jetzt ein anderes raumschiff verfolgen soll, was irgendwo rumfliegt, dann muß ich ja abhängig von der position des anderen raumschiffs den wert für turn# der rakete um einen bestimmten betrag in die richtige richtung korrigieren, so das die rakete irgendwann das andere schiff trifft.... ich hab mir hier schon ne zeichnung gemacht, da hab ich auch diverse winkels, aber irgendwie auch gerade ne blockade... ich war in mathe eigentlich nie so schlecht, aber irgendwie gehts gerade nicht weiter... vielleicht könnt ihr mir ja helfen.... vielleicht isses auch total einfach und ich sehs nur nicht... habt ihr erfahrung damit? besten dank .-) |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, hab da schon öfter dieses beispiel gezeigt mit der Atan2 FunctionCode: [AUSKLAPPEN] Graphics 800,600,16,2
SetBuffer BackBuffer() Const ESC = 1, Bildwiederholung = 50, debug =1 Global frameTimer=CreateTimer(Bildwiederholung) Global posX#= 100,PosY# = 100 While Not KeyDown(ESC) Rect int(posX),int(PosY),10,10,0 If MouseHit(1) ; neues ziel zuweisen x_Ziel = MouseX() Y_Ziel = MouseY() grad = Objekt_richtung_grad(x_Ziel ,Y_Ziel,posX ,posY) posX_Speed# = Cos(grad )*2 ; 1 = Speed je nachdem wie viele Pixel schnell posY_Speed# = Sin(grad )*2 End If posX = posX + posX_Speed If posX_Speed < 0 And posX < x_Ziel Then; abfrage ob ziel erreicht posX_Speed = 0 posX = x_Ziel Else If posX_Speed > 0 And posX > x_Ziel Then posX_Speed = 0 posX = x_Ziel EndIf posY = posY + posY_Speed If posY_Speed < 0 And posY < y_Ziel Then; abfrage ob ziel erreicht posY_Speed = 0 posY = y_Ziel Else If posY_Speed > 0 And posY > y_Ziel Then posY_Speed = 0 posY = y_Ziel EndIf If debug Then Text 500,360, "posX : "+ posX Text 500,380, "posY: "+ posY Text 500,400, "posX Speed: "+ posX_Speed Text 500,420, "posY Speed: "+ posY_Speed Text 500,440, "x_Ziel : "+ x_Ziel Text 500,460, "y_Ziel : "+ y_Ziel Text 500,480, "Grad : "+ grad EndIf WaitTimer(frameTimer) Flip Cls Wend End Function Objekt_richtung_grad(Zielpunkt_X,Zielpunkt_Y,Ausgangspunkt_X,Ausgangspunkt_Y ) Waagerechte = Zielpunkt_X -Ausgangspunkt_X Hoehe = Zielpunkt_Y -Ausgangspunkt_Y ;0 grad ist hier nach links und im Uhrzeigersinn wird er höher grad =ATan2(Hoehe ,Waagerechte) If grad < 0 Then grad = grad+360 Return grad End Function die Function Objekt_richtung_grad sollte dir dabei helfen das zu verstehen, ist zwar nicht genau das was du sucht aber das Prinzip ist das gleiche |
||
[BB2D | BB3D | BB+]
|
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
ach, das ist ja schön.... hm, das problem ist nur das es wirklich nich so richtig das ist was ich suche, aber das ist auch garnicht so schlimm. eigentlich wollte ich ja wissen wie ich die rakete drehen muß.... hm, aber da ich vorhin ne straßenbahnfahrt vor mir hatte, hab ich mir papier und stift geschnappt und mal überlegt, und mit hilfe von einem in mathe auch nich sonderlich versiertem kumpel ist es uns doch tatsächlich geglückt da was zu überlegen. es hat ganz schrecklich viel mit winkeln und so zeuxx zu tun... und genau das werde ich jetzt mal weiterverfolgen. trotzdem danke.... ![]() mfg sagt der martin (der sich jetzt noch nudeln mit pilzen macht) |
||
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
in onlinehilfe ist auch gutes ATAN2-beispiel... | ||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group