OpenMesh 提供了许多可供使用的向量操作函数,使用特别方便。

计算距离:

从官方文档可以看到OpenMesh提供了5个函数,分别为

Scalar length() const        //compute euclidean norm

Scalar norm() const         //compute euclidean norm

Scalar sqrnorm() const    //compute squared euclidean norm

Scalar l1_norm() const    //compute L1 (Manhattan) norm

Scalar l8_norm() const   //compute l8_norm

test:

    MyMesh::Normal p(,-,), q(,,);
cout<<"length : "<<(p-q).length()<<endl;
cout<<"norm : "<<(p-q).norm()<<endl;
cout<<"sqrnorm : "<<(p-q).sqrnorm()<<endl;
cout<<"l1_norm : "<<(p-q).l1_norm()<<endl;
cout<<"l8_norm : "<<(p-q).l8_norm()<<endl;

result:

对于二维空间上的点(也可看做向量,起点为原点) p(x1,y1), q(x2,y2)

欧几里得距离                norm =( (x2-x1)+ (y2-y1)2

曼哈顿距离(L1距离)      l1_norm = |x2-x1| + |y2-y1|

切比雪夫距离(L距离)    l8_norm = max{|x2-x1| , |y2-y1|}

max & min

test:

     MyMesh::Normal p(,-,), q(,,);
cout<<"max : "<<p.max()<<endl;
cout<<"max_abs : "<<p.max_abs()<<endl; cout<<"maximize : "<<p.maximize(q)<<endl;
cout<<p<<endl<<q<<endl;
cout<<"maximized : "<<p.maximized(q)<<endl;
cout<<p<<endl<<q<<endl;
cout<<"maximized : "<<q.maximized(p)<<endl;
cout<<p<<endl<<q<<endl;

result:

从result来看,max 和 max_abs 很简单,不用多说。对于 p.maximize(q) 返回值是向量p与q对应位置的最大值组成的向量,而 p.maximized(q) 判断向量p是否经历了maximize,返回值为0则向量p不变,未经过maximize, 返回值为1则向量p改变,即经过maximize。

对于min,有同样的操作,不再赘述。

向量单位化

OpenMesh提供了三个单位化的函数

vector type & normalize()                    //normalize vector, return normalized vector

const vector type normalized()             //return normalized vector

vector type & normalize_cond()            //normalize vector, return normalized vector and avoids div by zero

外加单位化的定义(长度为1),有四种单位化方法。

test:

     MyMesh::Normal p1(,-,), p2(,-,), p3(,-,), p4(,-,);

     MyMesh::Normal q1 = p1.normalize();
cout<<"p1 : "<<p1.length()<<" "<<p1<<endl;
cout<<"q1 : "<<q1.length()<<" "<<q1<<endl<<endl; MyMesh::Normal q2 = p2.normalized();
cout<<"p2 : "<<p2.length()<<" "<<p2<<endl;
cout<<"q2 : "<<q2.length()<<" "<<q2<<endl<<endl; MyMesh::Normal q3 = p3/(p3.length());
cout<<"p3 : "<<p3.length()<<" "<<p3<<endl;
cout<<"q3 : "<<q3.length()<<" "<<q3<<endl<<endl; MyMesh::Normal q4 = p4.normalize_cond();
cout<<"p4 : "<<p4.length()<<" "<<p4<<endl;
cout<<"q4 : "<<q4.length()<<" "<<q4<<endl<<endl<<endl;

result:

从结果看出,1和4效果一样,1和2效果不同,需要注意!!!

点乘叉乘(内积外积)

test:

1     MyMesh::Normal p(,-,), q(,,);
cout<<"dot product : "<< (p | q) <<endl;
cout<<"cross product : "<< (p % q) <<endl;

result:

向量 p(x1,y1,z1), q(x2,y2,z2)

点乘(内积):x1*x2 + y1*y2 + z1*z2

叉乘(外积):(y1*z2-y2*z1, x2*z1-x1*z2, x1*y2-x2*y1)   (来自行列式表示的化简,cnblog不能打公式么???)

OpenMesh 之向量操作的更多相关文章

  1. C++ code:向量操作之添加元素

    读入一个文件aaa.txt的数据到向量中,文件中是一些整数(个数未知).要判断向量中的元素有多少个两两相等的数对. 代码如下: #include<iostream> #include< ...

  2. ca75a_c++_标准IO库-利用流对象把文件内容读取到向量-操作文件

    /*ca75a_c++_标准IO库习题练习习题8.3,8.4,8.6习题8.9.8.10 ifstream inFile(fileName.c_str());1>d:\users\txwtech ...

  3. matlab 向量操作作业

    写出下列语句的计算结果及作用 clear    清除所有变量 clc    清屏 A = [2 5 7 1 3 4];    创建行向量并赋值 odds = 1:2:length(A);    冒号操 ...

  4. C++ STL中vector(向量容器)使用简单介绍

    原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相 ...

  5. 【转】C++ Vector(向量容器)

    转自:https://blog.csdn.net/studentyyl/article/details/21177445 vector是一个线性顺序结构.相当于数组,但其大小可以不预先指定,并且自动扩 ...

  6. 【足迹C++primer】32、定制操作_2

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/cutter_point/article/details/32301839 定制操作_2 完整的big ...

  7. Eigen子矩阵操作

    1 子矩阵操作简介 子矩阵操作又称块操作,在矩阵运算中,子矩阵的提取和操作应用也十分广泛.因此Eigen中也提供了相关操作的方法.提取的子矩阵在操作过程中既可以用作左值也可以用作右值. 2 块操作的一 ...

  8. [OpenCV-Python] OpenCV 核心操作 部分 III

    部分 III核心操作 OpenCV-Python 中文教程(搬运)目录 9 图像的基础操作 目标 • 获取像素值并修改 • 获取图像的属性(信息) • 图像的 ROI() • 图像通道的拆分及合并几乎 ...

  9. R语言多元素向量

    使用冒号运算带有数值数据(数值的增加为1) # Creating a sequence from 5 to 13. v <- 5:13 print(v) # Creating a sequenc ...

随机推荐

  1. 【Networking】容器网络大观 && SDN 资料汇总

    SDNLAB技术分享(十五):容器网络大观   SDNLAB君• 16-06-17 •2957 人围观 编者按:本文系SDNLAB技术分享系列,本次分享来自SDN撕X群(群主:大猫猫)群直播,我们希望 ...

  2. oracle数据库高级应用之《触发器的建立》

    (一)oracle数据库触发器的建立 eg1 CREATE OR REPLACE TRIGGER TRIGGER_ON_TD_DEPARTMENT AFTER INSERT OR UPDATE OR ...

  3. Appium+Robotframework实现Android应用的自动化测试-4:AppiumLibrary介绍和安装

    Appium是个好东东,Android,iOS都支持,并且居然RobotFramework也支持Appium了,这就是本文要介绍的AppiumLibrary. 通过前面的文章大家知道可以使用多种语言来 ...

  4. Zookeeper集群服务部署

    Zookeeper是一个分布式.开源的分布式应用程序协调服务,是Google的Chubby的开源实现,也是和Hadoop.Hbase相互配合的重要组件,作用就是为分布式应用程序提供一致性服务,包括配置 ...

  5. MySQL中无GROUP BY直接HAVING的问题【转】

    本文来自网址: http://www.penglixun.com/tech/database/having_without_groupby_in_mysql.html 今天有同学给我反应,有一张表,i ...

  6. WebLogic部署

    1.抓取解压WAR包,放在相应目录下 2.登录部署,激活 http://jingyan.baidu.com/article/c74d6000650d470f6b595d72.html Linux环境中 ...

  7. AUTOSSH,ssh反向代理

    在本地机器   1)ssh-keygen   2)ls ~/.ssh/   应该有三个文件 id_rsa id_rsa.pub known_hosts   拷贝id_rsa.pub到远程服务器,然后在 ...

  8. HDU 4940 Destroy Transportation system(无源汇有上下界最大流)

    看不懂题解以及别人说的集合最多只有一个点..... 然后试了下题解的方法http://blog.sina.com.cn/s/blog_6bddecdc0102uzka.html 首先是无源汇有上下界最 ...

  9. C#中XmlTextWriter读写xml文件详细介绍(转)

    转自http://www.jb51.net/article/35230.htm   .NET中包含了很多支持XML的类,这些类使得程序员使用XML编程就如同理解XML文件一样简单.在这篇文章中,我将给 ...

  10. 最详细的 Android Toolbar 开发实践总结

    http://www.codeceo.com/article/android-toolbar-develop.html     参考此链接!