Code archives/3D Graphics - Maths/Pointy Rockets
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
Plots 4 rockets and rotates them to point to the next one (needs the rocket.3ds) | |||||
; Movement & Rotation *** ; By Paul Gerfen (www.gamecoding.co.uk) ; added to slightly by Blitzplotter Global quadrant=9 Graphics3D 800,600 SetBuffer BackBuffer() camera=CreateCamera() CameraViewport camera,0,0,800,600 light=CreateLight() rocket=LoadMesh( "rocket.3ds" ) PositionEntity rocket,0,0,37 r1_quad=return_angle(1,1,3,3) r2_quad=return_angle(0,0,3,-3) r3_quad=return_angle(0,0,-3,-3) r4_quad=return_angle(0,0,-3,3) Print r1_quad Print r2_quad Print r3_quad Print r4_quad ;give rockets positions E,S,W & N (ish) co-ordinates respectively x1=-28 y1=18 x2=8 y2=8 x3=18 y3=-8 x4=-18 y4=-18 rocket1=LoadMesh( "rocket.3ds" ) PositionEntity rocket1,x1,y1,47 rocket2=LoadMesh( "rocket.3ds" ) PositionEntity rocket2,x2,y2,47 rocket3=LoadMesh( "rocket.3ds" ) PositionEntity rocket3,x3,y3,47 rocket4=LoadMesh( "rocket.3ds" ) PositionEntity rocket4,x4,y4,47 r1_angle=return_angle(x1,y1,x2,y2) r2_angle=return_angle(x2,y2,x3,y3) r3_angle=return_angle(x3,y3,x4,y4) r4_angle=return_angle(x4,y4,x1,y1) Print " " Print "Thats a slice of debug... Press Any Key" WaitKey RotateEntity rocket1,0,0,-r1_angle RotateEntity rocket2,0,0,-r2_angle RotateEntity rocket3,0,0,-r3_angle RotateEntity rocket4,0,0,-r4_angle While Not KeyHit(1) If KeyDown(200) Then MoveEntity rocket,0,0.05,0 EndIf If KeyDown(203) Then TurnEntity rocket,0,0,1.0 EndIf If KeyDown(205) Then TurnEntity rocket,0,0,-1.0 EndIf UpdateWorld RenderWorld Text 320,500,"One rocket - Movement & Rotation" Text 270,522,"With four other rockets that'll point to each other" Flip Wend End Function return_angle(x1,y1,x2,y2) quadrant=5 ;first establish which quadrant 2nd co-ords are in with respect to first co-ords If x1<x2 If y1<y2 quadrant=1 Else quadrant=2 EndIf Else If y1>y2 quadrant=3 Else quadrant=4 EndIf EndIf Select(quadrant) Case 1 Print "1-1" Print" x1:"+x1+" y1:"+y1+" x2: "+x2+" y2: "+y2 angle#= Float ATan2(y2-y1,x2-x1) ;1st quadrant fixer: angle2#= 0+(90-angle) Case 2 Print "2-2" Print" x1:"+x1+" y1:"+y1+" x2: "+x2+" y2: "+y2 angle#= (Float (ATan2(y2-y1,x2-x1)))+180 ;2nd quadrant fixer: angle2# = 90+(180-angle) Case 3 Print "3-3" Print" x1:"+x1+" y1:"+y1+" x2: "+x2+" y2: "+y2 angle#= (Float (ATan2(y2-y1,x2-x1)))+360 ;3rd quadrantfixer: angle2#=180+(270-angle) Case 4 Print "4-4" Print" x1:"+x1+" y1:"+y1+" x2: "+x2+" y2: "+y2 angle#= (Float (ATan2(y2-y1,x2-x1)))+180 ;4th quadrant fixer angle2#=270+(360-angle) End Select Return(angle2) End Function |
Comments
None.
Code Archives Forum