ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

代码实践求解三维空间向量的夹角

2021-09-29 14:00:04  阅读:301  来源: 互联网

标签:std main 夹角 Eigen int namespace 三维空间 include 向量


#include <iostream>
#include <Eigen/Dense>

using namespace std;

int main() {

    Eigen::Vector3d v1(2, 4, 7), v2(7, 8, 9);


    cout << "dot: " << v1.dot(v2) << endl;
    // https://blog.csdn.net/dcrmg/article/details/52416832
    // 点乘的几何意义: 点乘的几何意义是可以用来表征或计算两个向量之间的夹角,以及在b向量在a向量方向上的投影
    // 点乘的计算方法: 2*7+4*8+7*9=14+32+63=109
    // a.b = |a|*|b|cos角度 = 109


    cout << "cross:\n" << v1.cross(v2) << endl;
    cout << "cross transpose: " << v1.cross(v2).transpose() << endl;
    // https://blog.csdn.net/dcrmg/article/details/52416832
    // 叉乘的几何意义: 在三维几何中,向量a和向量b的叉乘结果是一个向量,更为熟知的叫法是法向量,该向量垂直于a和b向量构成的平面。
    // 叉乘的计算方法: (y1z2-y2z1, -(x1z2-x2z1), x1y2-x2y1)=(4*9-8*7, -(2*9-7*7), 2*9-7*4)=(-20, 31, -12)


    cout << "norm: " << v1.cross(v2).norm() << endl;
    // https://blog.csdn.net/m0_56348460/article/details/117386857
    // 向量的二范数: 欧几里得范数 常用计算向量长度 即向量元素绝对值的平方和再开方
    // 开平方(-20*-20 + 31*31 + -12*-12) = 38.7943
    // 0范数,向量中非零元素的个数。
    // 1范数,为绝对值之和。
    // 2范数,就是通常意义上的模。
    // 无穷范数,就是取向量的最大值。


    cout << "v1:\n" << v1 << endl;
    cout << "v2:\n" << v2 << endl;
    cout << "v1.transpose(): " << v1.transpose() << endl;
    cout << "v1.transpose() * v2: " << v1.transpose() * v2 << endl;


    double angle = atan2(v1.cross(v2).norm(), v1.transpose() * v2);
    // https://blog.csdn.net/KYJL888/article/details/106121978
    // https://www.cnblogs.com/yabin/p/6442922.html
    // 指向(y, x)的射线在坐标平面上与x轴正方向之间的角的角度度。
    // 三维空间中两个向量会有一条公垂线(向量叉乘可以求得),
    // 以公垂线为轴,将第二个向量旋转一个角度,使其与第一个向量平行.这个角度即为两向量的夹角.
    std::cout << "angle: " << angle * 180 / M_PI << "\n";
    return 0;
}

标签:std,main,夹角,Eigen,int,namespace,三维空间,include,向量
来源: https://blog.csdn.net/qq_21950671/article/details/120547154

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有