PureBasic Forumhttp://forums.purebasic.com/english/ Simple CarPhysik , need help ;) c# to pbhttp://forums.purebasic.com/english/viewtopic.php?f=16&t=62150 Page 1 of 1

 Author: True29 [ Sat Apr 25, 2015 12:38 pm ] Post subject: Simple CarPhysik , need help ;) c# to pb Hallo ,i had found on this sitehttp://gamedev.stackexchange.com/questi ... -dimensiona simple looking carphysik.now after implement it , my car move without do something ^^perhaps somebody see my mistake thanks for help.code from site:Code:Vector2 position;Vector2 frontTire, backTire;float direction;float speed;float angle;float wheelBase = 32;frontTire = position + wheelBase / 2 * new Vector2((float)Math.Cos(direction), (float)Math.Sin(direction));backTire = position - wheelBase / 2 * new Vector2((float)Math.Cos(direction), (float)Math.Sin(direction));backTire += speed * elapsed * new Vector2((float)Math.Cos(direction), (float)Math.Sin(direction));frontTire += speed * elapsed * new Vector2((float)Math.Cos(direction + angle), (float)Math.Sin(direction + angle));position = (frontTire + backTire) / 2;direction = (float)Math.Atan2(frontTire.Y - backTire.Y, frontTire.X - backTire.X);my code:Code:Structure Vector   X.f   Y.fEndStructureStructure Car       Position.Vector  frontTire.Vector  backTire.Vector  speed.f  angle.f  wheelbase.f  direction.fEndStructureProcedure.i V_Add(*Use.Vector, *Source.Vector, Factor.VT=1.0)   *Use\X + *Source\X*Factor   *Use\Y + *Source\Y*Factor   ProcedureReturn *UseEndProcedureProcedure.i V_Divide(*Use.Vector, Value.VT)   *Use\X / Value   *Use\Y / Value   ProcedureReturn *UseEndProcedureProcedure.f gSin(Ang.f)   ProcedureReturn Sin(Radian(Ang))EndProcedureProcedure.f gCos(Ang.f)  ProcedureReturn Cos(Radian(Ang))EndProcedure;//frontTire = position + wheelBase / 2 * new Vector2((float)Math.Cos(direction), (float)Math.Sin(direction));PlayerCar()\frontTire\x = PlayerCar()\Position\X + PlayerCar()\wheelbase /2 * gCos(PlayerCar()\direction)PlayerCar()\frontTire\y = PlayerCar()\Position\Y + PlayerCar()\wheelbase /2 * gSin(PlayerCar()\direction)  ;//backTire = position - wheelBase / 2 * new Vector2((float)Math.Cos(direction), (float)Math.Sin(direction));PlayerCar()\backTire\x = PlayerCar()\Position\X - PlayerCar()\wheelbase /2 * gCos(PlayerCar()\direction)PlayerCar()\backTire\y = PlayerCar()\Position\Y - PlayerCar()\wheelbase /2 * gSin(PlayerCar()\direction)  ;//backTire += speed * elapsed * new Vector2((float)Math.Cos(direction), (float)Math.Sin(direction));PlayerCar()\backTire\X + PlayerCar()\speed * elapsed * gCos(PlayerCar()\direction) PlayerCar()\backTire\Y + PlayerCar()\speed * elapsed * gSin(PlayerCar()\direction) ;//frontTire += speed * elapsed * new Vector2((float)Math.Cos(direction + angle), (float)Math.Sin(direction + angle));PlayerCar()\frontTire\X + PlayerCar()\speed * elapsed * gCos(PlayerCar()\direction + PlayerCar()\angle) PlayerCar()\frontTire\Y + PlayerCar()\speed * elapsed * gSin(PlayerCar()\direction + PlayerCar()\angle) ;// position = (frontTire + backTire) / 2;V_Add(PlayerCar()\Position,V_Division(PlayerCar()\Position,V_Add(PlayerCar()\frontTire,PlayerCar()\backTire),2));direction = (float)Math.Atan2(frontTire.Y - backTire.Y, frontTire.X - backTire.X);PlayerCar()\direction = ATan2(PlayerCar()\frontTire\Y - PlayerCar()\backTire\Y,PlayerCar()\frontTire\x - PlayerCar()\backTire\x)debug:Code:[13:38:35] speed0[13:38:35] direction0[13:38:35] angle0[13:38:35] frontTire0[13:38:35] frontTire0[13:38:35] backTire0[13:38:35] backTire0[13:38:35] Position512[13:38:35] Position400[13:38:35] speed0[13:38:35] direction0.9149441719[13:38:35] angle0[13:38:35] frontTire2048[13:38:35] frontTire1600[13:38:35] backTire1008.0020751953[13:38:35] backTire799.7424316406[13:38:35] Position2048[13:38:35] Position1600

 Author: STARGĂ…TE [ Sat Apr 25, 2015 7:09 pm ] Post subject: Re: Simple CarPhysik , need help ;) c# to pb Quote:PlayerCar()\direction = ATan2(PlayerCar()\frontTire\Y - PlayerCar()\backTire\Y,PlayerCar()\frontTire\x - PlayerCar()\backTire\x)wrong parameters, in PB: ATan2(X, Y)If you want PlayerCar()\direction in degree, use Degree(ATan2())Quote:V_Add(PlayerCar()\Position,V_Division(PlayerCar()\Position,V_Add(PlayerCar()\frontTire,PlayerCar()\backTire),2))Wrong usage of this procedures, the first operand is changedUse X and Y in singe lines.

 Author: infratec [ Sat Apr 25, 2015 7:39 pm ] Post subject: Re: Simple CarPhysik , need help ;) c# to pb Hi,unfortunately I had to create a WORKING EXAMPLE first.Code:EnableExplicit#ScrWidth = 800#ScrHeight = 600Structure Vector   X.f   Y.fEndStructureStructure Car       Position.Vector  frontTire.Vector  backTire.Vector  speed.f  angle.f  wheelbase.f  direction.f  Sprite.iEndStructureDefine.i EventDefine.f elapsedNewList Playercar.Car();-mainInitSprite()InitKeyboard()InitMouse()OpenWindow(0, 0, 0, #Scrwidth, #ScrHeight, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)OpenWindowedScreen(WindowID(0), 0, 0, #Scrwidth, #ScrHeight)AddElement(Playercar())Playercar()\Position\X = #ScrWidth / 2Playercar()\Position\Y = #ScrHeight / 2Playercar()\wheelbase = 32Playercar()\Sprite = CreateSprite(#PB_Any, 20, 20)StartDrawing(SpriteOutput(Playercar()\Sprite))Box(0, 0, 5, 5, #Red)Box(16, 1, 4, 4, #Red)Box(0, 5, 20, 10, #Red)Box(16, 15, 4, 4, #Red)Box(0, 15, 5, 5, #Red)StopDrawing()elapsed = 0.1Repeat  ClearScreen(0)    ExamineKeyboard()      If KeyboardPushed(#PB_Key_Up)    Playercar()\speed + 1  ElseIf KeyboardPushed(#PB_Key_Down)    Playercar()\speed - 1  EndIf    If KeyboardPushed(#PB_Key_Left)    Playercar()\angle - 0.03  ElseIf KeyboardPushed(#PB_Key_Right)    Playercar()\angle + 0.03  EndIf  If Playercar()\speed < 0    Playercar()\speed = 0  ElseIf Playercar()\speed > 30    Playercar()\speed = 30  EndIf    Debug ""    Debug Playercar()\angle  Debug Playercar()\speed      ;//frontTire = position + wheelBase / 2 * new Vector2((float)Math.Cos(direction), (float)Math.Sin(direction));  PlayerCar()\frontTire\x = PlayerCar()\Position\X + PlayerCar()\wheelbase / 2 * Cos(PlayerCar()\direction)  PlayerCar()\frontTire\y = PlayerCar()\Position\Y + PlayerCar()\wheelbase / 2 * Sin(PlayerCar()\direction)    ;//backTire = position - wheelBase / 2 * new Vector2((float)Math.Cos(direction), (float)Math.Sin(direction));  PlayerCar()\backTire\x = PlayerCar()\Position\X - PlayerCar()\wheelbase / 2 * Cos(PlayerCar()\direction)  PlayerCar()\backTire\y = PlayerCar()\Position\Y - PlayerCar()\wheelbase / 2 * Sin(PlayerCar()\direction)    ;//backTire += speed * elapsed * new Vector2((float)Math.Cos(direction), (float)Math.Sin(direction));  PlayerCar()\backTire\X + (PlayerCar()\speed * elapsed * Cos(PlayerCar()\direction))  PlayerCar()\backTire\Y + (PlayerCar()\speed * elapsed * Sin(PlayerCar()\direction))    ;//frontTire += speed * elapsed * new Vector2((float)Math.Cos(direction + angle), (float)Math.Sin(direction + angle));  PlayerCar()\frontTire\X + (PlayerCar()\speed * elapsed * Cos(PlayerCar()\direction + PlayerCar()\angle))  PlayerCar()\frontTire\Y + (PlayerCar()\speed * elapsed * Sin(PlayerCar()\direction + PlayerCar()\angle))    ;// position = (frontTire + backTire) / 2;  PlayerCar()\Position\X = (PlayerCar()\frontTire\X + PlayerCar()\backTire\X) / 2  PlayerCar()\Position\Y = (PlayerCar()\frontTire\Y + PlayerCar()\backTire\Y) / 2    ;direction = (float)Math.Atan2(frontTire.Y - backTire.Y, frontTire.X - backTire.X);  PlayerCar()\direction = ATan2(PlayerCar()\frontTire\x - PlayerCar()\backTire\x, PlayerCar()\frontTire\Y - PlayerCar()\backTire\Y)        Debug StrF(PlayerCar()\Position\X, 2) + " " + StrF(Playercar()\Position\Y, 2)    DisplaySprite(PlayerCar()\Sprite, PlayerCar()\Position\X, Playercar()\Position\Y)    FlipBuffers()    Event = WindowEvent()  Until KeyboardPushed(#PB_Key_Escape) Or Event = #PB_Event_CloseWindowI also changed already the Atan2() parameters, but still funny results.Bernd

 Author: True29 [ Sat Apr 25, 2015 7:42 pm ] Post subject: Re: Simple CarPhysik , need help ;) c# to pb hm bad thanks for your try

 Page 1 of 1 All times are UTC + 1 hour Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Grouphttp://www.phpbb.com/