首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用广义线性模型计算vec4的叉积?

如何用广义线性模型计算vec4的叉积?
EN

Stack Overflow用户
提问于 2012-05-26 01:56:37
回答 4查看 14.3K关注 0票数 4

为什么会抛出编译错误:没有匹配的函数来调用“cross(glm::vec4&,glm::vec4&)”

代码语言:javascript
复制
glm::vec4 a;
glm::vec4 b;
glm::vec4 c = glm::cross(a, b);

但它在vec3上工作得很好?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-26 07:09:23

没有所谓的4D vector cross-product;该操作仅针对3D向量定义。好吧,从技术上讲,有一个-dimensional vector cross-product,但不知何故我不认为你在寻找它。

由于4D矢量叉积在数学上是不合理的,GLM没有提供计算它的函数。

票数 8
EN

Stack Overflow用户

发布于 2014-01-14 01:02:15

你的vec4代表什么?像Nicol said一样,叉积只适用于3D矢量。叉积运算用于查找与两个输入向量正交的向量。因此,如果您的vec4以{x,y,z,w}的形式表示3D齐次向量,那么w分量对您来说无关紧要;您可以直接忽略它。

解决方法可能如下所示:

代码语言:javascript
复制
vec4 crossVec4(vec4 _v1, vec4 _v2){
    vec3 vec1 = vec3(_v1[0], _v1[1], _v1[2]);
    vec3 vec2 = vec3(_v2[0], _v2[1], _v2[2]);
    vec3 res = cross(vec1, vec2);
    return vec4(res[0], res[1], res[2], 1);
}

只需将您的vec4转换为vec3,执行叉积,然后在其中添加1的w分量。

票数 2
EN

Stack Overflow用户

发布于 2016-05-06 00:50:01

叉积的推广是楔积,两个向量的楔积是2-形式,也称为双向向量。

在三维空间中,2-form看起来有点像一个向量,但它的行为却截然不同。假设我们有两个与曲面相切的非共线向量(也称为切向量)。通过取这些向量的叉积,我们得到了一个表示切平面的2-形式。我们也可以用与该平面垂直的向量(也称为法向量)来表示该切平面。但是切向量和法向量的变换是不同的,即通过用于变换切向量的矩阵的逆转置来变换法向量。

在4-空间中,由两个向量的楔积得到的2-形式也表示包含这两个向量的平面(在N-空间中也是如此)。类似于3-空间中的情况,我们可以对该平面有另一种解释,但在4 -空间中,一个平面的补集不是4向量,而是另一个平面,这两个平面都由6个分量表示,而不是4。

代码语言:javascript
复制
c1 * e1^e2 + c2 * e1^e3 + c3 * e1^e4 + c4 * e2^e3 + c5 * e2^e4 + c6 * e3^e4

由于glm不提供用于wedge产品的API,您将不得不使用自己的API。您可以使用两个简单的规则轻松地计算出楔形积的代数:

代码语言:javascript
复制
(1) ei ^ ei = 0
(2) ei ^ ej = -ej ^ ei

其中ei和ej是向量空间的分量向量(基),例如

代码语言:javascript
复制
[a b c d] --> a * e1 + b * e2 + c * e3 + d * e4

上一篇文章中提到的7维向量是两个向量的几何乘积,它使用ei^ei=1而不是上面的规则(1),就像点和叉积(或复数乘法)的融合,这比你想要的要多。有关更多信息,请访问https://en.wikipedia.org/wiki/Exterior_algebrahttps://en.wikipedia.org/wiki/Geometric_algebra

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10759206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档