三.编程

1.代码

用的是中国科大傅孝明老师的框架:框架下载及配置运行

(1)在哪儿添加代码

梳理框架的结构后,在MeshViewerWidget.中添加求解曲率的函数,并在MainViewerWidget和surfcemeshprocessing中把这个函数连接起来并做个按钮
(可以追寻某一个按钮的调用过程)

(2)面积


求蓝色区域的面积
没有钝角的情况:
有钝角时,T=0.5∗a∗b∗sinθT=0.5*a*b*sin\thetaT=0.5∗a∗b∗sinθ

(3)高斯曲率


(4)平均曲率

平均曲率:Hi=0.5∗∣∣K(xi)∣∣Hi=0.5*||K(xi)||Hi=0.5∗∣∣K(xi)∣∣

2.可视化

参考:三角网格表面高斯曲率的计算与可视化
从这里了解了需要对高斯曲率归一化,归一化方法:数据归一化及三种方法,我用的是第一种,比较简单(后来看libigl库里的方法,也是用第一种方法对数据归一化)
然后给顶点加上了color属性,用libigl里的方法用高斯曲率给顶点赋颜色值

这里遇到了两个小问题:(1)修改不了顶点颜色
解决方法:后来发现关掉光照就可以了
不清楚是什么原因
(2)三角形网格内部颜色没有插值,每个三角形面片显示都是最后一个顶点的颜色值
解决方法:添加glShadeModel(GL_SMOOTH);
展示一下效果图:

3.libigl求解验证

libigl是一个简单的C ++几何处理库。libigl具有广泛的功能,包括构造稀疏的离散微分几何算子和有限元矩阵,例如切线拉普拉斯和对角质量矩阵,简单的基于面和边的拓扑数据结构,用于OpenGL和GLSL的网格查看实用程序以及许多核心功能矩阵处理函数,使Eigen感觉更像MATLAB。
libigl教程的202是一个求高斯曲率的例子,教程的203应该是求平均曲率的例子,运行这两个例子,比较数据和效果图即可。教程链接:libigl教程
网上关于运行libigl教程例子的博客基本都是用cmake编译,我开始也是照着网上的方式用cmake编译,试了不同的方法,但总是失败
于是,新建了一个项目,把教程例子的代码复制过来,然后根据报错配置这个项目,主要有:
(1)配置Eigen库:下载Eigen库,把Eigen文件夹include进来
参考:Eigen在VS2017下的安装与使用
(2)GLFW和GLAD:参考一步一步教你在VS 2017中配置OpenGL,这里又有用到cmake
对GLFW和GLAD的理解:想要使用opengl,有三种配置环境的方法:opengl的五个文件(最经典),GLFW+GLAD,GLFW+GLEW
环境配置成功后,再解决一些小问题(解决方法基本都可以搜得到),就可以跑通高斯曲率和平均曲率例子的代码了
结果图:

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

  1. 输入两个数、用python求他们的和_从键盘上输入俩个实型数,编程求它们的和差积商,要求输出时,保留两位小数C语言编程题:从键盘上输入两个...

    从键盘上输入俩个实型数,编程求它们的和差积商,要求输出时,保留两位小数 C语言编程题:从键盘上输入两个 www.zhiqu.org     时间: 2020-11-23 参考代码: #includev ...

  2. 代写SOFTENG 370 Operating Systems课设、代做C/C++ 留学生作业、代写c/c++代码、代写C/C++编程作业...

    代写SOFTENG 370 Operating Systems课设.代做C/C++ 留学生作业.代写c/c++代码.代写C/C++编程作业 SOFTENG 370 Operating Systems ...

  3. matlab d=sqrt((i-m)^2+(j-n)^2);,硕士研究生《数字图像处理》作业

    硕士研究生<数字图像处理>作业 研究生<数字图像处理>考试 1. 编写程序完成不同滤波器的图像频域降噪和边缘增强的算法并进行比较,得出结论. 图像频域降噪的实验原理与算法分析: ...

  4. Java课程大作业设计:实现联网对战、实时聊天、多线程编程的五子棋项目

    前言 本项目是笔者和同学大二下Java课的时候的课程设计项目,该五子棋游戏的客户端可以实现联网对战.实时聊天.自定义昵称.对在线玩家并发出对战邀请.悔棋.撤回聊天消息.逃跑等多种功能,而服务端可以看到 ...

  5. 【C语言】编程实现输出矩阵上/下三角的数值。要求:输入一个正整数n和n阶矩阵的数值,打印输出矩阵、下三角和上三角的数值。

    [问题描述]编程实现输出矩阵上/下三角的数值.要求:输入一个正整数n和n阶矩阵的数值,打印输出矩阵.下三角和上三角的数值. [输入输出样例] [样例说明] 输入提示符中冒号为英文符号,后面无空格. 输 ...

  6. 数字信号处理大作业——基于matlab R2019a的男声变女声资料汇总与代码

    @数字信号处理大作业--基于matlab R2019a的男声变女声资料汇总与代码 概述 参考了很多前人的资料,发现很多函数已经过时了,而且从我通过VIP下载的代码来看,代码的逻辑不是很清晰,废话也多, ...

  7. 数字图像处理——大作业 基于车道信息的违法车辆车牌识别

    数字图像处理--大作业 基于车道信息的违法车辆车牌识别 一.车牌识别研究现状与分析 二.车牌识别算法原理 2.1 车牌定位 2.1.1 基于RGB阈值的车牌区域初定位 2.1.2 基于数学形态学的车牌 ...

  8. 内存自source开始有20个数字、大写字母、小写字母的混合串(比如:1234567890abceFGHIJ)编程将其中的数字符号挑选出来存储到dst开始的内存中,并将结果显示到CRT上。

    内存自source开始有20个数字.大写字母.小写字母的混合串(比如:1234567890abceFGHIJ)编程将其中的数字符号挑选出来存储到dst开始的内存中,并将结果显示到CRT上. (扩展A: ...

  9. 数字几何之笛卡儿的法国良心存在时间谭

    数字几何之笛卡儿的法国良心存在时间谭 谭理事 "你还有没有良心?" 这是中国人基于自己的道德标准,即在汉字文化中无所不在的儒释道的标准,对曾在同一张桌子上吃饭却对自己不友好的人发出 ...

最新文章

  1. Mysql 索引优化分析_如何优化MySQL的性能?从索引方面优化案例分析
  2. java01背包问题算法_经典动态规划--01背包问题
  3. Nginx负载均衡监控节点状态
  4. 【干货】产品经理常忽略的用户研究的四大误区
  5. __attribute__函数的作用
  6. 反射_Class对象功能_获取Method
  7. winowsformshost 的构造函数执行符合指定的绑定约束的_C# 应该允许为 struct 定义无参构造函数...
  8. 每天一小时python官方文档学习(六)————循环和条件控制的进阶用法
  9. 查看Java 版本tls_如何在Java中设置TLS1.2版本
  10. Freetype字体引擎分析与指南(中文版翻译)
  11. oracle 查询表最大值,ORA-1653报错 调整oracle数据表的最大值
  12. ios旧版本app网站_你的iPhone还需要降级吗?深度分析:苹果为什么不开放iOS降级!...
  13. 逛VeryCD 无意间看到来自JavaAmg77的总结性忠告 和大家分享一下
  14. 基于网络中心性的计算机网络脆弱性评估方法
  15. 听说你立志要做数据分析,不如先听听老司机的建议?
  16. linux的常用命令行
  17. POI生成word文档,再通过spire.doc.free 实现word转pdf
  18. 一线程序员与二三线城市的困局,他们不能没有性生活
  19. 《机器学习实战 学习笔记》(二):端到端的机器学习项目
  20. webUpload上传附件

热门文章

  1. 鲜花海报设计没有思路?看这里吧!
  2. Ubuntu系统下实时监控GPU的温度
  3. https://en.wikipedia.org/wiki/Linux Foundation
  4. RToax / fedora-coreos-config: [sysroot.mount] mount: wrong fs type, bad option, bad superblock on /
  5. Linux开机启动过程(7):内核执行入口点
  6. Linux内存管理:kmemcheck介绍
  7. jemalloc内存分配器简介
  8. OpenVDB:梦工厂的有效存储和处理离散在三维网格上的稀疏体积数据C++库
  9. 一种基于红黑树和timerfd的用户态定时器
  10. Matlab画箭头arrow.m