求教!!关于让克隆体以随机大小随机速度的椭圆形运动!
scratch吧
全部回复
仅看楼主
level 1
目标是让尽可能多的小球在平面内做中心一致的椭圆运动,类似于不考虑引力的三(多)体运动
现在的想法是让小球每过一秒克隆自己,速度随机,椭圆的轴长随机,后生成的克隆体碰到先生成的克隆体就消失
空有想法不会实践
求大佬赐教!
2021年07月11日 06点07分 1
level 10
这里面最麻烦的估计就是椭圆运动了。我也不是很会三角函数,就随便写了写圆周运动的代码/
调整角量来修改旋转速度
min半径为椭圆最小半径,max半径为椭圆最大半径
数学没学过椭圆,我也不清楚是否写的标准,但至少效果有了
pen的代码只是用来表示移动路径,可以删掉
碰到先生成的星球就消失,这个有两种办法:
1.若角色名为<a>,检测碰到<a>就删除此克隆体即可,这个办法最简便,但是问题在于太局限了。不管先后,只要两个该角色碰撞,则两方都会被删除。
2.双向克隆体的数据交互。
定义克隆体变量(仅适用于当前角色)<编号>,定义列表<数据列表>,初始化时设置为1并清空数据列表,每次生成克隆体则+1并在数据列表中加入3项空的值(项目数取决于你要发送的数据项目量,此处发送编号,x,y即可),同时重复执行不断将:
<数据列表>的第 编号*3+1 项 替换为 编号
<数据列表>的第 编号*3+2 项 替换为 x坐标
<数据列表>的第 编号*3
+3
项 替换为 y坐标
同时遍历列表每三项,用d=根号下[(x1-x2)^2+(y1-y2)^2]来计算距离,只要目标的编号低于自己的编号即代表它属于先生成的星球,如果与目标距离还<d’(这个值你可以自己设定,就是星球之间碰撞的最大距离值)则删除后生成的星球
删除操作:将以上的重复执行代码替换的值全部修改为空,此处只需要遍历时针对数据都是空的列表项跳过即可
最后,
上述解决方案都有一个问题,受限于帧率,过快运动的星球很难互相碰撞。
此时2方法就有一个解决方案:将发送的数据项更改为5,后两项将下一帧的坐标发送
来自大佬simple617(链接内容为它小号)提供了一个式子可以计算在该时间内的最小距离
https://aerfaying.com/Projects/834033
该作品中有进行详细解释,我就不说了。
当然,受限于1方法的不可扩展性,1方法无法解决这个问题。
2021年07月11日 08点07分 2
椭圆运动我还能勉强做只是移动速度很慢)后半段碰撞时让后生成的克隆体消失怎么做,这个还是不太懂
2021年07月11日 08点07分
@夏莫斤斤计较神 蛮复杂的,需要理解一下
2021年07月13日 15点07分
level 11
椭圆可以爆算参数方程 但是你要模拟二体的话, 你要不先去了解一下开普勒第二定律[滑稽]
2021年07月19日 09点07分 3
1