【问题标题】:out put of the cross product叉积的输出
【发布时间】:2011-06-30 22:34:29
【问题描述】:

我正在尝试获得两个向量的“叉积”。这两个向量代表两个平面。所以,我的向量是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 之类的值?我的功能有什么问题吗? 我知道,我得到的交叉向量应该完全水平定向。那么,您能否告诉我如何检查我的交叉向量是否是水平的? 希望您的建议。

【问题讨论】:

    标签: c++ math vector geometry 3d


    【解决方案1】:

    数学看起来是正确的。快速放置 A = 和 B = 在 的背面给出了合理的结果。 e 表示法表示 e 之后的数字乘以 10 次方。所以这些也可能是合理的,但很难说从你的例子中我无法判断你的输入值是什么。不过,我个人不会直接返回该值——我更愿意作为引用或指针返回,以防止不必要的复制。另外,正如上面提到的海报,你确实有一个初始化的 var。

    【讨论】:

    • 感谢您的评论。我正在从地图中获取这些 a、b 值。我不能使用向量,因为我必须不正常地访问 a、b 值。在我的地图中,前三个元素是 a、b、d 值,然后是另外两个元素来表示我的数据的其他两个属性,即不同的平面。实际上,我不知道如何在我的函数的这种情况下使用指针或地址。请帮忙。
    【解决方案2】:
    int c1,c2=-1;
    

    这使 c1 未初始化。使用:

    int c1=-1, c2=-1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      相关资源
      最近更新 更多