C++实现网格水印之调试笔记(三)—— 初有结果

错误:

error C2338: THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD

这种错误不会直接定位到行,要自己慢慢看代码,找出不正确的访问。

原因:使用[]访问引起的错误,eigen中矩阵的访问不用用[]

解决方法:将[ ]改为( )

修改错误之后,编译通过了,但运行时会中断。

调试时,遇到代码不会跳转的问题

当在调试模式下代码运行到eigenDef.calLapMatrix()时,不会跳入到函数里面运行,在vs中设置断点后,断点一致无法命中,断点的红心原点编程一个空心的黄色,还有一个感叹号

解决:在工具 à 选项 à 调试 à 常规中去掉"要求源文件与原始版本完全匹配"前面的勾

但是修改了这个设置后可能会导致修改过vs代码后,即使重新生成,但运行的结果仍然是上次的结果,这个莫名其妙的问题一度困扰了我好久,在师兄的帮助下,了解到是pdb的问题,然后

解决:这个时候可以常识将代码格式化,快捷键为:ctrl + k 然后 ctrl + f

错误:R6010 –abort() has been called

错误发生在,给V_matrix赋值的时候

原因是矩阵在使用之前没有初始化大小

解决:可以使用下面的语句设置矩阵大小同时将其初始值设置为0

错误:matlab代码中的错误提示信息如下

对应的matlab代码如下:

这个问题调试了好久都没找出错误原因,后来把文件复制了一份,然后修改了文件名和函数名以及输出的矩阵名,然后就可以了,也许是matrix不能用作变量名和函数名?

解决:修改文件名和函数名

/////////////////////////////////////////////////////////////////////////////////

修正了上述错误之后,得到的结果和预期还是差很多,所以要开始修改逻辑上的一些错误了。

初步估计是在解方程的时候出现了错误。准备检查是否是矩阵赋值不正确。

左边:前10个顶点坐标, 右边:传入matlab中的顶点坐标

下面的赋值语句是修改后的结果,修改后,顶点数据的赋值正确了。

以及E矩阵:(图片为正确结果)

R矩阵:

修改后得到的结果

输入:

输出:

以及前10个顶点修改前后坐标值:

肉眼已经看不太出模型有什么变换了

时间: 2024-10-08 04:01:17

C++实现网格水印之调试笔记(三)—— 初有结果的相关文章

C++实现网格水印之调试笔记(六)—— 提取完成

昨天在修改了可以调试出来的错误之后,提取出的水印和嵌入的仍然相去甚远.这个时候我觉得有必要整理一下嵌入和提取的整个过程. 嵌入过程: Step1,嵌入的时候对网格的拉普拉斯矩阵L进行特征值分解,得到特征值和特征向量: Step2,将特征向量单位化: Step3,解方程:R . E = V(1),E,V已知求出R 其中R是频谱系数矩阵,E是单位化的特征向量矩阵,V是顶点坐标矩阵 Step4,修改R的R',其中R'= R + △ (2),R,△已知,求R' Step5,根据矩阵方程(1)求出V',

C++实现网格水印之调试笔记(六)——补充

调用matlab生成的网格水印特征向量矩阵 ? 从文件中读取的原始网格的特征向量矩阵 ? 好吧,之前得出的结果不正确是因为代码写错了.因为实现论文中的提取方案时代码写错了,自己想了另外一个方法,结果方向两者在本质上是一样的.

C++实现网格水印之调试笔记(五)—— 提取出错

在实现提取水印的过程中,遇到了一些问题 首先还是根据论文中的思路来梳理一下整个提取流程 读入两个模型,一个原始模型ori_mesh, 一个水印模型wm_mesh. 将两个模型对齐(即放在同一个坐标系下) 分别计算两个模型的频谱系数,记ori_mesh频谱系数为Rs, Rt, Ru, 记wm_mesh的频谱系数为wRs, wRt, wRu. 根据下式计算Qj 再根据下式计算出嵌入水印的符号,这里相当于得到的是嵌入的水印b',只是记为了aj 最后根据下式得出原始水印序列b ? 根据上述步骤,我一开始

C++实现网格水印之调试笔记(四)—— 完成嵌入

接下来的问题是,当模型是对称的时候,结果是符合预期的,但是当模型是不对称的时候,结果是错误的,如下: 输入: 顶点:233 输出: 这又是什么鬼...,我的马呢!!! 看来逻辑上还是有错误 注意这时候C++输出的调试信息如下: 错误提示为:Input to EIG must not contain NaN,然后是一堆烫烫烫... 还有一个提示是: Matrix is close to singular or badly scaled. Results may be inaccurate. RCO

加壳学习笔记(三)-简单的脱壳思路&调试思路

首先一些windows的常用API: GetWindowTextA:以ASCII的形式的输入框 GetWindowTextW:以Unicaode宽字符的输入框 GetDlgItemTextA:以ASCII的形式的输入框 GetDlgItemTextW:以Unicaode宽字符的输入框 这些函数在使用的时候会有些参数提前入栈,如这函数要求的参数是字符串数目.还有大小写啦之类的东西,这些东西是要在调用该函数之前入栈,也就是依次push,就是说一般前面几个push接着一个call,那前面的push可能

【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠

碰撞与休眠 上一篇笔记说过,当给予游戏对象刚体这个组件以后,那么这个组件将存在碰撞的可能性.一旦刚体开始运动,那么系统方法便会监视刚体的碰撞状态.一般刚体的碰撞分为三种:进入碰撞,碰撞中,和碰撞结束.关于休眠可以理解成为让游戏对象变成静止状态.如果给某个游戏对象休眠的状态,那么这个物体将立马静止,不再运动. 碰撞 首先学习下碰撞几个重要的方法: OnCollisionEnter(  ):刚体开始接触的时候,立即调用. OnCollisionStay(  ):碰撞过程中,每帧都会调用此方法,直到撞

VSTO学习笔记(三) 开发Office 2010 64位COM加载项

原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(Automation Executables) 2.Office加载项(COM or Excel Add-In) 3.Office文档代码或模板(Code Behind an Office Document or Template) 4.Office 智能标签(Smart Tags) 本次我们将学习使

JavaScript特效(调试笔记)

JavaScript特效 一.在网页上显示当前的时间日期,例如:“2016年3月26日 星期六”. js源代码: 1 function getTime() { 2 var today = new Date(); //返回当日的日期和时间. 3 var year = today.getFullYear(); //获得当前的年份 4 var month = today.getMonth() + 1; //获得当前的月份 5 var day = today.getDate(); //获得当前的日期 6

UE4学习笔记(三): 为什么使用C++替代UnrealScript?

原文链接: https://forums.unrealengine.com/showthread.php?2574-Why-C-for-Unreal-4&p=16252&viewfull=1#post16252 之前的三代Unreal引擎中都包括了一种叫UnrealScript的脚本语言, 用它来写游戏玩法简直太方便了, 根本不用去接触复杂的C++引擎. 尽管脚本十分受新手的欢迎, 但它却成为了创新和公布的障碍. 在Unreal引擎成长的过程中, 我们不断地踩到这种坑. 所以在2011年,