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求解稀疏矩阵相关推荐

  1. Android学习之基础知识十一 —运用手机多媒体

    一.使用通知(Notification) 通知(Notification)是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助 ...

  2. Linux面试必备基础知识(十一)——系统管理命令

    目录 1. date命令 2. free 命令 3. kill 命令 4. ps 命令 5. rpm 命令 6. top 命令 7. yum 命令 1. date命令 显示或设定系统的日期与时间. 命 ...

  3. GAMS系列分享12—GAMS基础知识——模型和求解

    介绍模型及求解的相关问题 目录 1,模型的分类 2,模型声明和定义语法 3,solve语句 4 有多个solve语句的程序 4.1一个简单的形式:文件中建立3个模型,并用3个solve语句进行求解. ...

  4. 【Redis基础知识 十一】Redis的高级数据结构

    除了五种基本的Redis结构[Redis从入门到放弃系列 四]数据结构应用场景,我们这里总共聊三种:Bitmaps,HyperLogLog以及Geo三种数据模型. Bitmaps数据模型 计算机用二进 ...

  5. Golang 基础知识(十一.struct结构体)

    struct结构体 1.定义 2.匿名结构体 3.键值对初始化 4.构造函数 4.1 (值)方法和接收者 4.2 (指针)方法和接受者 4.3 结构体的"继承 4.4 序列化与反序列化 4. ...

  6. ASP.NET Core基础知识(十一)【Host之Web 主机】

    概述 .NET 应用配置和启动主机. 主机负责应用程序启动和生存期管理. 两个主机 API 可供使用: Web 主机 – 适用于托管 Web 应用. 通用主机(ASP.NET Core 2.1 或更高 ...

  7. PX4模块设计之四十一:I2C/SPI Bus Instance基础知识

    PX4模块设计之四十一:I2C/SPI Bus Instance基础知识 1. 基础知识 2. 基础类和定义 2.1 ListNode类 2.2 List类 2.3 BusCLIArguments类 ...

  8. Android基础知识(二十一):Android五大存储之文件存储、Content Provider存储和网络存储

    Android基础知识(二十一):Android五大存储之文件存储.Content Provider存储和网络存储 一.Android存储--持久化技术 数据持久化是指将那些内存中的瞬时数据保存到存储 ...

  9. 计算机基础知识与程序设计二,计算机基础与程序设计.doc

    计算机基础与程序设计.doc (17页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 <计算机基础与稈序设计>是高等教冇H学考 ...

最新文章

  1. python画图程序飞机_Python海龟画图工具绘制叮当猫程序
  2. android studio api30 模拟器运行不了_iOS模拟器来了?但我们劝你不要轻易尝试
  3. SQL 判断表是否存在 数据表不存在是致命错误
  4. 1.在VS2010中文版中开发WP7程序
  5. [汇编] 002基础知识-CPU和寄存器
  6. 微信小程序js数组初始化_微信小程序学习Course 3-2 JS数组对象学习
  7. Flowable 数据库表结构 ACT_RE_DEPLOYMENT
  8. Android Audio代码分析2 - 函数getMinBufferSize
  9. 夏天面试男生穿什么_你今年夏天在做什么?
  10. Java基础之时间的友好显示
  11. 数学建模之matlab入门篇
  12. NLTK-004:加工原料文本
  13. 程序猿的办公桌都长啥样?
  14. Win11怎么创建系统映像?
  15. Android Studio App开发之循环试图RecyclerView,布局管理器LayoutManager、动态更新循环视图讲解及实战(附源码)
  16. 搭建DNS服务,正向解析和反向解析搭建DNS服务器
  17. Impossible n‘est pas français (Exploit) 答案
  18. c+语言基础教程pdf下载,C语言基础教程.PDF
  19. Java SE 8: 从入门到上瘾
  20. 机器学习与深度学习——通过knn算法分类鸢尾花数据集iris求出错误率并进行可视化

热门文章

  1. python paramiko使用_python paramiko 模块使用方法
  2. mysql 单表数据_Mysql--单表数据记录查询
  3. oracle创建job一年执行,Oracle快速创建定时job执行批量转储过程脚本参考案例
  4. python 抽样函数_python中resample函数实现重采样和降采样代码
  5. pc模式 华为mate30_华为Mate30国内发布,这篇可能是全网最全干货贴
  6. eclipse中对于Java虚拟机参数的设置与思考
  7. 有趣的面试题解 (2 )
  8. 微信小程序开发教程(六)配置——app.json、page.json详解
  9. 程序员的自我救赎---4.2:消息中心讲解与应用
  10. 【计算机视觉】期刊整理