交叉产品

时间:2011-02-20 22:35:45

标签: c++ math vector geometry 3d

我正试图获得两个向量的'交叉产品'。这两个向量代表两个平面。所以,我的向量是a1,b1,-1a2,b2,-1。 (我用过,我的平面方程为ax+by-z+d=0)。

这是我定义的函数来获得交叉产品;

vector<double> cross_vector(vector<double> plane1,vector<double> plane2){
vector<double> cross_product;
double a1=plane1.at(0); double a2=plane2.at(0);
double b1=plane1.at(1); double b2=plane2.at(1);
int c1,c2=-1;
double cross_a=(b1*c2)-(b2*c1);
double cross_b=(a2*c1)-(a1*c2);
double cross_c=(a1*b2)-(a2*b1);
cross_product.push_back(cross_a);
cross_product.push_back(cross_;
cross_product.push_back(cross_c);

return cross_product;
}

对于不同的平面组合我得到的结果如下;

 523554   -1.3713e+006  -0.00160687

 556340   -1.43908e+006  0.00027957

-568368    1.46225e+006 -0.00034963

 143455   -380017       -0.00027957 

我无法理解像1.46225e+006这样的值?我的功能有什么问题吗? 我知道,我得到的交叉矢量应该是完全水平的。那么,你能告诉我如何检查我的交叉矢量是否水平? 希望你的意见。

2 个答案:

答案 0 :(得分:7)

int c1,c2=-1;

这使得c1未初始化。使用:

int c1=-1, c2=-1;

答案 1 :(得分:0)

数学看起来正确。快速放置A =&lt; 1,0,0&gt;并且B =&lt; 0,1,0&gt;在&lt; 0,0,1&gt;的背面给出了合理的结果。 e notatin表示e之后的幂次数10。所以这些也可能是合理的,但很难说从你的例子中我无法分辨你的输入值是什么。我不会个人直接返回值 - 我宁愿返回作为参考或指针,以防止不必要的复制。另外,如上面提到的海报,你有一个初始化的var。