|
|
发表于 2007-1-21 14:20:00
|
显示全部楼层
Re: 回答一些回贴的提问-----在<想为大家写教程&am
如果把各个部件视为质点,它们之间的关系 视为弹簧,就可以做出来ls的效果
不过实际实现程序的时候可能会遇见“爆炸”之类的情况。(我前一段时间用这种质点—弹簧 的模型描述物体,就遇到过类似情况。解决的办法是……(一想到这,话就多了,先不说了。。。还没吃午饭))
网上有个用简单质点—弹簧模型例子(它有“爆炸”情况),
它效果逼真就在于用了这种物理模型,旋转之类的都不用程序特别考虑,自己发生
它的核心代码如下(弹簧恢复原长的运动):
'每一桢执行:
'vertex:质点数组
LengthTotal = .linklength '弹簧原长(前面有with语句,肯定是with一个弹簧)
'弹簧连接的两个质点在 质点数组 的索引号
T1 = .target1_id: T2 = .target2_id
xer = (vertex(T2).X + vertex(T2).momentum_x) - (vertex(T1).X + vertex(T1).momentum_x)
yer = (vertex(T2).y + vertex(T2).momentum_y) - (vertex(T1).y + vertex(T1).momentum_y)
Leng = Sqr(Abs(xer ^ 2 + yer ^ 2)) '弹簧实际长,即两点间距离
Leng2Go_x = ((Leng - LengthTotal) / Leng) * xer 'x形变量
Leng2Go_y = ((Leng - LengthTotal) / Leng) * yer 'y形变量
'Calculate how far in each direction the vertices must go
'in order to get the link back to its regular length
'弹簧恢复原长,质点运动(momentum:瞬时速度)
vertex(T1).momentum_x = vertex(T1).momentum_x + (Leng2Go_x / 2) * .linktension
vertex(T1).momentum_y = vertex(T1).momentum_y + (Leng2Go_y / 2) * .linktension
vertex(T2).momentum_x = vertex(T2).momentum_x - (Leng2Go_x / 2) * .linktension
vertex(T2).momentum_y = vertex(T2).momentum_y - (Leng2Go_y / 2) * .linktension
——————————————————————
我们给弹簧定义最大受力,或者最大形变 。
当一个质点位置变化时,弹簧形变,然后考虑一下形变大小和最大形变关系,大于就删除弹簧,两个质点的联系就没有了,部件就离开了飞机
为了提升速度,以上应该只在飞机撞了,并且必死无疑时开始工作~~~ |
|