Creator:關(guān)于已知向量(坐標(biāo))求角度和已知角度求向量(目標(biāo)坐標(biāo))的補(bǔ)充
?前面有一篇文章CocosCreator:已知兩點(diǎn)(坐標(biāo))求角度,介紹了已知坐標(biāo)求角度的問題。但實(shí)際情況實(shí)際分析實(shí)際應(yīng)用。這里做一下補(bǔ)充:已知向量localVec,想求一下其與水平方向的夾角:
vecToDegress(localVec:Vec2){
????let comVec = v2(0,1);//這里定義一個(gè)水平向右的單位向量
????let radian = localVec.signAngle(comVec);//求方向向量和單位向量之間的弧度
????let degree = misc.radiansToDegrees(radian);//弧度轉(zhuǎn)成角度
????return degree;
}
以上用到了兩個(gè)creator提供的api:
signAngle:獲取當(dāng)前向量和指定向量之間的有符號(hào)角度,調(diào)用對(duì)象是向量。
有符號(hào)角度的取值范圍為 (-180, 180],當(dāng)前向量可以通過逆時(shí)針旋轉(zhuǎn)有符號(hào)角度與指定向量同向
misc.radiansToDegrees():弧度轉(zhuǎn)角度。
misc類提供的接口,不說這種情況需求,很多地方弧度轉(zhuǎn)角度的應(yīng)用也較常見
實(shí)際應(yīng)用的情況很多,求兩點(diǎn)間的夾角也可以通過這種方法,已知兩點(diǎn)就是已知兩個(gè)向量,無非是加加減減的問題。求角度的應(yīng)用情況都可以歸類到這種解決方法上。
----------------------------------------------------
/**
? ? * 已知角度求該角度上的向量
? ? * @param degree
? ? * @returns
? ? */
public static degreesToVectors(degree) {
let radian = misc.degreesToRadians(degree)// cc 提供的將角度轉(zhuǎn)換為弧度
let comVec = v2(0, 1); ? ?// 一個(gè)水平向右的對(duì)比向量
let dirVec = comVec.rotate(-radian); ? ?// 將對(duì)比向量旋轉(zhuǎn)給定的弧度返回一個(gè)新的向量
return dirVec;
}
這個(gè)是在項(xiàng)目中有用到,我需要在一個(gè)均分角度的大轉(zhuǎn)盤上添加一個(gè)個(gè)的節(jié)點(diǎn),節(jié)點(diǎn)動(dòng)態(tài)創(chuàng)建,所以需要求個(gè)體節(jié)點(diǎn)的本地位置。角度360度均分一下,半徑設(shè)一個(gè)我需要的,求出向量后乘以半徑就可以得到我想要的位置了。所以直接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是半徑