不是数学专家,但交叉积ND被定义为操作N-1
向量产生垂直于每个向量的向量。该东西计算为矩阵的行列式其中第一行是单位方向向量(i,j,k,...)
其他每一行保存每个向量操作数。所以对于 2D 来说是:
cross( (x0,y0) ) = | i j | = i*y0 - j*x0 = (y0,-x0)
| x0 y0 |
垂直于(x0,y0)
. 所以你拥有的不是 2D 叉积!
在 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)
是 2D 那么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
协调 result:
z = x0*y1-y0*x1
哪个符号会告诉您这些点相对于多边形缠绕规则及其边缘之一是顺时针还是逆时针......
但为了绝对清楚你应该问这个Niklas B.
直接在该问题线程中(使用评论),因为您的代表程度较低,我会为您做这件事并将您的问题链接到那里......