-
Creator 版本:1.8.1
-
目标平台: 模拟器
-
重现方式:
一个代码片段
let a = new cc.Vec2(1,0);
let b = new cc.Vec2(0,1);
cc.log(a.cross(b));
输出的是-1
但是根据叉积应该输出1
因为这个问题,我的许多物理旋转或判断都出错了
Creator 版本:1.8.1
目标平台: 模拟器
重现方式:
一个代码片段
let a = new cc.Vec2(1,0);
let b = new cc.Vec2(0,1);
cc.log(a.cross(b));
输出的是-1
但是根据叉积应该输出1
因为这个问题,我的许多物理旋转或判断都出错了
向量叉乘应该返回向量才对。官方出来补数学啦。
ay-by+bx-ax+axby-aybx
三维向量叉乘才返回向量,根据右手定则判断方向,方向垂直两个向量,大小是平行四边形面积,
二维的向量因为方向垂直两个向量,故二维向量叉积是一个值,大小是平行四边形面积
|a×b|=|axby-bxay|
点乘和叉乘?
我看了下源码,好像这叉乘全是反的
a(x1,y1), b(x2,y2)的叉乘是 x1 * y2 - y1 * x2
a(1, 0), b(0, 1)的叉乘是 1 * 1 - 0 * 0 = 1
源码里面
a.cross(b)竟然是 b与a的叉乘, 即 0 * 0 - 1 * 1 = -1
所以要得出结果为1,只能这样写 b.cross(a)
旋转也是反的,所以很多地方要90-
action的rotateTo参数是x,y,但其实是转z轴……
那这明显就是错的啊,需要叫官方改啊,误人子弟
好像panda在某一篇帖子里面解释过… 具体忘了
可能有特殊用意,没用过
求帖子链接
因为我们的旋转方向是反的……
。。。我的天。
那请您解释一下这个:
cocos哪儿都好,就是乱,文档乱,api乱,乱,乱,乱!!!
这里应该是有一个地方的坐标系搞错了。这里代码最初是我写的,不过我也不记得为什么会写反过来。估计是当时是为了同时兼容多套引擎,每套引擎的旋转方向不一致,所以做出了这个取反的决定……
目前来说,由于最早的 cocos2d-iphone 就没有统一的坐标系,所以 cocos 一直以来的旋转方向就是反的。这里取反的话,似乎会更方便计算?
这都能圆上orz,算了,反正也不常用。
可以考虑在 2.0 反过来
更新: 2.0 已经反过来了
那么也请把rotation的方向反过来,谢谢。
这个会破坏兼容性的