Ooops
February 27, 2021, 04:09:56 AM

Author Topic: [bmx] TRadialVector, TLinearVector, TPos by ninjarat [ 1+ years ago ]  (Read 419 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : TRadialVector, TLinearVector, TPos
Author : ninjarat
Posted : 1+ years ago

Description : TRadialVector is much more powerful if you want high accuracy, but TLinearVector is much faster to execute, seeing as the linear one just uses some basic algebra and the radial one uses some trig.

I origonally designed them for a particle system, the one in Diamonds.  Diamonds was a warm up btw, my next game will be much better.  Getting off topic.  Sorry.  Have fun!


Code :
Code: BlitzMax
  1. 'base class
  2. Type TPos 'would have extended it but it works better the way I did it
  3.         Field x!,y!
  4.        
  5.         Method setTo:TPos(ex!,wy!)
  6.                 x=ex
  7.                 y=wy
  8.         End Method
  9.        
  10.         Function createPos:TPos(ex!,wy!)
  11.                 Local temp:TPos
  12.                 temp.x=ex
  13.                 temp.y=wy
  14.                 Return temp
  15.         End Function
  16. End Type
  17.  
  18. 'children (sort of)
  19. Type TLinearVector 'less accurate but faster
  20.         Field cur:TPos,nxt:TPos
  21.        
  22.         Method setTo(cr:TPos,nx:TPos)
  23.                 nxt=nx
  24.                 cur=cr
  25.         End Method
  26.        
  27.         Method setToZero()
  28.                 nxt=cur
  29.         End Method
  30.        
  31.         Method increment(step!=1)
  32.                 xdif!=nxt.x-cur.x
  33.                 ydif!=nxt.y-cur.y
  34.                 cur=nxt
  35.                 nxt.x:+xdif*step
  36.                 nxt.y:+ydif*step
  37.         End Method
  38.        
  39.         Method toRadialVector:TRadialVector()
  40.                 Local temp:TRadialVector
  41.                 temp.pos=cur
  42.                 xdif!=nxt.x-cur.x
  43.                 ydif!=nxt.y-cur.y
  44.                 temp.vel=Sqr(xdif*xdif+ydif*ydif)
  45.                 If xdif>0 Then
  46.                         temp.ang=ATan(yvel/xvel)
  47.                 Else
  48.                         temp.ang=ATan(yvel/xvel)+180
  49.                 End If
  50.         End Method
  51.        
  52.         Function createVector:TLinearVector(cr:TPos,nx:TPos)
  53.                 Local temp:TLinearVector
  54.                 temp.nxt=nx
  55.                 temp.cur=cr
  56.                 Return temp
  57.         End Function
  58.        
  59.         Function createVectorFromCoords:TLinearVector(cx!,cy!,nx!,ny!)
  60.                 Local temp:TLinearVector
  61.                 temp.nxt=TPos.createPos(nx,ny)
  62.                 temp.cur=TPos.createPos(cx,cy)
  63.                 Return temp
  64.         End Function
  65. End Type
  66.  
  67. Type TRadialVector 'more accurate but slower
  68.         Field pos:TPos,ang!,vel!
  69.        
  70.         Method setTo(p:TPos,a!,v!)
  71.                 pos=p
  72.                 ang=a
  73.                 vel=v
  74.         End Method
  75.        
  76.         Method setToZero()
  77.                 vel=0
  78.         End Method
  79.        
  80.         Method increment(step!=1)
  81.                 xvel!=Cos(ang)*vel*step
  82.                 yvel!=Sin(ang)*vel*step
  83.                 pos.x:+xvel
  84.                 pos.y:+yvel
  85.         End Method
  86.        
  87.         Method toLinearVector:TLinearVector()
  88.                 Local temp:TLinearVector
  89.                 temp.cur=pos
  90.                 temp.nxt.x=pos.x+Cos(ang)*vel
  91.                 temp.nxt.y=pos.y+Sin(ang)*vel
  92.                 Return temp
  93.         End Method
  94.        
  95.         Function createVector:TRadialVector(p:TPos,a!,v!)
  96.                 Local temp:TRadialVector
  97.                 temp.pos=p
  98.                 temp.ang=a
  99.                 temp.vel=v
  100.                 Return temp
  101.         End Function
  102.        
  103.         Function createVectorFromCoords:TRadialVector(px!,py!,a!,v!)
  104.                 Local temp:TRadialVector
  105.                 temp.pos=TPos.createPos(px,py)
  106.                 temp.ang=a
  107.                 temp.vel=v
  108.                 Return temp
  109.         End Function
  110. End Type


Comments :


ninjarat(Posted 1+ years ago)

 Oops!  The argument for increment() method is called step!  WTF was I thinking!?  Call it timestep.  Makes more sense that way anyhow.


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal