基础知识(十一)Eigen求解稀疏矩阵
Eigen这个库,早在研究生阶段的时候,就用到烂了,因为三维的图形算法经常要涉及到求解稀疏矩阵。然而工作一年都没碰到Eigen,突然今天要用到求解稀疏矩阵最小二乘方程组,变得有点陌生了,惭愧,因此简单记录一下,以便日后重新复制粘贴修改使用。
#include "Eigen/Sparse"
typedef Eigen::SparseMatrix<double> SparseMatrixType;#include <vector>
using namespace std;
vec CDepthRegression::Get_LightDirection()
{vec light;int fn = m_mesh->faces.size();typedef Eigen::Triplet<double> T;std::vector<T> tripletList;//稀疏矩阵的元素for (int i = 0; i < fn;i++){const TriMesh::Face &f = m_mesh->faces[i];vec v0 = m_mesh->vertices[f[0]];vec v1 = m_mesh->vertices[f[1]];vec v2 = m_mesh->vertices[f[2]];vec facenormal = (v2 - v1) CROSS(v0 - v2);facenormal = normalize(facenormal);for (int j = 0; j < 3;j++){tripletList.push_back(T(i,j, facenormal[j]));}}SparseMatrixType Ls(fn, 3);//矩阵的宽高Ls.setFromTriplets(tripletList.begin(), tripletList.end());//从Triplet中构建稀疏矩阵//最小二乘解超静定方程组SparseMatrixType ls_transpose = Ls.transpose();SparseMatrixType LsLs = ls_transpose* Ls;Eigen::VectorXd RHSPos;//超静定方程组右边RHSPos.resize(fn);RHSPos.setZero();for (int i = 0; i < fn;i++){float I = m_mesh->face_color[i];RHSPos[i] = I;}Eigen::SimplicialCholesky<SparseMatrixType>MatricesCholesky(LsLs);Eigen::VectorXd xyzRHS = ls_transpose*RHSPos;Eigen::Vector3d xyz = MatricesCholesky.solve(xyzRHS);return vec(xyz[0],xyz[1], xyz[2]);}
基础知识(十一)Eigen求解稀疏矩阵相关推荐
- Android学习之基础知识十一 —运用手机多媒体
一.使用通知(Notification) 通知(Notification)是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助 ...
- Linux面试必备基础知识(十一)——系统管理命令
目录 1. date命令 2. free 命令 3. kill 命令 4. ps 命令 5. rpm 命令 6. top 命令 7. yum 命令 1. date命令 显示或设定系统的日期与时间. 命 ...
- GAMS系列分享12—GAMS基础知识——模型和求解
介绍模型及求解的相关问题 目录 1,模型的分类 2,模型声明和定义语法 3,solve语句 4 有多个solve语句的程序 4.1一个简单的形式:文件中建立3个模型,并用3个solve语句进行求解. ...
- 【Redis基础知识 十一】Redis的高级数据结构
除了五种基本的Redis结构[Redis从入门到放弃系列 四]数据结构应用场景,我们这里总共聊三种:Bitmaps,HyperLogLog以及Geo三种数据模型. Bitmaps数据模型 计算机用二进 ...
- Golang 基础知识(十一.struct结构体)
struct结构体 1.定义 2.匿名结构体 3.键值对初始化 4.构造函数 4.1 (值)方法和接收者 4.2 (指针)方法和接受者 4.3 结构体的"继承 4.4 序列化与反序列化 4. ...
- ASP.NET Core基础知识(十一)【Host之Web 主机】
概述 .NET 应用配置和启动主机. 主机负责应用程序启动和生存期管理. 两个主机 API 可供使用: Web 主机 – 适用于托管 Web 应用. 通用主机(ASP.NET Core 2.1 或更高 ...
- PX4模块设计之四十一:I2C/SPI Bus Instance基础知识
PX4模块设计之四十一:I2C/SPI Bus Instance基础知识 1. 基础知识 2. 基础类和定义 2.1 ListNode类 2.2 List类 2.3 BusCLIArguments类 ...
- Android基础知识(二十一):Android五大存储之文件存储、Content Provider存储和网络存储
Android基础知识(二十一):Android五大存储之文件存储.Content Provider存储和网络存储 一.Android存储--持久化技术 数据持久化是指将那些内存中的瞬时数据保存到存储 ...
- 计算机基础知识与程序设计二,计算机基础与程序设计.doc
计算机基础与程序设计.doc (17页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 <计算机基础与稈序设计>是高等教冇H学考 ...
最新文章
- python画图程序飞机_Python海龟画图工具绘制叮当猫程序
- android studio api30 模拟器运行不了_iOS模拟器来了?但我们劝你不要轻易尝试
- SQL 判断表是否存在 数据表不存在是致命错误
- 1.在VS2010中文版中开发WP7程序
- [汇编] 002基础知识-CPU和寄存器
- 微信小程序js数组初始化_微信小程序学习Course 3-2 JS数组对象学习
- Flowable 数据库表结构 ACT_RE_DEPLOYMENT
- Android Audio代码分析2 - 函数getMinBufferSize
- 夏天面试男生穿什么_你今年夏天在做什么?
- Java基础之时间的友好显示
- 数学建模之matlab入门篇
- NLTK-004:加工原料文本
- 程序猿的办公桌都长啥样?
- Win11怎么创建系统映像?
- Android Studio App开发之循环试图RecyclerView,布局管理器LayoutManager、动态更新循环视图讲解及实战(附源码)
- 搭建DNS服务,正向解析和反向解析搭建DNS服务器
- Impossible n‘est pas français (Exploit) 答案
- c+语言基础教程pdf下载,C语言基础教程.PDF
- Java SE 8: 从入门到上瘾
- 机器学习与深度学习——通过knn算法分类鸢尾花数据集iris求出错误率并进行可视化
热门文章
- python paramiko使用_python paramiko 模块使用方法
- mysql 单表数据_Mysql--单表数据记录查询
- oracle创建job一年执行,Oracle快速创建定时job执行批量转储过程脚本参考案例
- python 抽样函数_python中resample函数实现重采样和降采样代码
- pc模式 华为mate30_华为Mate30国内发布,这篇可能是全网最全干货贴
- eclipse中对于Java虚拟机参数的设置与思考
- 有趣的面试题解 (2 )
- 微信小程序开发教程(六)配置——app.json、page.json详解
- 程序员的自我救赎---4.2:消息中心讲解与应用
- 【计算机视觉】期刊整理