cocos creator 3.8.x 中旋转到某个角度
private _rotate(p1: Vec2/*起始点*/, p2: Vec2/*结束点*/) {
const vec = p2.clone().subtract(p1.clone()).normalize();
// const vec = v2(1, -1).normalize();
const base = v2(1, 0).normalize(); // 这个(1,0)就是图片箭头的方向,比如上图里面的右箭头
const r = base.signAngle(vec);
this.node.angle = toDegree(r);
}
点A减点B,结果是从B点指向A点的矢量
A(1,0)- B(0,0)= (1,0)是指向点A的
Vec2::angle的返回值为[0,180]
Vec2::angle(Vec2(1,0), Vec2(1,1)); // 45°
Vec2::angle(Vec2(1,0), Vec2(1,-1)); // 45°

getAngle的返回值为[-90,90]
Vec2(1,0).getAngle(Vec2(1,1)); // 45
Vec2(1,0).getAngle(Vec2(1, -1));// -45
lua api
local angle1 = cc.pGetAngle(cc.p(1, 0), cc.p(1, 1))
local v = 180 / math.pi * angle1 -- 45
local angle2 = cc.pGetAngle(cc.p(1, 0), cc.p(1, -1))
local v = 180 / math.pi * angle2 -- -45
function cc.pGetAngle(self,other)
local a2 = cc.pNormalize(self)
local b2 = cc.pNormalize(other)
local angle = math.atan2(cc.pCross(a2, b2), cc.pDot(a2, b2) )
if math.abs(angle) < 1.192092896e-7 then
return 0.0
end
return angle
end
点乘判断前后
点乘,也称为内积、数量积或标量积,是向量运算中的一种基本操作。它通常用来计算两个向量之间的相似度或角度。
几何定义: a·b=|a|*|b|*cos<a,b>
2个向量的夹角范围[0,360]
-
cos(-90°)~cos(90°) = [1,0]>0表示在前边 -
cos(90°)~cos(270°) = [0,-1]<0表示在后边

叉乘判断左右
叉乘,也称为向量积、矢量积或外积,是向量运算中的一种操作。
在计算机图形学中,叉乘可以用于计算表面法向量、生成旋转轴以及进行投影变换等操作。
几何定义:|c|=|a||b|sin<a,b>
sin(0°)~sin(180°) = [1,0]sin(180°)~sin(360°) = [0,-1]
Vec2 vec = Vec2(0, 1)-Vec2::ZERO;
float ret = 0;
// 注意,必须是相同的起点,这个非常重要
ret = vec.cross(Vec2(0, 1)-Vec2::ZERO); // 0
ret = vec.cross(Vec2(0, -1)-Vec2::ZERO);// -0
ret = vec.cross(Vec2(1, 0)-Vec2::ZERO); // -1
ret = vec.cross(Vec2(-1, 0)-Vec2::ZERO);// 1
ret = vec.cross(Vec2(1, 1)-Vec2::ZERO);// -1
ret = vec.cross(Vec2(1, -1)-Vec2::ZERO);// -1
ret = vec.cross(Vec2(-1, 1)-Vec2::ZERO);// 1
ret = vec.cross(Vec2(-1, -1)-Vec2::ZERO);// 1

>0 左边
<0 右边