Code archives/Algorithms/Smoothly moving object in 3D
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
From article: Cubic spline interpolation (rus) | |||||
;Object in 3D (sphere) smoothly passing thru random set of points ; (cubes) visiting them in certain time (triple cubic spline interpolation - by Matt Merkulov SeedRnd MilliSecs() Const q=10 Dim ptc#(q+2,2) Dim a#(2) Dim b#(2) Dim c#(2) Dim d#(2) Dim tim(q+2) Dim oc#(2) Graphics3D 800,600 cam = CreateCamera() RotateEntity CreateLight(),45,45,0 SetFont LoadFont ("Arial",16) sphere = CreateSphere() ScaleEntity sphere,2,2,2 x#=0 y#=300 Color 255,0,0 For n=1 To q x#=Rnd(-20,20) y#=Rnd(-20,20) z#=Rnd(20,50) ptc#(n,0)=x# ptc#(n,1)=y# ptc#(n,2)=z# tim(n)=t PositionEntity CreateCube(), x#, y#, z# t=t+Rand(1000,3000) Next For nn=0 To 2 ptc#(0,nn)=ptc#(q,nn) ptc#(q+1,nn)=ptc#(1,nn) ptc#(q+2,nn)=ptc#(2,nn) Next tim(q+1)=t tim(q+2)=t+tim(2) tim(0)=tim(q)-t Color 255,255,255 SetBuffer BackBuffer() t=t+1 n=q+1 Repeat If t>tim(n+1) Then n=n+1 If n>q Then n=1 ms=0 tbeg=MilliSecs() End If For nn=0 To 2 d#(nn)=ptc#(n,nn) c#(nn)=(ptc#(n+1,nn)-ptc#(n-1,nn))/(tim(n+1)-tim(n-1)) dy2#=(ptc#(n+2,nn)-ptc#(n,nn))/(tim(n+2)-tim(n)) x3#=tim(n+1)-tim(n) xx3#=x3#*x3# b#(nn)=(3*ptc#(n+1,nn)-dy2#*x3#-2*c#(nn)*x3#-3*d#(nn))/xx3# a#(nn)=(dy2#-2*b#(nn)*x3#-c#(nn))/(3*xx3#) Next End If For nn=0 To 2 v#=t-tim(n) vv#=v#*v# oc#(nn)=a#(nn)*vv#*v#+b#(nn)*vv#+c#(nn)*v#+d#(nn) Next PositionEntity sphere, oc#(0),oc#(1), oc#(2) RenderWorld Color 0,0,255 Text 0,0,"Time:"+(.001*t)+"s" For nn=1 To q CameraProject cam, ptc#(nn, 0), ptc#(nn, 1), ptc#(nn, 2) Text ProjectedX(), ProjectedY(), (.001*tim(nn)), True, True Next Color 255,255,255 Flip t=MilliSecs()-tbeg Until KeyHit(1) |
Comments
| ||
Im trying to extract some code from this to move one entity from one position to another - one time only - I cant do it though, the code is too complicated |
Code Archives Forum