Eigen 创建求解稀疏矩阵 保存方便日后使用
来源:互联网 发布:c语言graphics 编辑:程序博客网 时间:2024/06/05 00:47
#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]); }
阅读全文
0 0
- Eigen 创建求解稀疏矩阵 保存方便日后使用
- 基础知识(十一)Eigen求解稀疏矩阵
- Ubuntu下使用cholmod求解稀疏矩阵
- 使用UMFPACK求解大型稀疏矩阵方程
- Eigen保存矩阵
- Eigen教程5 - 求解稀疏线性方程组
- 数组创建Eigen矩阵
- 稀疏矩阵库umfpack和Eigen结合
- Eigen教程3 - 稀疏矩阵操作
- Eigen 稀疏矩阵LU分解解方程组
- Eigen 由稀疏矩阵生成三元组
- 整理一下上传组件,方便日后使用
- VS版Eigen库求解大型稀疏线性方程组
- Android屏蔽软键盘并且有光标显示。和关闭软键盘方法,保存下来方便日后使用
- Eigen教程4 - 稀疏矩阵快速参考指南
- Qt使用Eigen矩阵库
- 矩阵开源库Eigen的使用
- 稀疏矩阵求解的一点总结
- 分页Mybatis_PageHelper,最好在service里应用 PageHelper.startPage(num, size)
- 归并排序
- flex布局
- 顺序表应用5:有序顺序表归并
- Effective Java中文第四章第19节(个人渣翻)
- Eigen 创建求解稀疏矩阵 保存方便日后使用
- 调试时直接显示QString的字符值(包含windows和linux)
- [人工智能]回溯算法解数独
- getattr
- qt超强精美绘图控件
- MFC——ListControl控件的使用
- 仿去哪网酒店的地图:POI、定位、国际地图、导航、marker及其自定义infowindow
- nodejs实现文件下载功能,防止文本TXT类文件直接打开
- 微博轻量级RPC框架Motan