猫史档案馆


关于实体绕一点旋转的问题

用户:一只双鱼座a一只双鱼座a查看:17 回复:5 评论:17 创建时间:2023-07-17T10:51:52


hello,大家好,我是一条喜欢摸自己同类的鱼

 

众所周知,我们在神岛编程的时候总会遇到一些绕某个东西绕一点旋转的问题

(如,一个护盾绕玩家圆周旋转之类的)

这时候一些萌新(就比如我?)就比较头疼,因为他们(还是包括我)不知道每次旋转时实体应该在哪个位置上,冥思苦想最后还是放弃圆周用另外一种方式代替

 

为了解决这个 问题 我就去搜索查询...

然后我就会了(大雾

 

首先我们需要用到向量的旋转公式:(这里可以上网查一查,有三角基础的就能懂)

x: x*cosA-y*sinA y: x*sinA+y*cosA   它的意义简单来说是 一条线(向量)绕着一点旋转A°,线(向量)末端的位置   我们再解决一个度数上的问题(这个问题折磨我太久了,一直让我这个小学的没弄明白神岛的旋转意义,也可能是我太菜了)   1°的值怎么求? 我们知道神岛的Math.sin(1)不等于数学上的sin 1°,它等于一个怪的数字(0.1145141919810 doge   那我们就将目光放到n°的取值上:n°=n*PI/180 (没用的输入法打不出来PI) 于是乎,1°=1*PI/180=PI/180 我们试验一下得知:Math.sin(PI/180)=sin 1°   很明显了 明显过后就是code:
async function spin(entity,time,distx,distz) { //分别是:实体 旋转一周时间 
    let x=distx, z=distz; //这里按照实际情况而定
    const c = 180;
    for(let i=1;;i+=1) {
        entity.position.set(
        128+(x*Math.cos(i*Math.PI/c)-z*Math.sin(i*Math.PI/c)), //128是地图中心(我的地图是256*256)
        entity.position.y,
        128-(x*Math.sin(i*Math.PI/c)+z*Math.cos(i*Math.PI/c)) //
        )
        await sleep(time * 1000 / 360) //一圈360°,所以要除以360
    }
}//绕地图中心转圈
 

需要注意的是如果你的time太大会产生 很大的延迟,你的dist太大会产生 瞬移。你可以将i加的值除以n,将360*n

这样问题就完美解决了

 

想说的话:

我本人是一个FW,因为还是小学生,所以无法给出准确定义,我只能打比方作比较之类的让大家看得懂,如果定义有误大佬一定要提出来!)))

当然还是我太菜了

 

 

 


回复

上一页1 页 / 共 1下一页
一只双鱼座a一只双鱼座a

沙发

点赞0


评论


Dao3的C6H8O7Dao3的C6H8O7

我能来

点赞0


评论


mornwindmornwind

弧度制···

点赞0


评论


鸽王懒狗鸽王懒狗

吼吼吼(

点赞0


评论


yee剑走天下yee剑走天下

我一个初中生都看不懂,你如果是FW那我只能算喵了(悲

点赞0


评论