wildgun 发表于 2008-9-25 12:33:45

[已解决]求教NS程序实现两点间移动的过程

现在需要实现这么一个功能的过程:用lsp2命令,实现图片的移动及放大,从点Ⅰ(X1,Y1)移动到点Ⅱ(X1,Y2),并且点Ⅰ时图片是放大Z1倍的,点Ⅱ时图片是放大Z2倍的。
从数学角度来看,如果将图片缩放的变量也看做是一个坐标,那么其实就是三维空间内2点确定一条直线(包括lsp2命令中的横坐标、纵坐标和放大倍数)

但无论是从计算机程序角度考虑,求3个变化量的最小公倍数然后写过程,还是从数学角度来考虑做3个变量的重叠循环,然后符合某一直线方程,对于NS来说都是很复杂的。

不知道各位前辈有没有什么更好的思路,或者已有的代码能让我借鉴?

defsub pointpath

*pointpath
getparam %1,%2,%3,%4,%5,%6    ;X1,Y1,Z1,X2,Y2,Z2




当然,如果能进而控制在这移动过程中的时间,那是最好不过的了!即要求以上移动过程在T毫秒内完成。
————————————————————————————————————————————————————
写到上面最后一句时忽然想明白了……
没必要把这条轨迹上的每个点都算出来,甚至是把方程算出来。计算机本来就是离散的,而非连续的。
只要把2点之间的线段分割成N分(比如1000)
然后取一个变量%1,
for %1=0 to 1000

然后每次X、Y、Zoom轴都各自增长(X2-X1)*(%1/N)份即可。而因为每经历一次for循环,计算过程都是需要时间的,所以for循环的步长(step)参数就可以控制变化的速度了。

最终解决方法:

*singlepath
getparam %15,$15,%16,%17,%18,%19,%20,%21,%22    ;    spritNo,filepath,x1,y1,zoom1,x2,y2,zoom2,Speed

for %23=0 to 1000
    lsp2 %15,$15,%16+%23*(%19-%16)/1000,%17+%23*(%20-%17)/1000,%18*100+%23*(%21-%18)*100/1000,%18*100+%23*100*(%21-%18)/1000,0,255
    print 1
next
return
页: [1]
查看完整版本: [已解决]求教NS程序实现两点间移动的过程