Creator:关于已知向量(坐标)求角度和已知角度求向量(目标坐标)的补充
前面有一篇文章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是半径