OpenMesh 之向量操作
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)2 + (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 之向量操作的更多相关文章
- C++ code:向量操作之添加元素
读入一个文件aaa.txt的数据到向量中,文件中是一些整数(个数未知).要判断向量中的元素有多少个两两相等的数对. 代码如下: #include<iostream> #include< ...
- 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 ...
- matlab 向量操作作业
写出下列语句的计算结果及作用 clear 清除所有变量 clc 清屏 A = [2 5 7 1 3 4]; 创建行向量并赋值 odds = 1:2:length(A); 冒号操 ...
- C++ STL中vector(向量容器)使用简单介绍
原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相 ...
- 【转】C++ Vector(向量容器)
转自:https://blog.csdn.net/studentyyl/article/details/21177445 vector是一个线性顺序结构.相当于数组,但其大小可以不预先指定,并且自动扩 ...
- 【足迹C++primer】32、定制操作_2
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/cutter_point/article/details/32301839 定制操作_2 完整的big ...
- Eigen子矩阵操作
1 子矩阵操作简介 子矩阵操作又称块操作,在矩阵运算中,子矩阵的提取和操作应用也十分广泛.因此Eigen中也提供了相关操作的方法.提取的子矩阵在操作过程中既可以用作左值也可以用作右值. 2 块操作的一 ...
- [OpenCV-Python] OpenCV 核心操作 部分 III
部分 III核心操作 OpenCV-Python 中文教程(搬运)目录 9 图像的基础操作 目标 • 获取像素值并修改 • 获取图像的属性(信息) • 图像的 ROI() • 图像通道的拆分及合并几乎 ...
- R语言多元素向量
使用冒号运算带有数值数据(数值的增加为1) # Creating a sequence from 5 to 13. v <- 5:13 print(v) # Creating a sequenc ...
随机推荐
- 【GoLang】panic defer recover 深入理解
唉,只能说C程序员可以接受go的错误设计,相比java来说这个设计真的很差劲! 我认为知乎上说的比较中肯的: 1. The key lesson, however, is that errors ar ...
- Python之多线程
廖雪峰教程--- http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138683 ...
- Spring AOP基于配置文件的面向方法的切面
Spring AOP基于配置文件的面向方法的切面 Spring AOP根据执行的时间点可以分为around.before和after几种方式. around为方法前后均执行 before为方法前执行 ...
- hdu3709
枚举+数位dp 注意处理数字为0和1的情况. #include <cstdio> #include <cstring> using namespace std; #define ...
- Javascript 面向对象
面向对象语言的标识:类的概念. ECMAScript中没有类的概念,因此他的对象与基于类的语言中的对象有所不同. ECMA-262把对象定义为:无序属性的集合,其属性可以包含基本值.对象.函数.我们可 ...
- UVA 156 Ananagrams ---map
题目链接 题意:输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词.在判断是否满足条件时,字母不分大小写,但在输出时应保留输入中的大小写,按字典序进行排列( ...
- iOS block 的底层实现
其实swift 的闭包跟 OC的block 是一样一样的,学会了block,你swift里边的闭包就会无师自通. 参考:http://www.jianshu.com/p/e23078c11518 ht ...
- CentOS yum的详细使用方法
yum是什么yum = Yellow dog Updater, Modified主要功能是更方便的添加/删除/更新RPM包.它能自动解决包的倚赖性问题.它能便于管理大量系统的更新问题yum特点可以同时 ...
- jquery获得select option的值 和对select option的操作
jQuery获取Select元素,并选择的Text和Value: 1. $("#select_id").change(function(){//code...}); //为Se ...
- NPOI 1.2.4教程 –日期函数
//Excel中有非常丰富的日期处理函数,在NPOI中同样得到了很好的支持.如下图: using NPOI.HSSF.UserModel; using NPOI.HPSF; using NPOI.PO ...