用户:
云游de鸽者查看:9 回复:13 评论:9 创建时间:2023-01-10T12:16:02
------前方高能,没有唠嗑部分,全部都是知识输出------
测试代码如下:
console.clear();
const spaceShip = world.createEntity({
mesh:'mesh/模型.vb',
position:new Box3Vector3(喵,2,喵),
meshScale:new Box3Vector3(1/16, 1/16, 1/16),
collides:true,
fixed:true,
gravity:false,
});
spaceShip.velocity.x = 1;
var posX2 = 0;//存储上一个位置
world.onPlayerJoin(({entity})=>{//此处可改,只是写代码时随手乱写一下罢了
var time = 喵;//输出间隔时间(可改,单位ms)
if(entity.player.name == '云游de鸽者'){//此处可改
entity.player.canFly = true;
entity.player.flySpeed = 100;//这两行是个人的设定,方便实验罢了,可删
setInterval(() => {
console.log(spaceShip.position.x - posX2);//控制台输出位移变化量
posX2 = spaceShip.position.x;//更新上一个位置
}, time);//setInterval是每个time时间执行{}里的内容
}
});
(某些地方不小心按tab了,凑合一下吧)
当entity.velocity.x = 1,time = 1000时,输出结果是15或16
它对应的“物理意义”是:entity.velocity.x = 1的人话是"x轴速度每秒15或16格方块"
这个速度我们暂且称为"时间1000ms时的实体速度常数",记为V'
(很显然,velocity是2的时候,时间1000ms时的实体速度常数时2V')
我很疑惑为什么这个数字不是恒定的
于是缩小了变量time,发现无论time取何值,控制台的输出都会随着时间增加有所变化
说明V'值不稳定,大致是特性所致(就是说,设计该语句的时候实质上应是position在高速循环下的变化,像微积分思想或者说微元法一样无限趋近于匀速运动的效果)
在缩小time的过程中我有了一个新发现:
当time = 喵时,控制台输出的数字恒为1的次数最多
而在time进一步缩小时,控制台输出的数字逐渐变为0和1交错(原因应该是向上文提到的,设计该语句的时候实质上应是position在高速循环下的变化,像微积分思想或者说微元法一样无限趋近于匀速运动的效果)
又由于速度接近于恒定,时间和路程成比例
1s和喵ms时间之比:1000/喵 = 15.625
所以这两段时间下的路程之比:s1:s2也应该等于15.625
由于time = 喵时位移变化量恒为1
所以time = 1000时位移变化量应为15.625
也就是V' = 15.625
在各种特性、算法、网络等等因素的影响下,位移变化量的输出与实际效果略有差别,所以才会输出15或16
在将time调回1000后,我连续输出了若干组数据,将每组数据的平均数再取平均数,
我发现,随着组数的增加、每组含有的数据数的增加,得到的数字逐渐趋近于15.625
这也更加印证了V'=15.625的结论
例如其中两组实验数据:
(实验员:鸽者)
15组数据,10个16,5个15,V' ≈ 15.667
(实验员:学员一号)
100组数据,63个16,37个15,V' = 15.63(接近于15.625)
我们将数据恒定在100组,重复试验3次后所有数据完全不变,更加证实了上述结论(由于只有100组实验,数据还欠精确,欢迎诸位做更大数据的实验,在评论区反馈实验结果哦~)
故最终的结论:
实体速度平均常数为15.625格每秒
(前提:速度为1)
这个测量不是没有意义的,对于一些需要精确数据的地图来说,这个数据还是很重要的
(如有不足之处,欢迎诸位批评指正!有疑问也可在评论区提出)