欢迎光临散文网 会员登陆 & 注册

Creator:关于已知向量(坐标)求角度和已知角度求向量(目标坐标)的补充

2021-11-01 19:03 作者:会飞的蜗牛007  | 我要投稿

 前面有一篇文章CocosCreator:已知两点(坐标)求角度,介绍了已知坐标求角度的问题。但实际情况实际分析实际应用。这里做一下补充:已知向量localVec,想求一下其与水平方向的夹角:

vecToDegress(localVec:Vec2){

    let comVec = v2(0,1);//这里定义一个水平向右的单位向量

    let radian = localVec.signAngle(comVec);//求方向向量和单位向量之间的弧度

    let degree = misc.radiansToDegrees(radian);//弧度转成角度

    return degree;

}

以上用到了两个creator提供的api:

signAngle:获取当前向量和指定向量之间的有符号角度,调用对象是向量。

有符号角度的取值范围为 (-180, 180],当前向量可以通过逆时针旋转有符号角度与指定向量同向

misc.radiansToDegrees():弧度转角度。

misc类提供的接口,不说这种情况需求,很多地方弧度转角度的应用也较常见

实际应用的情况很多,求两点间的夹角也可以通过这种方法,已知两点就是已知两个向量,无非是加加减减的问题。求角度的应用情况都可以归类到这种解决方法上。

----------------------------------------------------

/**

    * 已知角度求该角度上的向量

    * @param degree

    * @returns

    */

public static degreesToVectors(degree) {

let radian = misc.degreesToRadians(degree)// cc 提供的将角度转换为弧度

let comVec = v2(0, 1);    // 一个水平向右的对比向量

let dirVec = comVec.rotate(-radian);    // 将对比向量旋转给定的弧度返回一个新的向量

return dirVec;

}

这个是在项目中有用到,我需要在一个均分角度的大转盘上添加一个个的节点,节点动态创建,所以需要求个体节点的本地位置。角度360度均分一下,半径设一个我需要的,求出向量后乘以半径就可以得到我想要的位置了。所以直接copy了一下代码就贴上了。以后抄起来也方便。

let count = 5;

//求平均角度

let accAngle = -360/count;

for(let i = 0;i < count;i++){

let op = instantiate(this.op);

this.container.addChild(op);

let lrAngle = accAngle + i*accAngle;

let dec = degreesToVectors(lrAngle);

let pos = v2((dec.x*this._toucheDis),(dec.y*this._toucheDis));

op.setPosition(pos.x,pos.y,0);

}

_toucheDis是半径



Creator:关于已知向量(坐标)求角度和已知角度求向量(目标坐标)的补充的评论 (共 条)

分享到微博请遵守国家法律