不是数学专家,而是 ND 中的 CROSS 乘积被定义为 N-1 向量的运算,导致向量垂直于每个向量。这些东西被计算为矩阵的行列式,其中第一行是单位方向向量(i,j,k,...),其他每一行都包含每个向量操作数。所以对于 2D 它是:
cross( (x0,y0) ) = | i j | = i*y0 - j*x0 = (y0,-x0)
| x0 y0 |
垂直于(x0,y0)。 所以你所拥有的不是二维叉积!!!
在 CG 中通常需要通过 3D 叉积获得某个 2D 表面的法线向量:
cross( (x0,y0,z0),(x1,y1,z1) ) = | i j k | = i*(y0*x1-z0*y1) + j*(z0*x1-x0*z1) + k*(x0*y1-y0*x1)
| x0 y0 z0 |
| x1 y1 z1 |
现在如果(x0,y0,z0),(x1,y1,z1) 的两个向量是二维的,那么z0,z1 都是零,所以:
cross( (x0,y0,z0),(x1,y1,z1) ) = i*(y0*x1-0*y1) + j*(0*x1-x0*0) + k*(x0*y1-y0*x1)
cross( (x0,y0,z0),(x1,y1,z1) ) = k*(x0*y1-y0*x1)
cross( (x0,y0,z0),(x1,y1,z1) ) = (0,0,x0*y1-y0*x1)
这与您的定义更相似,但看起来不一样,所以您拥有的是以下之一:
- 不同的东西不是交叉产品
- 用我还没有看到的一些数学恒等式转换的叉积。
- 该答案中的错误(小错字,或复制错误的代码行......我也经常发生)
- 更多方程融合在一起(交叉只是答案的一小部分)
在链接答案的上下文中您需要 3D 叉积 z 坐标结果:
z = x0*y1-y0*x1
哪个符号会告诉您关于多边形缠绕规则及其边缘之一的点是顺时针还是逆时针...
但要绝对清楚,你应该直接在那个问题线程中问这个Niklas B.(使用评论),因为你的代表很低,我会为你做这件事并将你的问题链接到那里......