libigl是一个很方便的几何网格处理库

可以计算出Gaussian Curvature、Principle Curvature等基础信息。

python 基础代码如下:

from scipy.sparse.linalg import spsolve
import igl
import os
import numpy as np
import igl
import scipy as sp
from meshplot import plot, subplot, interact
import meshplot
meshplot.jupyter()
meshplot.offline()

v, f = igl.read_triangle_mesh("data/******.obj")

l = igl.cotmatrix(v, f)

n = igl.per_vertex_normals(v, f)*0.5+0.5
c = np.linalg.norm(n, axis=1)

vs = [v]
cs = [c]
for i in range(10):
    m = igl.massmatrix(v, f, igl.MASSMATRIX_TYPE_BARYCENTRIC)
    s = (m - 0.001 * l)
    b = m.dot(v)
    v = spsolve(s, m.dot(v))
    n = igl.per_vertex_normals(v, f)*0.5+0.5
    c = np.linalg.norm(n, axis=1)
    vs.append(v)
    cs.append(c)

# plot(v, f)
# plot(vs[0], f, c, shading={"wireframe": False}, s=[1, 4, 0])
p = subplot(vs[0], f, c, shading={"wireframe": False}, s=[1, 4, 0])
subplot(vs[3], f, c, shading={"wireframe": False}, s=[1, 4, 1], data=p)
subplot(vs[6], f, c, shading={"wireframe": False}, s=[1, 4, 2], data=p)
subplot(vs[9], f, c, shading={"wireframe": False}, s=[1, 4, 3], data=p)
p.save("subplot.html")
# @interact(level=(0, 9))
# def mcf(level=0):
#     p.update_object(vertices=vs[level], colors=cs[level])
k = igl.gaussian_curvature(v, f)
p = plot(v, f, k, return_plot=True)
p.save("gaussian_curvature.html")

m = igl.massmatrix(v, f, igl.MASSMATRIX_TYPE_VORONOI)
minv = sp.sparse.diags(1 / m.diagonal())
kn = minv.dot(k)
p = plot(v, f, kn, return_plot=True)
p.save("igl.massmatrix2222.html")

l = igl.cotmatrix(v, f)
m = igl.massmatrix(v, f, igl.MASSMATRIX_TYPE_VORONOI)
minv = sp.sparse.diags(1 / m.diagonal())
hn = -minv.dot(l.dot(v))
h = np.linalg.norm(hn, axis=1)
p = plot(v, f, h, return_plot=True)
p.save("igl.massmatrix.html")

v1, v2, k1, k2 = igl.principal_curvature(v, f)
h2 = 0.5 * (k1 + k2)
p = plot(v, f, h2, shading={"wireframe": False}, return_plot=True)
p.save("principal_curvature.html")

avg = igl.avg_edge_length(v, f) / 2.0
p.add_lines(v + v1 * avg, v - v1 * avg, shading={"line_color": "red"})
p.add_lines(v + v2 * avg, v - v2 * avg, shading={"line_color": "green"})
p.save("principal_curvature_line.html")

## Select a vertex from which the distances should be calculated
vs = np.array([0])
##All vertices are the targets
vt = np.arange(v.shape[0])
d = igl.exact_geodesic(v, f, vs, vt)#, fs, ft)
strip_size = 0.02
##The function should be 1 on each integer coordinate
c = np.abs(np.sin((d / strip_size * np.pi)))
p = plot(v, f, c, shading={"wireframe": False}, return_plot=True)
p.save("exact_geodesic.html")

import pdb
pdb.set_trace()

igl或者libigl库的使用相关推荐

  1. 学习安装libigl库

    折腾了差不多一天,终于可以编译成功libigl库了. 本人使用vs2015编译GitHub下的libigl开源库,其中遇到了不少的问题,现在将编译的完整过程记录下来,以免以后忘记了,有表述不清或者写不 ...

  2. 利用PCL库从点云数据生成深度图像及关键点提取

    利用PCL库从点云数据生成生成深度图像及关键点提取 利用PCL库从点云数据生成深度图像及关键点提取 本想利用标准点云数据库分割成若干块,利用标准点云数据生成深度图像作为数据库用来验证算法,目前效果不是 ...

  3. 使用CMake编译Libigl错误问题解决方法

    所编译环境:win10.VS2015 X64 Libigl,所编译时遇到的问题: error: could not find git for clone of eigen-download 官网下载安 ...

  4. 基于RBF函数的点云孔洞修补

    文章目录 一.简介 二.实现代码 三.配置工作 四.执行效果 四.参考资料 一.简介 之前无意中看到这样一种点云孔洞修补方法,感觉很有意思,就下载了作者的源码看看效果,具体流程如下所述: 1.首先,我 ...

  5. 数字几何处理作业1:编程实现三角网格上高斯曲率和平均曲率的计算编程部分

    三.编程 1.代码 用的是中国科大傅孝明老师的框架:框架下载及配置运行 (1)在哪儿添加代码 梳理框架的结构后,在MeshViewerWidget.中添加求解曲率的函数,并在MainViewerWid ...

  6. Windows API参考大全

    第一章 Win32 API概论 1.1为什么使用 Wu32 API 在Windows程序设计领域处于发展初期时,Windows程序员可使用的编程工具唯有API 函数.这些函数在程序员手中犹如" ...

  7. libigl第五章-参数化

    在计算机图形学中,我们将表面参数化表示为从表面到 R2R^2R2 .它通常由网格的每个顶点的一组新的 2D 坐标编码(并且可能还通过与原始曲面的面一一对应的一组新面)请注意,此定义与经典微分几何定义相 ...

  8. 【CG】汇总开源的三维图形/计算几何/CAD算法库

    目录 Computer Graphics Group at RWTH Aachen OpenFlipper OpenMesh OpenVolumeMesh [IceSL]ADVANCED MODELI ...

  9. 3D网格布尔运算开源库

    3D网格布尔运算开源库 3D网格布尔运算开源库 网格的布尔运算广泛应用于建筑.医学导航软件.游戏和电影动画等应用场景中,3D模型的编辑软件,3D Max.Maya以及Blender就广泛应用网格的布尔 ...

最新文章

  1. 第13章:项目合同管理--章节真题
  2. 两台linux之间传递文件
  3. 将一个数组中的值按逆序重新排放。_六十五、下一个更大的数系列,单调栈解决方法...
  4. 基于全注解的SpringMVC+Spring4.2+hibernate4.3框架搭建
  5. Modelsim-altera 仿真 顶层原理图的解决办法
  6. BZOJ 3238: [Ahoi2013]差异 [后缀数组 单调栈]
  7. 使用官网支持工具制作富士施乐打印机一键安装的程序
  8. c语言编译器 代码优化,C语言 之编译器优化
  9. 基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制
  10. google guava Joiner 示列
  11. VB实现移动鼠标产生粒子效果
  12. 笨方法学python3怎么样_笨办法学Python3
  13. 如何用python画笑脸QQ表情——turtle库实践
  14. 解决npm不是内部或外部命令
  15. 4G物联网网关可接入ONVIF/RTSP 摄像头实现rtmp推流
  16. 仓储委外加工/周转加工
  17. 小试牛刀:用python写欢乐斗牛
  18. YOLOv7改进之二十二:涨点神器——引入递归门控卷积(gnConv)
  19. 福建程序员行业技术微信交流群,福建的小伙伴看过来了!
  20. 前端vue基于onlyoffice实现在线预览

热门文章

  1. 数据上链——区块链相关概念
  2. H5前端输入和展示 表情 三种解决方案
  3. 2018苹果开发者技术支持新规
  4. python绘制相频特性曲线_数据分析之Matplotlib和机器学习基础
  5. 《手把手教你读财报》- 读书总结
  6. App Store 商业模式
  7. 一键智能抠图-原理与实现
  8. poj3104(二分判断可行性)
  9. 录制PPT课件哪个录屏软件好?这3款值得收藏
  10. 关于“.”与“->”使用的区别