Help
RSS
API
Feed
Maltego
Contact
Domain > blog.edenmo.top
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-02-14
116.211.128.101
(
ClassC
)
2025-10-23
27.155.113.101
(
ClassC
)
Port 80
HTTP/1.1 200 OKDate: Thu, 23 Oct 2025 11:13:25 GMTContent-Type: text/htmlContent-Length: 56422Connection: keep-aliveVary: Accept-EncodingLast-Modified: Tue, 14 Oct 2025 17:20:58 GMTVary: Accept-EncodingETag: 68ee867a-dc66Accept-Ranges: bytesX-Via-JSL: 437ea6e,-Set-Cookie: __jsluid_h94107cecb0dd16d165ac5b83766b70e7; max-age31536000; path/; HttpOnlyCache-Control: max-age10800Expires: Thu, 23 Oct 2025 14:13:25 GMTX-Cache: miss !DOCTYPE html>html langzh-CN data-themelight>head>meta charsetUTF-8>meta http-equivX-UA-Compatible contentIEedge>meta nameviewport contentwidthdevice-width, initial-scale1.0,viewport-fitcover>title>Eden Mo Blog - 月光有人捞起,有人瞧不起/title>meta nameauthor contentEden>meta namecopyright contentEden>meta nameformat-detection contenttelephoneno>meta nametheme-color content#ffffff>meta namedescription content不做前端所以博客不漂亮,纯免费授权码来自公众号:摸妖猫>meta propertyog:type contentwebsite>meta propertyog:title contentEden Mo Blog>meta propertyog:url contenthttps://blog.edenmo.top/index.html>meta propertyog:site_name contentEden Mo Blog>meta propertyog:description content不做前端所以博客不漂亮,纯免费授权码来自公众号:摸妖猫>meta propertyog:locale contentzh_CN>meta propertyog:image contenthttps://blog.edenmo.top/name.png>meta propertyarticle:author contentEden>meta nametwitter:card contentsummary>meta nametwitter:image contenthttps://blog.edenmo.top/name.png>link relshortcut icon hrefhttps://blog.edenmo.top/img/icon.ico>link relcanonical hrefhttps://blog.edenmo.top/index.html>link relpreconnect href//cdn.jsdelivr.net/>link relpreconnect href//busuanzi.ibruce.info/>link relstylesheet href/css/index.css>link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css>link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.min.css mediaprint onloadthis.mediaall>script>const GLOBAL_CONFIG { root: /, algolia: undefined, localSearch: {path:/search.xml,preload:false,top_n_per_article:1,unescape:false,languages:{hits_empty:找不到您查询的内容:${query},hits_stats:共找到 ${hits} 篇文章}}, translate: undefined, noticeOutdate: undefined, highlight: {plugin:highlight.js,highlightCopy:true,highlightLang:true,highlightHeightLimit:false}, copy: { success: 复制成功, error: 复制错误, noSupport: 浏览器不支持 }, relativeDate: { homepage: false, post: false }, runtime: , dateSuffix: { just: 刚刚, min: 分钟前, hour: 小时前, day: 天前, month: 个月前 }, copyright: {limitCount:800,languages:{author:作者: Eden,link:链接: ,source:来源: Eden Mo Blog,info:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。}}, lightbox: fancybox, Snackbar: undefined, infinitegrid: { js: https://cdn.jsdelivr.net/npm/@egjs/infinitegrid/dist/infinitegrid.min.js, buttonText: 加载更多 }, isPhotoFigcaption: false, islazyload: false, isAnchor: false, percent: { toc: true, rightside: false, }, autoDarkmode: false}/script>script idconfig-diff>var GLOBAL_CONFIG_SITE { title: Eden Mo Blog, isPost: false, isHome: true, isHighlightShrink: false, isToc: false, postUpdate: 2025-10-15 01:20:39}/script>script>(win>{ win.saveToLocal { set: (key, value, ttl) > { if (ttl 0) return const now Date.now() const expiry now + ttl * 86400000 const item { value, expiry } localStorage.setItem(key, JSON.stringify(item)) }, get: key > { const itemStr localStorage.getItem(key) if (!itemStr) { return undefined } const item JSON.parse(itemStr) const now Date.now() if (now > item.expiry) { localStorage.removeItem(key) return undefined } return item.value } } win.getScript (url, attr {}) > new Promise((resolve, reject) > { const script document.createElement(script) script.src url script.async true script.onerror reject script.onload script.onreadystatechange function() { const loadState this.readyState if (loadState && loadState ! loaded && loadState ! complete) return script.onload script.onreadystatechange null resolve() } Object.keys(attr).forEach(key > { script.setAttribute(key, attrkey) }) document.head.appendChild(script) }) win.getCSS (url, id false) > new Promise((resolve, reject) > { const link document.createElement(link) link.rel stylesheet link.href url if (id) link.id id link.onerror reject link.onload link.onreadystatechange function() { const loadState this.readyState if (loadState && loadState ! loaded && loadState ! complete) return link.onload link.onreadystatechange null resolve() } document.head.appendChild(link) }) win.activateDarkMode () > { document.documentElement.setAttribute(data-theme, dark) if (document.querySelector(metanametheme-color) ! null) { document.querySelector(metanametheme-color).setAttribute(content, #0d0d0d) } } win.activateLightMode () > { document.documentElement.setAttribute(data-theme, light) if (document.querySelector(metanametheme-color) ! null) { document.querySelector(metanametheme-color).setAttribute(content, #ffffff) } } const t saveToLocal.get(theme) if (t dark) activateDarkMode() else if (t light) activateLightMode() const asideStatus saveToLocal.get(aside-status) if (asideStatus ! undefined) { if (asideStatus hide) { document.documentElement.classList.add(hide-aside) } else { document.documentElement.classList.remove(hide-aside) } } const detectApple () > { if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){ document.documentElement.classList.add(apple) } } detectApple() })(window)/script>link relstylesheet href/css/background_opa.css>meta namegenerator contentHexo 6.3.0>style>mjx-containerjaxSVG { direction: ltr;}mjx-containerjaxSVG > svg { overflow: visible;}mjx-containerjaxSVGdisplaytrue { display: block; text-align: center; margin: 1em 0;}mjx-containerjaxSVGjustifyleft { text-align: left;}mjx-containerjaxSVGjustifyright { text-align: right;}gdata-mml-nodemerror > g { fill: red; stroke: red;}gdata-mml-nodemerror > rectdata-background { fill: yellow; stroke: none;}gdata-mml-nodemtable > linedata-line { stroke-width: 70px; fill: none;}gdata-mml-nodemtable > rectdata-frame { stroke-width: 70px; fill: none;}gdata-mml-nodemtable > .mjx-dashed { stroke-dasharray: 140;}gdata-mml-nodemtable > .mjx-dotted { stroke-linecap: round; stroke-dasharray: 0,140;}gdata-mml-nodemtable > svg { overflow: visible;}jaxSVG mjx-tool { display: inline-block; position: relative; width: 0; height: 0;}jaxSVG mjx-tool > mjx-tip { position: absolute; top: 0; left: 0;}mjx-tool > mjx-tip { display: inline-block; padding: .2em; border: 1px solid #888; font-size: 70%; background-color: #F8F8F8; color: black; box-shadow: 2px 2px 5px #AAAAAA;}gdata-mml-nodemactiondata-toggle { cursor: pointer;}mjx-status { display: block; position: fixed; left: 1em; bottom: 1em; min-width: 25%; padding: .2em .4em; border: 1px solid #888; font-size: 90%; background-color: #F8F8F8; color: black;}foreignObjectdata-mjx-xml { font-family: initial; line-height: normal; overflow: visible;}.MathJax path { stroke-width: 3;}mjx-containerdisplaytrue { overflow: auto hidden;}mjx-containerdisplaytrue + br { display: none;}/style>/head>body>div idweb_bg>/div>div idsidebar>div idmenu-mask>/div>div idsidebar-menus>div classavatar-img is-center>img srchttps://blog.edenmo.top/name.png onerroronerrornull;src/img/friend_404.gif altavatar/>/div>div classsidebar-site-data site-data is-center>a href/archives/>div classheadline>文章/div>div classlength-num>130/div>/a>a href/tags/>div classheadline>标签/div>div classlength-num>58/div>/a>a href/categories/>div classheadline>分类/div>div classlength-num>37/div>/a>/div>hr classcustom-hr/>div classmenus_items>div classmenus_item>a classsite-page href/>i classfa-fw fas fa-home>/i>span> Home/span>/a>/div>div classmenus_item>a classsite-page href/tags/>i classfa-fw fas fa-tags>/i>span> Tags/span>/a>/div>div classmenus_item>a classsite-page href/categories/>i classfa-fw fas fa-folder-open>/i>span> Categories/span>/a>/div>div classmenus_item>a classsite-page href/Music/>i classfa-fw fas fa-music>/i>span> Music/span>/a>/div>div classmenus_item>a classsite-page href/LiveShow/>i classfa-fw fas fa-music>/i>span> 港乐Live Show/span>/a>/div>/div>/div>/div>div classpage idbody-wrap>header classfull_page idpage-header stylebackground-image: url(https://blog.edenmo.top/cover2.png)>nav idnav>span idblog-info>a href/ titleEden Mo Blog>span classsite-name>Eden Mo Blog/span>/a>/span>div idmenus>div idsearch-button>a classsite-page social-icon search hrefjavascript:void(0);>i classfas fa-search fa-fw>/i>span> 搜索/span>/a>/div>div classmenus_items>div classmenus_item>a classsite-page href/>i classfa-fw fas fa-home>/i>span> Home/span>/a>/div>div classmenus_item>a classsite-page href/tags/>i classfa-fw fas fa-tags>/i>span> Tags/span>/a>/div>div classmenus_item>a classsite-page href/categories/>i classfa-fw fas fa-folder-open>/i>span> Categories/span>/a>/div>div classmenus_item>a classsite-page href/Music/>i classfa-fw fas fa-music>/i>span> Music/span>/a>/div>div classmenus_item>a classsite-page href/LiveShow/>i classfa-fw fas fa-music>/i>span> 港乐Live Show/span>/a>/div>/div>div idtoggle-menu>a classsite-page hrefjavascript:void(0);>i classfas fa-bars fa-fw>/i>/a>/div>/div>/nav>div idsite-info>h1 idsite-title>Eden Mo Blog/h1>div idsite-subtitle>span idsubtitle>/span>/div>div idsite_social_icons>a classsocial-icon hrefmailto:2436444815@qq.com target_blank titleEmail>i classfas fa-envelope>/i>/a>/div>/div>div idscroll-down>i classfas fa-angle-down scroll-down-effects>/i>/div>/header>main classlayout idcontent-inner>div classrecent-posts idrecent-posts>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/10/08/CMU-CSAPP%E4%BA%8CDataLab/ title深入理解计算机系统CMU-15213 CSAPP(二):DataLab>深入理解计算机系统CMU-15213 CSAPP(二):DataLab/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-10-08T11:43:45.000Z title发表于 2025-10-08 19:43:45>2025-10-08/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F/>计算机系统/a>i classfas fa-angle-right article-meta-link>/i>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/Linux/>Linux/a>i classfas fa-angle-right article-meta-link>/i>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E9%A1%B9%E7%9B%AE/>计算机系统项目/a>i classfas fa-angle-right article-meta-link>/i>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/C/>C/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/CSAPP/>CSAPP/a>/span>/div>div classcontent>在国庆假期最后一天拾起一下一年前没做完的事情,尝试继续完成CSAPP的Lab,同时每个lab中都会结合原书补充一些细节知识。实验目的DataLab主要围绕数据表示设计,涉及到数据的按位运算和浮点数转化等知识,设计者希望我们修改bits.c文件中的函数,使得函数实现相应的目的。此外,每个函数会限制要用的运算符和数量,根据要求完成即可。当完成此节,你会对位运算刮目相看。尤其推荐通过其中的浮点数实验和本文描述了解浮点数存储细节,我相信这是没有之一的最详细和科学的描述。如有不当,欢迎指正。具体实现与和非实现异或根据异或的卡诺图,可知:A^B (A & ~B) | (~A & B)而根据与或关系的转换:C | D ~(~C & ~D)所以有:A^B ~(~(A & ~B) & \~(~A & B))故有: 1234567891011//1/* * bitXor - x^y using only ~ and & * Example: bitXor(4, 5) 1 * Legal op .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/09/30/OpenGL%E4%BA%8C-%E7%9D%80%E8%89%B2%E5%99%A8%E4%B8%8E%E5%9F%BA%E6%9C%AC%E6%B8%B2%E6%9F%93/ titleOpenGL C++记录(二):基本渲染与着色器>OpenGL C++记录(二):基本渲染与着色器/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-09-29T16:55:58.000Z title发表于 2025-09-30 00:55:58>2025-09-30/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/OpenGL/>OpenGL/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/C-%E9%AB%98%E9%98%B6/>C++高阶/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/OpenGL/>OpenGL/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9B%BE%E5%BD%A2%E5%AD%A6/>计算机图形学/a>/span>/div>div classcontent>根据LearnOpenGL记录了OpenGL的基本入门,初衷只是想接触一些计算机图形学内容,该系列估计最多只会到坐标变换一节,完整学习可移步原教程。基本程序OpenGL的入门打印不再是HelloWorld了,其牵扯到比较多的概念,完整的一个基本程序如下,做了很多事情,但是效果上仅仅输出一个空白灰绿框以及打印了OpenGL版本信息。1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374#include<glad/glad.h>#include<GLFW/glfw3.h> #include<iostream> // settingsconst unsigned int SCR_WIDTH 800;const unsigned int SCR_HEIGHT 600; const unsigned int VIEW .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/09/29/OpenGL%E4%B8%80-%E5%9F%BA%E4%BA%8EMinGw%E7%9A%84%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/ titleOpenGL C++记录(一):基于MinGw的环境搭建>OpenGL C++记录(一):基于MinGw的环境搭建/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-09-28T16:09:58.000Z title发表于 2025-09-29 00:09:58>2025-09-29/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/OpenGL/>OpenGL/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/C-%E9%AB%98%E9%98%B6/>C++高阶/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/OpenGL/>OpenGL/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9B%BE%E5%BD%A2%E5%AD%A6/>计算机图形学/a>/span>/div>div classcontent>OpenGL环境搭建OpenGL(Open GraphicsLibrary)是一个2D、3D图形渲染库,它实际上并不是一种API,而是一种标准规范,规定了每个接口应该提供什么样的功能,也就是说它不关心内部实际实现,因为不同平台、不同设备上的接口实现总是不一样的,不同的系统、显卡、显卡驱动,都要求按照不同的系统API实现开发所需的对象创建和管理、音视频处理等,对编程者要求较高,因此OpenGL引入了各种库,例如GLUT,SDL,SFML和GLFW等,用于抽象和屏蔽底层的实现差异,实现使用统一的接口调用不同平台API的方法。也由于OpenGL实现随平台变化的特点,显卡、驱动版本、系统版本都可能导致一些函数失效,或者通过宏支持新的函数功能,因此大多数函数的运行地址是运行期才真正确定,导致OpenGL的函数逻辑需要经过寻找函数指针-绑定对象-创建/操作对象的过程,例如在windows上,需要通过wglGetProcAddress获取函数指针再使用:1234567// 定义函数原型typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);/ .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/09/23/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E5%9B%9B%E7%BB%84%E5%90%88%E6%A8%A1%E5%BC%8F-%E8%B4%A3%E4%BB%BB%E9%93%BE%E6%A8%A1%E5%BC%8F-%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F/ title设计模式(四):组合模式、责任链模式、策略模式>设计模式(四):组合模式、责任链模式、策略模式/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-09-23T11:13:17.000Z title发表于 2025-09-23 19:13:17>2025-09-23/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/>设计模式/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/C-%E9%AB%98%E9%98%B6/>C++高阶/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/>设计模式/a>/span>/div>div classcontent>组合模式(Composite Pattern)当集体对象和单一对象有功能上的相似时,使用组合模式可以为集体和单一对象提供统一的操作接口,例如文件系统,对文件夹和文件的操作,删除文件夹实际上是对文件夹中的文件进行删除;这种情况下使用组合模式有若干优点:提供统一的操作,减少代码量;树形的管理架构,除了文件系统,很多系统的组织与此类似,例如公司、军队等组织的管理系统;易于扩展(开闭原则,对扩展开放,对修改封闭),一是能够容下多个层级关系,而无需每层独立一个类管理;二是添加层级和操作对象,都只要增加非叶子层级或者叶子、非叶子的操作接口即可。组织模式将类结构组织成树形的架构,单一的对象称为叶子对象,由单一对象组成的集体对象称为组件或者容器,单一对象之下没有对象,组件对象之下可以是更细分的组件对象,也可以是某单一对象,其中抽象类定义了叶子对象和组件的类似特性,将组织架构中最大的组件定义为根,模拟一个组件模式的军队架构组织如下:12345678910111213141516171819202122232425262728293031323334353637383940 .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/09/14/%E7%9F%A9%E9%98%B5%E6%B1%82%E5%AF%BC/ title矩阵求导>矩阵求导/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-09-13T17:59:49.000Z title发表于 2025-09-14 01:59:49>2025-09-14/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/%E6%95%B0%E5%80%BC%E5%88%86%E6%9E%90%E6%96%B9%E6%B3%95/>数值分析方法/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E6%95%B0%E5%80%BC%E5%88%86%E6%9E%90%E6%96%B9%E6%B3%95/>数值分析方法/a>/span>/div>div classcontent>函数与变元(自变量)标量函数f标量函数的自变量可以是标量、向量和矩阵。常见的函数形式以标量形式给出:但仅使用标量方程不足以方便描述各种数学关系,所以拓展成向量和矩阵方程的形式:向量形式:假设(列向量),由二次型分解知 矩阵形式:假设,有:向量函数向量函数的自变量同样可以分成标量、向量和矩阵。标量作自变量: 向量作自变量: 矩阵作自变量: 矩阵函数F矩阵函数的自变量同样可以分成标量、向量和矩阵。标量自变量: 向量自变量: 矩阵自变量: 分子布局与分母布局向量、矩阵这种多维变量互相求导,元素的个数实际上是确定的,关键是如何进行元素排列,主要是讨论分子布局和分母布局。总结了几个结论:分母和分子布局的本质就是由谁的维度来决定行数。分母布局下,假如分母是m维向量,那么结果就是m行,假如分母是m×n矩阵,那么结果就是mn行,分子布局同理;标量函数求导,使用的是分母布局(分母可能是向量、矩阵,维度较高);向量、矩阵函数对标量求导,使用的是分子布局(分子为向量、矩阵,维度较高);向量对向量求导,没有断论 .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/08/29/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0%E5%9F%BA%E7%A1%80/ title不积代数,无以至千里:线性代数基础>不积代数,无以至千里:线性代数基础/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-08-29T13:20:02.000Z title发表于 2025-08-29 21:20:02>2025-08-29/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/%E5%AD%A6%E7%A7%91%E7%90%86%E8%AE%BA/>学科理论/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/QR%E5%88%86%E8%A7%A3/>QR分解/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/>线性代数/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/LU%E5%88%86%E8%A7%A3/>LU分解/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/SVD%E5%88%86%E8%A7%A3/>SVD分解/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/Householder%E5%8F%98%E6%8D%A2/>Householder变换/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/Givens%E5%8F%98%E6%8D%A2/>Givens变换/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/MIT-18-06/>MIT 18.06/a>/span>/div>div classcontent>在图像处理/数据优化/机器学习方法方面,看了一些需要代数背景的代码比较糊涂,决定以个人视角记录一些线性代数基础,也是想做很久的一件事。参考了多方资料,包括宋浩线性代数(理解细节参考)、张宇线性代数(排版、总结、详略、公式非常好)以及来自MIT的线性代数课程(思想、与工程结合性出众),可能比较综合(杂乱)。逐渐更新。矩阵基础矩阵的定义不值一提,但从不同视角看待更容易理解矩阵的本质。 行图像(RowPicture)与列图像(Column Picture)平时习惯以行图像的时间看待矩阵,例如上述矩阵可以看成线性方程组的求解,对于二维矩阵求的是两直线的交点,三维则求三个面的交点: 解的存在性和个数取决于交点的存在性和分布规律。列图像将矩阵看成是列向量的线性组合:解的存在性和个数取决于两个向量的线性组合是否可达至目标向量。如果目标向量B是任意的,从行向量看代表两条直线关系是随机的,如果是三维,则代表了空间中三个平面的关系是随机的;而从列图像理解更容易得多,因为其系数矩阵是不变的,无论是二维还是n维空间,关键在于系数向量的线性组合是否能够表示n维空间中任 .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/08/17/%E6%95%B0%E5%80%BC%E5%88%86%E6%9E%90-%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95%E5%A4%9A%E9%A1%B9%E5%BC%8F%E6%8B%9F%E5%90%88/ title数值分析:多项式的最小二乘法拟合>数值分析:多项式的最小二乘法拟合/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-08-17T09:35:13.000Z title发表于 2025-08-17 17:35:13>2025-08-17/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/CPP/>CPP/a>i classfas fa-angle-right article-meta-link>/i>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/%E6%95%B0%E5%80%BC%E5%88%86%E6%9E%90%E6%96%B9%E6%B3%95/>数值分析方法/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95/>最小二乘法/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E6%8B%9F%E5%90%88%E7%AE%97%E6%B3%95/>拟合算法/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/QR%E5%88%86%E8%A7%A3/>QR分解/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E6%95%B0%E5%80%BC%E5%88%86%E6%9E%90%E6%96%B9%E6%B3%95/>数值分析方法/a>/span>/div>div classcontent>多项式拟合-最小二乘法代数角度这个方法爱看不看,看了基本也没用。最小二乘法使用多项式拟合样本数据,其基本代数原理以下。假设使用的是m阶多项式拟合,那么在的估计值为:其误差表示为: 那么对于n个样本点,使用平方和误差量化,该误差就是数据的优化目标,自变量为各阶的权值w,有:求E(w)极小值,需对其求偏导,为: 有: 权重系数与i无关,可以写成: 同样的,此为一个约束条件,对于m阶的多项式,存在m+1项的偏导联合约束,所以有:写成矩阵表达式: C++实现如下: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869#include <opencv2/opencv.hpp>#include <iostream>#include <math.h>using namespace std;using .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/08/11/OpenCV%E5%8D%81%E5%9B%9B-%E8%B7%9D%E7%A6%BB%E5%8F%98%E6%8D%A2%E7%AE%97%E6%B3%95%E4%B8%8E%E5%9F%BA%E4%BA%8E%E6%A0%87%E8%AE%B0%E7%9A%84%E5%88%86%E6%B0%B4%E5%B2%AD%E7%AE%97%E6%B3%95/ titleOpenCV C++记录(十四):距离变换与基于标记的分水岭算法>OpenCV C++记录(十四):距离变换与基于标记的分水岭算法/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-08-11T13:59:19.000Z title发表于 2025-08-11 21:59:19>2025-08-11/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/OpenCV/>OpenCV/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/C-%E9%AB%98%E9%98%B6/>C++高阶/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/OpenCV/>OpenCV/a>/span>/div>div classcontent>距离变换算法距离变换算法是基于二值化图像转换,得到与前景输入类似的灰度图,其基本原理是计算前景像素(255)到背景像素(0)的最小距离,背景像素值的距离仍然为0,距离变换算法能简单地在图像生成前景特征,在图像分割、特征提取中有重要作用,此处所说的距离是三种经典距离,在前面文章OpenCVC++记录(八):Sobel、Scharr、Laplacian、Canny算子简单提过,其数学特征是:欧氏距离(DIST_L2):曼哈顿距离(城市距离,DIST_L1):棋盘距离(切比雪夫距离,DIST_C)三种距离定义OpenCV实现OpenCV提供了距离变换接口,可以计算二值图的前景和背景距离灰度分布情况:123456void distanceTransform(cv::InputArray src, //输入二值化图 cv::OutputArray dst, //输出距离 int distanceType, //三种类型距离 int maskSize, //掩图大小,一般为3 int ds .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/08/08/OpenCV%E5%8D%81%E4%B8%89-%E8%A7%92%E7%82%B9%E6%A3%80%E6%B5%8B%E7%AE%97%E6%B3%95%E4%B8%8E%E4%BA%9A%E5%83%8F%E7%B4%A0%E4%BC%98%E5%8C%96/ titleOpenCV C++记录(十三):角点检测算法与亚像素优化>OpenCV C++记录(十三):角点检测算法与亚像素优化/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-08-08T11:59:19.000Z title发表于 2025-08-08 19:59:19>2025-08-08/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/OpenCV/>OpenCV/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/C-%E9%AB%98%E9%98%B6/>C++高阶/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/OpenCV/>OpenCV/a>/span>/div>div classcontent>角点是图像的重要特征,往往比边缘和平坦区域具有更独一无二的特征,例如在拼图时,我们往往会先寻找物体对象的角点,最后再完善边缘和平坦区域,对于图像的特征检测亦是如此,角点检测是重要一环。Harris角点检测基本原理1988年,Chris Harris和MikeStephens提出了角点检测的方法,称为Harris角点检测,其基本思想是考虑窗口到各个方向的灰度差异总和,表示为:窗口权值函数灰度增量函数灰度函数权值函数既可以是普通窗口,也可以是与中心距离相关的高斯窗口。其中增量项可以根据二元一阶泰勒展开成偏导项Ix和Iy和二阶无穷小: 故原式等于: 此处令M ,可根据其特征值进一步判断某区域是平坦还是出现边缘还是角点,Harris检测响应公式:此处的特征值可以理解成两个正交方向的变化率,结论如下:当|R|很大,为角点,因为此时λ1和λ2均很大,说明两个正交方向都有大的变化率;当|R|很小,为平坦区,此时λ1和λ2都很小,两个正交方向变化率军均很小;当R<0,为边缘,说明λ1和λ2其中一个很小,只有一个方向存在变化率 .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/08/04/OpenCV%E5%8D%81%E4%BA%8C-%E9%BD%90%E6%AC%A1%E5%9D%90%E6%A0%87%E4%B8%8E%E5%BC%A0%E6%AD%A3%E5%8F%8B%E6%A0%87%E5%AE%9A/ titleOpenCV C++记录(十二):齐次坐标、相机成像模型与张正友标定>OpenCV C++记录(十二):齐次坐标、相机成像模型与张正友标定/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-08-04T11:59:19.000Z title发表于 2025-08-04 19:59:19>2025-08-04/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/OpenCV/>OpenCV/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/C-%E9%AB%98%E9%98%B6/>C++高阶/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/OpenCV/>OpenCV/a>/span>/div>div classcontent>齐次坐标在视觉处理的一些数学原理中,常常看见齐次坐标的身影。所谓齐次坐标,是在原来笛卡尔坐标的基础上增加一个维度,例如二维笛卡尔坐标(x,y)对应的齐次坐标为(x,y,1),以此类推,三维笛卡尔坐标(x,y,z)对应齐次坐标(x,y,z,1)。之所以使用齐次坐标,首先其能更方便地描述和求解几何关系,再者从2D到3D的变换,使用齐次坐标能表示一些二维空间难以表述的数学关系,例如无限远、两条平行线的交点(透视变换),其能够做到以下事情。对点、线、平面关系的描述点在线上、点在面上一条二维直线的方程可以表示为: : 使用向量表示其系数,为: 所以对于任意点p(x,y),其对应齐次坐标为(x,y,1),p在直线上的充要条件是满足二者内积为0:同理,对于三维情况,表示空间点p(x,y,z)在平面A上:二维线交点与共线齐次坐标还可以方便地表达两条二维直线的交点以及确定两点所在的直线方程,结论是:1.两条直线的系数向量叉乘等于其交点的齐次坐标证明:假设直线、,易知两个系数向量的叉乘得到的向量同时垂直于和,故其内积为0,结合点在线上的充要条件: .../div>/div>/div>nav idpagination>div classpagination>span classpage-number current>1/span>a classpage-number href/page/2/#content-inner>2/a>span classspace>…/span>a classpage-number href/page/13/#content-inner>13/a>a classextend next relnext href/page/2/#content-inner>i classfas fa-chevron-right fa-fw>/i>/a>/div>/nav>/div>div classaside-content idaside-content>div classcard-widget card-info>div classis-center>div classavatar-img>img srchttps://blog.edenmo.top/name.png onerrorthis.onerrornull;this.src/img/friend_404.gif altavatar/>/div>div classauthor-info__name>Eden/div>div classauthor-info__description>不做前端所以博客不漂亮,纯免费授权码来自公众号:摸妖猫/div>/div>div classcard-info-data site-data is-center>a href/archives/>div classheadline>文章/div>div classlength-num>130/div>/a>a href/tags/>div classheadline>标签/div>div classlength-num>58/div>/a>a href/categories/>div classheadline>分类/div>div classlength-num>37/div>/a>/div>a idcard-info-btn target_blank relnoopener hrefhttps://github.com/EdenMoxe>i classfab fa-github>/i>span>Follow Me/span>/a>div classcard-info-social-icons is-center>a classsocial-icon hrefmailto:2436444815@qq.com target_blank titleEmail>i classfas fa-envelope>/i>/a>/div>/div>div classcard-widget card-announcement>div classitem-headline>i classfas fa-bullhorn fa-shake>/i>span>公告/span>/div>div classannouncement_content>文章任何错误、疏漏、建议麻烦请联系博主qq邮箱2436444815@qq.com/div>/div>div classsticky_layout>div classcard-widget card-recent-post>div classitem-headline>i classfas fa-history>/i>span>最新文章/span>/div>div classaside-list>div classaside-list-item no-cover>div classcontent>a classtitle href/2025/10/08/CMU-CSAPP%E4%BA%8CDataLab/ title深入理解计算机系统CMU-15213 CSAPP(二):DataLab>深入理解计算机系统CMU-15213 CSAPP(二):DataLab/a>time datetime2025-10-08T11:43:45.000Z title发表于 2025-10-08 19:43:45>2025-10-08/time>/div>/div>div classaside-list-item no-cover>div classcontent>a classtitle href/2025/09/30/OpenGL%E4%BA%8C-%E7%9D%80%E8%89%B2%E5%99%A8%E4%B8%8E%E5%9F%BA%E6%9C%AC%E6%B8%B2%E6%9F%93/ titleOpenGL C++记录(二):基本渲染与着色器>OpenGL C++记录(二):基本渲染与着色器/a>time datetime2025-09-29T16:55:58.000Z title发表于 2025-09-30 00:55:58>2025-09-30/time>/div>/div>div classaside-list-item no-cover>div classcontent>a classtitle href/2025/09/29/OpenGL%E4%B8%80-%E5%9F%BA%E4%BA%8EMinGw%E7%9A%84%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/ titleOpenGL C++记录(一):基于MinGw的环境搭建>OpenGL C++记录(一):基于MinGw的环境搭建/a>time datetime2025-09-28T16:09:58.000Z title发表于 2025-09-29 00:09:58>2025-09-29/time>/div>/div>div classaside-list-item no-cover>div classcontent>a classtitle href/2025/09/23/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E5%9B%9B%E7%BB%84%E5%90%88%E6%A8%A1%E5%BC%8F-%E8%B4%A3%E4%BB%BB%E9%93%BE%E6%A8%A1%E5%BC%8F-%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F/ title设计模式(四):组合模式、责任链模式、策略模式>设计模式(四):组合模式、责任链模式、策略模式/a>time datetime2025-09-23T11:13:17.000Z title发表于 2025-09-23 19:13:17>2025-09-23/time>/div>/div>div classaside-list-item no-cover>div classcontent>a classtitle href/2025/09/14/%E7%9F%A9%E9%98%B5%E6%B1%82%E5%AF%BC/ title矩阵求导>矩阵求导/a>time datetime2025-09-13T17:59:49.000Z title发表于 2025-09-14 01:59:49>2025-09-14/time>/div>/div>/div>/div>div classcard-widget card-categories>div classitem-headline> i classfas fa-folder-open>/i> span>分类/span> a classcard-more-btn href/categories/ title查看更多> i classfas fa-angle-right>/i>/a> /div> ul classcard-category-list idaside-cat-list> li classcard-category-list-item >a classcard-category-list-link href/categories/C/>span classcard-category-list-name>C/span>span classcard-category-list-count>21/span>/a>/li>li classcard-category-list-item >a classcard-category-list-link href/categories/C-Qt%E5%BC%80%E5%8F%91/>span classcard-category-list-name>C++ Qt开发/span>span classcard-category-list-count>7/span>/a>/li>li classcard-category-list-item >a classcard-category-list-link href/categories/C-C/>span classcard-category-list-name>C/C++/span>span classcard-category-list-count>14/span>/a>/li>li classcard-category-list-item >a classcard-category-list-link href/categories/CPP/>span classcard-category-list-name>CPP/span>span classcard-category-list-count>24/span>/a>ul classcard-category-list child>li classcard-category-list-item >a classcard-category-list-link href/categories/CPP/C-Generic-Programming/>span classcard-category-list-name>C++ Generic Programming/span>span classcard-category-list-count>3/span>/a>/li>li classcard-category-list-item >a classcard-category-list-link href/categories/CPP/C-boost%E5%BA%93%E5%BC%80%E5%8F%91/>span classcard-category-list-name>C++ boost库开发/span>span classcard-category-list-count>5/span>/a>/li>/ul>/li>li classcard-category-list-item >a classcard-category-list-link href/categories/FPGA/>span classcard-category-list-name>FPGA/span>span classcard-category-list-count>2/span>/a>ul classcard-category-list child>li classcard-category-list-item >a classcard-category-list-link href/categories/FPGA/verilog/>span classcard-category-list-name>verilog/span>span classcard-category-list-count>2/span>/a>/li>/ul>/li> /ul>/div>div classcard-widget card-tags>div classitem-headline>i classfas fa-tags>/i>span>标签/span>/div>div classcard-tag-cloud>a href/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9B%BE%E5%BD%A2%E5%AD%A6/ stylefont-size: 1.16em; color: #999b9e>计算机图形学/a> a href/tags/%E6%A0%BC%E5%BC%8F%E5%8C%96%E8%BE%93%E5%87%BA/ stylefont-size: 1.1em; color: #999>格式化输出/a> a href/tags/QR%E5%88%86%E8%A7%A3/ stylefont-size: 1.16em; color: #999b9e>QR分解/a> a href/tags/C-%E9%AB%98%E9%98%B6/ stylefont-size: 1.5em; color: #99a9bf>C++高阶/a> a href/tags/MIT-18-06/ stylefont-size: 1.1em; color: #999>MIT 18.06/a> a href/tags/Stanford-CS144/ stylefont-size: 1.21em; color: #999ea4>Stanford CS144/a> a href/tags/%E9%AB%98%E7%AD%89%E6%95%B0%E5%AD%A6/ stylefont-size: 1.16em; color: #999b9e>高等数学/a> a href/tags/3D%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B/ stylefont-size: 1.21em; color: #999ea4>3D目标检测/a> a href/tags/Givens%E5%8F%98%E6%8D%A2/ stylefont-size: 1.1em; color: #999>Givens变换/a> a href/tags/Effective-C/ stylefont-size: 1.1em; color: #999>Effective C++/a> a href/tags/CSAPP/ stylefont-size: 1.16em; color: #999b9e>CSAPP/a> a href/tags/LU%E5%88%86%E8%A7%A3/ stylefont-size: 1.1em; color: #999>LU分解/a> a href/tags/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/ stylefont-size: 1.27em; color: #99a0a9>设计模式/a> a href/tags/ASIO%E5%BC%82%E6%AD%A5%E7%BC%96%E7%A8%8B/ stylefont-size: 1.16em; color: #999b9e>ASIO异步编程/a> a href/tags/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/ stylefont-size: 1.1em; color: #999>线性代数/a> a href/tags/C-Qt/ stylefont-size: 1.39em; color: #99a4b4>C++ Qt/a> a href/tags/SVD%E5%88%86%E8%A7%A3/ stylefont-size: 1.1em; color: #999>SVD分解/a> a href/tags/Markdown%E8%AF%AD%E6%B3%95/ stylefont-size: 1.1em; color: #999>Markdown语法/a> a href/tags/%E8%AF%BB%E5%86%99%E9%94%81/ stylefont-size: 1.1em; color: #999>读写锁/a> a href/tags/Householder%E5%8F%98%E6%8D%A2/ stylefont-size: 1.1em; color: #999>Householder变换/a> a href/tags/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/ stylefont-size: 1.33em; color: #99a2af>网络编程/a> a href/tags/OpenGL/ stylefont-size: 1.16em; color: #999b9e>OpenGL/a> a href/tags/%E4%BF%A1%E5%8F%B7%E4%B8%8E%E7%B3%BB%E7%BB%9F/ stylefont-size: 1.1em; color: #999>信号与系统/a> a href/tags/C-SFINAF-and-Type-Traits/ stylefont-size: 1.1em; color: #999>C++ SFINAF and Type Traits/a> a href/tags/Git%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/ stylefont-size: 1.1em; color: #999>Git基本使用/a> a href/tags/json%E5%BA%8F%E5%88%97%E5%8C%96/ stylefont-size: 1.27em; color: #99a0a9>json序列化/a> a href/tags/%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86%E7%90%86%E8%AE%BA/ stylefont-size: 1.1em; color: #999>内存管理理论/a> a href/tags/C-11-%E6%96%B0%E7%89%B9%E6%80%A7/ stylefont-size: 1.33em; color: #99a2af>C++11 新特性/a> a href/tags/C-Generic-Programming/ stylefont-size: 1.21em; color: #999ea4>C++ Generic Programming/a> a href/tags/Linux/ stylefont-size: 1.21em; color: #999ea4>Linux/a> a href/tags/Beast%E5%BA%93/ stylefont-size: 1.1em; color: #999>Beast库/a> a href/tags/Private-Content/ stylefont-size: 1.21em; color: #999ea4>Private Content/a> a href/tags/Linux%E6%89%A9%E5%AE%B9/ stylefont-size: 1.1em; color: #999>Linux扩容/a> a href/tags/vim%E4%BD%BF%E7%94%A8/ stylefont-size: 1.1em; color: #999>vim使用/a> a href/tags/%E6%95%B0%E5%80%BC%E5%88%86%E6%9E%90%E6%96%B9%E6%B3%95/ stylefont-size: 1.21em; color: #999ea4>数值分析方法/a> a href/tags/%E8%BF%9B%E7%A8%8B%E4%B8%8E%E7%BA%BF%E7%A8%8B/ stylefont-size: 1.16em; color: #999b9e>进程与线程/a> a href/tags/%E6%8B%9F%E5%90%88%E7%AE%97%E6%B3%95/ stylefont-size: 1.1em; color: #999>拟合算法/a> a href/tags/CMake/ stylefont-size: 1.1em; color: #999>CMake/a> a href/tags/%E6%95%B0%E6%8D%AE%E5%BA%93/ stylefont-size: 1.33em; color: #99a2af>数据库/a> a href/tags/OpenCV/ stylefont-size: 1.44em; color: #99a7ba>OpenCV/a>/div>/div>div classcard-widget card-archives>div classitem-headline>i classfas fa-archive>/i>span>归档/span>a classcard-more-btn href/archives/ title查看更多> i classfas fa-angle-right>/i>/a>/div>ul classcard-archive-list>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/10/>span classcard-archive-list-date>十月 2025/span>span classcard-archive-list-count>1/span>/a>/li>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/09/>span classcard-archive-list-date>九月 2025/span>span classcard-archive-list-count>4/span>/a>/li>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/08/>span classcard-archive-list-date>八月 2025/span>span classcard-archive-list-count>6/span>/a>/li>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/07/>span classcard-archive-list-date>七月 2025/span>span classcard-archive-list-count>6/span>/a>/li>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/06/>span classcard-archive-list-date>六月 2025/span>span classcard-archive-list-count>6/span>/a>/li>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/05/>span classcard-archive-list-date>五月 2025/span>span classcard-archive-list-count>3/span>/a>/li>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/04/>span classcard-archive-list-date>四月 2025/span>span classcard-archive-list-count>4/span>/a>/li>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/03/>span classcard-archive-list-date>三月 2025/span>span classcard-archive-list-count>6/span>/a>/li>/ul>/div>div classcard-widget card-webinfo>div classitem-headline>i classfas fa-chart-line>/i>span>网站资讯/span>/div>div classwebinfo>div classwebinfo-item>div classitem-name>文章数目 :/div>div classitem-count>130/div>/div>div classwebinfo-item>div classitem-name>本站总字数 :/div>div classitem-count>566.3k/div>/div>div classwebinfo-item>div classitem-name>本站访客数 :/div>div classitem-count idbusuanzi_value_site_uv>i classfa-solid fa-spinner fa-spin>/i>/div>/div>div classwebinfo-item>div classitem-name>本站总访问量 :/div>div classitem-count idbusuanzi_value_site_pv>i classfa-solid fa-spinner fa-spin>/i>/div>/div>div classwebinfo-item>div classitem-name>最后更新时间 :/div>div classitem-count idlast-push-date data-lastPushDate2025-10-14T17:20:35.966Z>i classfa-solid fa-spinner fa-spin>/i>/div>/div>/div>/div>/div>/div>/main>footer idfooter>div idfooter-wrap>div classcopyright>©2023 - 2025 By Eden/div>div classframework-info>span>框架 /span>a target_blank relnoopener hrefhttps://nodejs.org/en>Nodejs/a>span classfooter-separator>|/span>你忘掉理想 只能忙于生活吗br>img srchttps://blog.edenmo.top/beian.png styleposition: relative; top: 5px; margin-left: 5px;/>a hrefhttp://www.beian.gov.cn/portal/registerSystemInfo?recordcode44010602011738 stylecolor:#939393 target_blank>粤公网安备 44010602011738号/a>span classfooter-separator>|/span>a hrefhttps://beian.miit.gov.cn stylecolor:#f72b07 target_blank>粤ICP备2023072610号/a>/div>/div>/footer>/div>div idrightside>div idrightside-config-hide>button iddarkmode typebutton title浅色和深色模式转换>i classfas fa-adjust>/i>/button>button idhide-aside-btn typebutton title单栏和双栏切换>i classfas fa-arrows-alt-h>/i>/button>/div>div idrightside-config-show>button idrightside-config typebutton title设置>i classfas fa-cog fa-spin>/i>/button>button idgo-up typebutton title回到顶部>span classscroll-percent>/span>i classfas fa-arrow-up>/i>/button>/div>/div>div>script src/js/utils.js>/script>script src/js/main.js>/script>script srchttps://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.umd.min.js>/script>div classjs-pjax>script>window.typedJSFn { init: (str) > { window.typed new Typed(#subtitle, Object.assign({ strings: str, startDelay: 300, typeSpeed: 150, loop: true, backSpeed: 50, }, null)) }, run: (subtitleType) > { if (false) { if (typeof Typed function) { subtitleType() } else { getScript(https://cdn.jsdelivr.net/npm/typed.js/dist/typed.umd.min.js).then(subtitleType) } } else { subtitleType() } }}/script>script>function subtitleType () { if (false) { typedJSFn.init(月光有人捞起,有人瞧不起) } else { document.getElementById(subtitle).textContent 月光有人捞起,有人瞧不起 }}typedJSFn.run(subtitleType)/script>/div>script src/js/cover.js>/script>div classaplayer no-destroy data-id8526212161 data-servernetease data-typeplaylist data-fixedtrue data-autoplaytrue> /div>link relstylesheet typetext/css hrefhttps://qiniu.techgrow.cn/readmore/dist/hexo.css>script data-pjax srchttps://qiniu.techgrow.cn/readmore/dist/readmore.js typetext/javascript>/script>script data-pjax>var isMobilenavigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);var allowMobiletrue;if(!isMobile||(isMobile&&allowMobile)){try{var pluginnew ReadmorePlugin();plugin.init({type:hexo,id:article-container,name:摸妖猫,blogId:90627-3698668020370-144,qrcode:https://blog.edenmo.top/wx.jpg,keyword:送小宇宙,random:1,height:auto,expires:30,lockToc:yes,interval:30,tocSelector:#card-toc})}catch(e){console.warn(readmore plugin occurred error)}}/script>canvas classfireworks mobilefalse>/canvas>script srchttps://cdn.jsdelivr.net/npm/butterfly-extsrc/dist/fireworks.min.js>/script>script deferdefer idribbon srchttps://cdn.jsdelivr.net/npm/butterfly-extsrc/dist/canvas-ribbon.min.js size150 alpha0.6 zIndex-1 mobiletrue data-clicktrue>/script>link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css mediaprint onloadthis.mediaall>script srchttps://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js>/script>script srchttps://cdn.jsdelivr.net/npm/butterfly-extsrc/metingjs/dist/Meting.min.js>/script>script srchttps://cdn.jsdelivr.net/npm/pjax/pjax.min.js>/script>script>let pjaxSelectors head > title,#config-diff,#body-wrap,#rightside-config-hide,#rightside-config-show,.js-pjaxvar pjax new Pjax({ elements: a:not(target_blank):not(hrefhttps://www.edenmo.top/Music/):not(hrefhttp://localhost:4000/Music/), selectors: pjaxSelectors, cacheBust: false, analytics: false, scrollRestoration: false})document.addEventListener(pjax:send, function () { // removeEventListener btf.removeGlobalFnEvent(pjax) btf.removeGlobalFnEvent(themeChange) document.getElementById(rightside).classList.remove(rightside-show) if (window.aplayers) { for (let i 0; i window.aplayers.length; i++) { if (!window.aplayersi.options.fixed) { window.aplayersi.destroy() } } } typeof typed object && typed.destroy() //reset readmode const $bodyClassList document.body.classList $bodyClassList.contains(read-mode) && $bodyClassList.remove(read-mode) typeof disqusjs object && disqusjs.destroy()})document.addEventListener(pjax:complete, function () { window.refreshFn() document.querySelectorAll(scriptdata-pjax).forEach(item > { const newScript document.createElement(script) const content item.text || item.textContent || item.innerHTML || Array.from(item.attributes).forEach(attr > newScript.setAttribute(attr.name, attr.value)) newScript.appendChild(document.createTextNode(content)) item.parentNode.replaceChild(newScript, item) }) GLOBAL_CONFIG.islazyload && window.lazyLoadInstance.update() typeof panguInit function && panguInit() // google analytics typeof gtag function && gtag(config, , {page_path: window.location.pathname}); // baidu analytics typeof _hmt object && _hmt.push(_trackPageview,window.location.pathname); typeof loadMeting function && document.getElementsByClassName(aplayer).length && loadMeting() // prismjs typeof Prism object && Prism.highlightAll()})document.addEventListener(pjax:error, e > { if (e.request.status 404) { pjax.loadUrl(/404.html) }})/script>script async data-pjax src//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js>/script>div idlocal-search>div classsearch-dialog>nav classsearch-nav>span classsearch-dialog-title>搜索/span>span idloading-status>/span>button classsearch-close-button>i classfas fa-times>/i>/button>/nav>div classis-center idloading-database>i classfas fa-spinner fa-pulse>/i>span> 数据库加载中/span>/div>div classsearch-wrap>div idlocal-search-input>div classlocal-search-box>input classlocal-search-box--input placeholder搜索文章 typetext/>/div>/div>hr/>div idlocal-search-results>/div>div idlocal-search-stats-wrap>/div>/div>/div>div idsearch-mask>/div>script src/js/search/local-search.js>/script>/div>/div>/body>/html>
Port 443
HTTP/1.1 200 OKDate: Thu, 23 Oct 2025 11:13:26 GMTContent-Type: text/htmlContent-Length: 56422Connection: keep-aliveVary: Accept-EncodingLast-Modified: Tue, 14 Oct 2025 17:20:58 GMTVary: Accept-EncodingETag: 68ee867a-dc66Accept-Ranges: bytesX-Via-JSL: 4c4992c,-Set-Cookie: __jsluid_scbb5b88f5c89b638c81c36eca7c1524e; max-age31536000; path/; HttpOnly; SameSiteNone; secureCache-Control: max-age10800Expires: Thu, 23 Oct 2025 14:13:26 GMTX-Cache: miss !DOCTYPE html>html langzh-CN data-themelight>head>meta charsetUTF-8>meta http-equivX-UA-Compatible contentIEedge>meta nameviewport contentwidthdevice-width, initial-scale1.0,viewport-fitcover>title>Eden Mo Blog - 月光有人捞起,有人瞧不起/title>meta nameauthor contentEden>meta namecopyright contentEden>meta nameformat-detection contenttelephoneno>meta nametheme-color content#ffffff>meta namedescription content不做前端所以博客不漂亮,纯免费授权码来自公众号:摸妖猫>meta propertyog:type contentwebsite>meta propertyog:title contentEden Mo Blog>meta propertyog:url contenthttps://blog.edenmo.top/index.html>meta propertyog:site_name contentEden Mo Blog>meta propertyog:description content不做前端所以博客不漂亮,纯免费授权码来自公众号:摸妖猫>meta propertyog:locale contentzh_CN>meta propertyog:image contenthttps://blog.edenmo.top/name.png>meta propertyarticle:author contentEden>meta nametwitter:card contentsummary>meta nametwitter:image contenthttps://blog.edenmo.top/name.png>link relshortcut icon hrefhttps://blog.edenmo.top/img/icon.ico>link relcanonical hrefhttps://blog.edenmo.top/index.html>link relpreconnect href//cdn.jsdelivr.net/>link relpreconnect href//busuanzi.ibruce.info/>link relstylesheet href/css/index.css>link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css>link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.min.css mediaprint onloadthis.mediaall>script>const GLOBAL_CONFIG { root: /, algolia: undefined, localSearch: {path:/search.xml,preload:false,top_n_per_article:1,unescape:false,languages:{hits_empty:找不到您查询的内容:${query},hits_stats:共找到 ${hits} 篇文章}}, translate: undefined, noticeOutdate: undefined, highlight: {plugin:highlight.js,highlightCopy:true,highlightLang:true,highlightHeightLimit:false}, copy: { success: 复制成功, error: 复制错误, noSupport: 浏览器不支持 }, relativeDate: { homepage: false, post: false }, runtime: , dateSuffix: { just: 刚刚, min: 分钟前, hour: 小时前, day: 天前, month: 个月前 }, copyright: {limitCount:800,languages:{author:作者: Eden,link:链接: ,source:来源: Eden Mo Blog,info:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。}}, lightbox: fancybox, Snackbar: undefined, infinitegrid: { js: https://cdn.jsdelivr.net/npm/@egjs/infinitegrid/dist/infinitegrid.min.js, buttonText: 加载更多 }, isPhotoFigcaption: false, islazyload: false, isAnchor: false, percent: { toc: true, rightside: false, }, autoDarkmode: false}/script>script idconfig-diff>var GLOBAL_CONFIG_SITE { title: Eden Mo Blog, isPost: false, isHome: true, isHighlightShrink: false, isToc: false, postUpdate: 2025-10-15 01:20:39}/script>script>(win>{ win.saveToLocal { set: (key, value, ttl) > { if (ttl 0) return const now Date.now() const expiry now + ttl * 86400000 const item { value, expiry } localStorage.setItem(key, JSON.stringify(item)) }, get: key > { const itemStr localStorage.getItem(key) if (!itemStr) { return undefined } const item JSON.parse(itemStr) const now Date.now() if (now > item.expiry) { localStorage.removeItem(key) return undefined } return item.value } } win.getScript (url, attr {}) > new Promise((resolve, reject) > { const script document.createElement(script) script.src url script.async true script.onerror reject script.onload script.onreadystatechange function() { const loadState this.readyState if (loadState && loadState ! loaded && loadState ! complete) return script.onload script.onreadystatechange null resolve() } Object.keys(attr).forEach(key > { script.setAttribute(key, attrkey) }) document.head.appendChild(script) }) win.getCSS (url, id false) > new Promise((resolve, reject) > { const link document.createElement(link) link.rel stylesheet link.href url if (id) link.id id link.onerror reject link.onload link.onreadystatechange function() { const loadState this.readyState if (loadState && loadState ! loaded && loadState ! complete) return link.onload link.onreadystatechange null resolve() } document.head.appendChild(link) }) win.activateDarkMode () > { document.documentElement.setAttribute(data-theme, dark) if (document.querySelector(metanametheme-color) ! null) { document.querySelector(metanametheme-color).setAttribute(content, #0d0d0d) } } win.activateLightMode () > { document.documentElement.setAttribute(data-theme, light) if (document.querySelector(metanametheme-color) ! null) { document.querySelector(metanametheme-color).setAttribute(content, #ffffff) } } const t saveToLocal.get(theme) if (t dark) activateDarkMode() else if (t light) activateLightMode() const asideStatus saveToLocal.get(aside-status) if (asideStatus ! undefined) { if (asideStatus hide) { document.documentElement.classList.add(hide-aside) } else { document.documentElement.classList.remove(hide-aside) } } const detectApple () > { if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){ document.documentElement.classList.add(apple) } } detectApple() })(window)/script>link relstylesheet href/css/background_opa.css>meta namegenerator contentHexo 6.3.0>style>mjx-containerjaxSVG { direction: ltr;}mjx-containerjaxSVG > svg { overflow: visible;}mjx-containerjaxSVGdisplaytrue { display: block; text-align: center; margin: 1em 0;}mjx-containerjaxSVGjustifyleft { text-align: left;}mjx-containerjaxSVGjustifyright { text-align: right;}gdata-mml-nodemerror > g { fill: red; stroke: red;}gdata-mml-nodemerror > rectdata-background { fill: yellow; stroke: none;}gdata-mml-nodemtable > linedata-line { stroke-width: 70px; fill: none;}gdata-mml-nodemtable > rectdata-frame { stroke-width: 70px; fill: none;}gdata-mml-nodemtable > .mjx-dashed { stroke-dasharray: 140;}gdata-mml-nodemtable > .mjx-dotted { stroke-linecap: round; stroke-dasharray: 0,140;}gdata-mml-nodemtable > svg { overflow: visible;}jaxSVG mjx-tool { display: inline-block; position: relative; width: 0; height: 0;}jaxSVG mjx-tool > mjx-tip { position: absolute; top: 0; left: 0;}mjx-tool > mjx-tip { display: inline-block; padding: .2em; border: 1px solid #888; font-size: 70%; background-color: #F8F8F8; color: black; box-shadow: 2px 2px 5px #AAAAAA;}gdata-mml-nodemactiondata-toggle { cursor: pointer;}mjx-status { display: block; position: fixed; left: 1em; bottom: 1em; min-width: 25%; padding: .2em .4em; border: 1px solid #888; font-size: 90%; background-color: #F8F8F8; color: black;}foreignObjectdata-mjx-xml { font-family: initial; line-height: normal; overflow: visible;}.MathJax path { stroke-width: 3;}mjx-containerdisplaytrue { overflow: auto hidden;}mjx-containerdisplaytrue + br { display: none;}/style>/head>body>div idweb_bg>/div>div idsidebar>div idmenu-mask>/div>div idsidebar-menus>div classavatar-img is-center>img srchttps://blog.edenmo.top/name.png onerroronerrornull;src/img/friend_404.gif altavatar/>/div>div classsidebar-site-data site-data is-center>a href/archives/>div classheadline>文章/div>div classlength-num>130/div>/a>a href/tags/>div classheadline>标签/div>div classlength-num>58/div>/a>a href/categories/>div classheadline>分类/div>div classlength-num>37/div>/a>/div>hr classcustom-hr/>div classmenus_items>div classmenus_item>a classsite-page href/>i classfa-fw fas fa-home>/i>span> Home/span>/a>/div>div classmenus_item>a classsite-page href/tags/>i classfa-fw fas fa-tags>/i>span> Tags/span>/a>/div>div classmenus_item>a classsite-page href/categories/>i classfa-fw fas fa-folder-open>/i>span> Categories/span>/a>/div>div classmenus_item>a classsite-page href/Music/>i classfa-fw fas fa-music>/i>span> Music/span>/a>/div>div classmenus_item>a classsite-page href/LiveShow/>i classfa-fw fas fa-music>/i>span> 港乐Live Show/span>/a>/div>/div>/div>/div>div classpage idbody-wrap>header classfull_page idpage-header stylebackground-image: url(https://blog.edenmo.top/cover2.png)>nav idnav>span idblog-info>a href/ titleEden Mo Blog>span classsite-name>Eden Mo Blog/span>/a>/span>div idmenus>div idsearch-button>a classsite-page social-icon search hrefjavascript:void(0);>i classfas fa-search fa-fw>/i>span> 搜索/span>/a>/div>div classmenus_items>div classmenus_item>a classsite-page href/>i classfa-fw fas fa-home>/i>span> Home/span>/a>/div>div classmenus_item>a classsite-page href/tags/>i classfa-fw fas fa-tags>/i>span> Tags/span>/a>/div>div classmenus_item>a classsite-page href/categories/>i classfa-fw fas fa-folder-open>/i>span> Categories/span>/a>/div>div classmenus_item>a classsite-page href/Music/>i classfa-fw fas fa-music>/i>span> Music/span>/a>/div>div classmenus_item>a classsite-page href/LiveShow/>i classfa-fw fas fa-music>/i>span> 港乐Live Show/span>/a>/div>/div>div idtoggle-menu>a classsite-page hrefjavascript:void(0);>i classfas fa-bars fa-fw>/i>/a>/div>/div>/nav>div idsite-info>h1 idsite-title>Eden Mo Blog/h1>div idsite-subtitle>span idsubtitle>/span>/div>div idsite_social_icons>a classsocial-icon hrefmailto:2436444815@qq.com target_blank titleEmail>i classfas fa-envelope>/i>/a>/div>/div>div idscroll-down>i classfas fa-angle-down scroll-down-effects>/i>/div>/header>main classlayout idcontent-inner>div classrecent-posts idrecent-posts>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/10/08/CMU-CSAPP%E4%BA%8CDataLab/ title深入理解计算机系统CMU-15213 CSAPP(二):DataLab>深入理解计算机系统CMU-15213 CSAPP(二):DataLab/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-10-08T11:43:45.000Z title发表于 2025-10-08 19:43:45>2025-10-08/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F/>计算机系统/a>i classfas fa-angle-right article-meta-link>/i>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/Linux/>Linux/a>i classfas fa-angle-right article-meta-link>/i>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E9%A1%B9%E7%9B%AE/>计算机系统项目/a>i classfas fa-angle-right article-meta-link>/i>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/C/>C/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/CSAPP/>CSAPP/a>/span>/div>div classcontent>在国庆假期最后一天拾起一下一年前没做完的事情,尝试继续完成CSAPP的Lab,同时每个lab中都会结合原书补充一些细节知识。实验目的DataLab主要围绕数据表示设计,涉及到数据的按位运算和浮点数转化等知识,设计者希望我们修改bits.c文件中的函数,使得函数实现相应的目的。此外,每个函数会限制要用的运算符和数量,根据要求完成即可。当完成此节,你会对位运算刮目相看。尤其推荐通过其中的浮点数实验和本文描述了解浮点数存储细节,我相信这是没有之一的最详细和科学的描述。如有不当,欢迎指正。具体实现与和非实现异或根据异或的卡诺图,可知:A^B (A & ~B) | (~A & B)而根据与或关系的转换:C | D ~(~C & ~D)所以有:A^B ~(~(A & ~B) & \~(~A & B))故有: 1234567891011//1/* * bitXor - x^y using only ~ and & * Example: bitXor(4, 5) 1 * Legal op .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/09/30/OpenGL%E4%BA%8C-%E7%9D%80%E8%89%B2%E5%99%A8%E4%B8%8E%E5%9F%BA%E6%9C%AC%E6%B8%B2%E6%9F%93/ titleOpenGL C++记录(二):基本渲染与着色器>OpenGL C++记录(二):基本渲染与着色器/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-09-29T16:55:58.000Z title发表于 2025-09-30 00:55:58>2025-09-30/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/OpenGL/>OpenGL/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/C-%E9%AB%98%E9%98%B6/>C++高阶/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/OpenGL/>OpenGL/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9B%BE%E5%BD%A2%E5%AD%A6/>计算机图形学/a>/span>/div>div classcontent>根据LearnOpenGL记录了OpenGL的基本入门,初衷只是想接触一些计算机图形学内容,该系列估计最多只会到坐标变换一节,完整学习可移步原教程。基本程序OpenGL的入门打印不再是HelloWorld了,其牵扯到比较多的概念,完整的一个基本程序如下,做了很多事情,但是效果上仅仅输出一个空白灰绿框以及打印了OpenGL版本信息。1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374#include<glad/glad.h>#include<GLFW/glfw3.h> #include<iostream> // settingsconst unsigned int SCR_WIDTH 800;const unsigned int SCR_HEIGHT 600; const unsigned int VIEW .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/09/29/OpenGL%E4%B8%80-%E5%9F%BA%E4%BA%8EMinGw%E7%9A%84%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/ titleOpenGL C++记录(一):基于MinGw的环境搭建>OpenGL C++记录(一):基于MinGw的环境搭建/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-09-28T16:09:58.000Z title发表于 2025-09-29 00:09:58>2025-09-29/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/OpenGL/>OpenGL/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/C-%E9%AB%98%E9%98%B6/>C++高阶/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/OpenGL/>OpenGL/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9B%BE%E5%BD%A2%E5%AD%A6/>计算机图形学/a>/span>/div>div classcontent>OpenGL环境搭建OpenGL(Open GraphicsLibrary)是一个2D、3D图形渲染库,它实际上并不是一种API,而是一种标准规范,规定了每个接口应该提供什么样的功能,也就是说它不关心内部实际实现,因为不同平台、不同设备上的接口实现总是不一样的,不同的系统、显卡、显卡驱动,都要求按照不同的系统API实现开发所需的对象创建和管理、音视频处理等,对编程者要求较高,因此OpenGL引入了各种库,例如GLUT,SDL,SFML和GLFW等,用于抽象和屏蔽底层的实现差异,实现使用统一的接口调用不同平台API的方法。也由于OpenGL实现随平台变化的特点,显卡、驱动版本、系统版本都可能导致一些函数失效,或者通过宏支持新的函数功能,因此大多数函数的运行地址是运行期才真正确定,导致OpenGL的函数逻辑需要经过寻找函数指针-绑定对象-创建/操作对象的过程,例如在windows上,需要通过wglGetProcAddress获取函数指针再使用:1234567// 定义函数原型typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);/ .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/09/23/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E5%9B%9B%E7%BB%84%E5%90%88%E6%A8%A1%E5%BC%8F-%E8%B4%A3%E4%BB%BB%E9%93%BE%E6%A8%A1%E5%BC%8F-%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F/ title设计模式(四):组合模式、责任链模式、策略模式>设计模式(四):组合模式、责任链模式、策略模式/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-09-23T11:13:17.000Z title发表于 2025-09-23 19:13:17>2025-09-23/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/>设计模式/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/C-%E9%AB%98%E9%98%B6/>C++高阶/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/>设计模式/a>/span>/div>div classcontent>组合模式(Composite Pattern)当集体对象和单一对象有功能上的相似时,使用组合模式可以为集体和单一对象提供统一的操作接口,例如文件系统,对文件夹和文件的操作,删除文件夹实际上是对文件夹中的文件进行删除;这种情况下使用组合模式有若干优点:提供统一的操作,减少代码量;树形的管理架构,除了文件系统,很多系统的组织与此类似,例如公司、军队等组织的管理系统;易于扩展(开闭原则,对扩展开放,对修改封闭),一是能够容下多个层级关系,而无需每层独立一个类管理;二是添加层级和操作对象,都只要增加非叶子层级或者叶子、非叶子的操作接口即可。组织模式将类结构组织成树形的架构,单一的对象称为叶子对象,由单一对象组成的集体对象称为组件或者容器,单一对象之下没有对象,组件对象之下可以是更细分的组件对象,也可以是某单一对象,其中抽象类定义了叶子对象和组件的类似特性,将组织架构中最大的组件定义为根,模拟一个组件模式的军队架构组织如下:12345678910111213141516171819202122232425262728293031323334353637383940 .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/09/14/%E7%9F%A9%E9%98%B5%E6%B1%82%E5%AF%BC/ title矩阵求导>矩阵求导/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-09-13T17:59:49.000Z title发表于 2025-09-14 01:59:49>2025-09-14/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/%E6%95%B0%E5%80%BC%E5%88%86%E6%9E%90%E6%96%B9%E6%B3%95/>数值分析方法/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E6%95%B0%E5%80%BC%E5%88%86%E6%9E%90%E6%96%B9%E6%B3%95/>数值分析方法/a>/span>/div>div classcontent>函数与变元(自变量)标量函数f标量函数的自变量可以是标量、向量和矩阵。常见的函数形式以标量形式给出:但仅使用标量方程不足以方便描述各种数学关系,所以拓展成向量和矩阵方程的形式:向量形式:假设(列向量),由二次型分解知 矩阵形式:假设,有:向量函数向量函数的自变量同样可以分成标量、向量和矩阵。标量作自变量: 向量作自变量: 矩阵作自变量: 矩阵函数F矩阵函数的自变量同样可以分成标量、向量和矩阵。标量自变量: 向量自变量: 矩阵自变量: 分子布局与分母布局向量、矩阵这种多维变量互相求导,元素的个数实际上是确定的,关键是如何进行元素排列,主要是讨论分子布局和分母布局。总结了几个结论:分母和分子布局的本质就是由谁的维度来决定行数。分母布局下,假如分母是m维向量,那么结果就是m行,假如分母是m×n矩阵,那么结果就是mn行,分子布局同理;标量函数求导,使用的是分母布局(分母可能是向量、矩阵,维度较高);向量、矩阵函数对标量求导,使用的是分子布局(分子为向量、矩阵,维度较高);向量对向量求导,没有断论 .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/08/29/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0%E5%9F%BA%E7%A1%80/ title不积代数,无以至千里:线性代数基础>不积代数,无以至千里:线性代数基础/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-08-29T13:20:02.000Z title发表于 2025-08-29 21:20:02>2025-08-29/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/%E5%AD%A6%E7%A7%91%E7%90%86%E8%AE%BA/>学科理论/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/QR%E5%88%86%E8%A7%A3/>QR分解/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/>线性代数/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/LU%E5%88%86%E8%A7%A3/>LU分解/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/SVD%E5%88%86%E8%A7%A3/>SVD分解/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/Householder%E5%8F%98%E6%8D%A2/>Householder变换/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/Givens%E5%8F%98%E6%8D%A2/>Givens变换/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/MIT-18-06/>MIT 18.06/a>/span>/div>div classcontent>在图像处理/数据优化/机器学习方法方面,看了一些需要代数背景的代码比较糊涂,决定以个人视角记录一些线性代数基础,也是想做很久的一件事。参考了多方资料,包括宋浩线性代数(理解细节参考)、张宇线性代数(排版、总结、详略、公式非常好)以及来自MIT的线性代数课程(思想、与工程结合性出众),可能比较综合(杂乱)。逐渐更新。矩阵基础矩阵的定义不值一提,但从不同视角看待更容易理解矩阵的本质。 行图像(RowPicture)与列图像(Column Picture)平时习惯以行图像的时间看待矩阵,例如上述矩阵可以看成线性方程组的求解,对于二维矩阵求的是两直线的交点,三维则求三个面的交点: 解的存在性和个数取决于交点的存在性和分布规律。列图像将矩阵看成是列向量的线性组合:解的存在性和个数取决于两个向量的线性组合是否可达至目标向量。如果目标向量B是任意的,从行向量看代表两条直线关系是随机的,如果是三维,则代表了空间中三个平面的关系是随机的;而从列图像理解更容易得多,因为其系数矩阵是不变的,无论是二维还是n维空间,关键在于系数向量的线性组合是否能够表示n维空间中任 .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/08/17/%E6%95%B0%E5%80%BC%E5%88%86%E6%9E%90-%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95%E5%A4%9A%E9%A1%B9%E5%BC%8F%E6%8B%9F%E5%90%88/ title数值分析:多项式的最小二乘法拟合>数值分析:多项式的最小二乘法拟合/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-08-17T09:35:13.000Z title发表于 2025-08-17 17:35:13>2025-08-17/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/CPP/>CPP/a>i classfas fa-angle-right article-meta-link>/i>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/%E6%95%B0%E5%80%BC%E5%88%86%E6%9E%90%E6%96%B9%E6%B3%95/>数值分析方法/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95/>最小二乘法/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E6%8B%9F%E5%90%88%E7%AE%97%E6%B3%95/>拟合算法/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/QR%E5%88%86%E8%A7%A3/>QR分解/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/%E6%95%B0%E5%80%BC%E5%88%86%E6%9E%90%E6%96%B9%E6%B3%95/>数值分析方法/a>/span>/div>div classcontent>多项式拟合-最小二乘法代数角度这个方法爱看不看,看了基本也没用。最小二乘法使用多项式拟合样本数据,其基本代数原理以下。假设使用的是m阶多项式拟合,那么在的估计值为:其误差表示为: 那么对于n个样本点,使用平方和误差量化,该误差就是数据的优化目标,自变量为各阶的权值w,有:求E(w)极小值,需对其求偏导,为: 有: 权重系数与i无关,可以写成: 同样的,此为一个约束条件,对于m阶的多项式,存在m+1项的偏导联合约束,所以有:写成矩阵表达式: C++实现如下: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869#include <opencv2/opencv.hpp>#include <iostream>#include <math.h>using namespace std;using .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/08/11/OpenCV%E5%8D%81%E5%9B%9B-%E8%B7%9D%E7%A6%BB%E5%8F%98%E6%8D%A2%E7%AE%97%E6%B3%95%E4%B8%8E%E5%9F%BA%E4%BA%8E%E6%A0%87%E8%AE%B0%E7%9A%84%E5%88%86%E6%B0%B4%E5%B2%AD%E7%AE%97%E6%B3%95/ titleOpenCV C++记录(十四):距离变换与基于标记的分水岭算法>OpenCV C++记录(十四):距离变换与基于标记的分水岭算法/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-08-11T13:59:19.000Z title发表于 2025-08-11 21:59:19>2025-08-11/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/OpenCV/>OpenCV/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/C-%E9%AB%98%E9%98%B6/>C++高阶/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/OpenCV/>OpenCV/a>/span>/div>div classcontent>距离变换算法距离变换算法是基于二值化图像转换,得到与前景输入类似的灰度图,其基本原理是计算前景像素(255)到背景像素(0)的最小距离,背景像素值的距离仍然为0,距离变换算法能简单地在图像生成前景特征,在图像分割、特征提取中有重要作用,此处所说的距离是三种经典距离,在前面文章OpenCVC++记录(八):Sobel、Scharr、Laplacian、Canny算子简单提过,其数学特征是:欧氏距离(DIST_L2):曼哈顿距离(城市距离,DIST_L1):棋盘距离(切比雪夫距离,DIST_C)三种距离定义OpenCV实现OpenCV提供了距离变换接口,可以计算二值图的前景和背景距离灰度分布情况:123456void distanceTransform(cv::InputArray src, //输入二值化图 cv::OutputArray dst, //输出距离 int distanceType, //三种类型距离 int maskSize, //掩图大小,一般为3 int ds .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/08/08/OpenCV%E5%8D%81%E4%B8%89-%E8%A7%92%E7%82%B9%E6%A3%80%E6%B5%8B%E7%AE%97%E6%B3%95%E4%B8%8E%E4%BA%9A%E5%83%8F%E7%B4%A0%E4%BC%98%E5%8C%96/ titleOpenCV C++记录(十三):角点检测算法与亚像素优化>OpenCV C++记录(十三):角点检测算法与亚像素优化/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-08-08T11:59:19.000Z title发表于 2025-08-08 19:59:19>2025-08-08/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/OpenCV/>OpenCV/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/C-%E9%AB%98%E9%98%B6/>C++高阶/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/OpenCV/>OpenCV/a>/span>/div>div classcontent>角点是图像的重要特征,往往比边缘和平坦区域具有更独一无二的特征,例如在拼图时,我们往往会先寻找物体对象的角点,最后再完善边缘和平坦区域,对于图像的特征检测亦是如此,角点检测是重要一环。Harris角点检测基本原理1988年,Chris Harris和MikeStephens提出了角点检测的方法,称为Harris角点检测,其基本思想是考虑窗口到各个方向的灰度差异总和,表示为:窗口权值函数灰度增量函数灰度函数权值函数既可以是普通窗口,也可以是与中心距离相关的高斯窗口。其中增量项可以根据二元一阶泰勒展开成偏导项Ix和Iy和二阶无穷小: 故原式等于: 此处令M ,可根据其特征值进一步判断某区域是平坦还是出现边缘还是角点,Harris检测响应公式:此处的特征值可以理解成两个正交方向的变化率,结论如下:当|R|很大,为角点,因为此时λ1和λ2均很大,说明两个正交方向都有大的变化率;当|R|很小,为平坦区,此时λ1和λ2都很小,两个正交方向变化率军均很小;当R<0,为边缘,说明λ1和λ2其中一个很小,只有一个方向存在变化率 .../div>/div>/div>div classrecent-post-item>div classrecent-post-info no-cover>a classarticle-title href/2025/08/04/OpenCV%E5%8D%81%E4%BA%8C-%E9%BD%90%E6%AC%A1%E5%9D%90%E6%A0%87%E4%B8%8E%E5%BC%A0%E6%AD%A3%E5%8F%8B%E6%A0%87%E5%AE%9A/ titleOpenCV C++记录(十二):齐次坐标、相机成像模型与张正友标定>OpenCV C++记录(十二):齐次坐标、相机成像模型与张正友标定/a>div classarticle-meta-wrap>span classpost-meta-date>i classfar fa-calendar-alt>/i>span classarticle-meta-label>发表于/span>time datetime2025-08-04T11:59:19.000Z title发表于 2025-08-04 19:59:19>2025-08-04/time>/span>span classarticle-meta>span classarticle-meta-separator>|/span>i classfas fa-inbox>/i>a classarticle-meta__categories href/categories/OpenCV/>OpenCV/a>/span>span classarticle-meta tags>span classarticle-meta-separator>|/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/C-%E9%AB%98%E9%98%B6/>C++高阶/a>span classarticle-meta-link>•/span>i classfas fa-tag>/i>a classarticle-meta__tags href/tags/OpenCV/>OpenCV/a>/span>/div>div classcontent>齐次坐标在视觉处理的一些数学原理中,常常看见齐次坐标的身影。所谓齐次坐标,是在原来笛卡尔坐标的基础上增加一个维度,例如二维笛卡尔坐标(x,y)对应的齐次坐标为(x,y,1),以此类推,三维笛卡尔坐标(x,y,z)对应齐次坐标(x,y,z,1)。之所以使用齐次坐标,首先其能更方便地描述和求解几何关系,再者从2D到3D的变换,使用齐次坐标能表示一些二维空间难以表述的数学关系,例如无限远、两条平行线的交点(透视变换),其能够做到以下事情。对点、线、平面关系的描述点在线上、点在面上一条二维直线的方程可以表示为: : 使用向量表示其系数,为: 所以对于任意点p(x,y),其对应齐次坐标为(x,y,1),p在直线上的充要条件是满足二者内积为0:同理,对于三维情况,表示空间点p(x,y,z)在平面A上:二维线交点与共线齐次坐标还可以方便地表达两条二维直线的交点以及确定两点所在的直线方程,结论是:1.两条直线的系数向量叉乘等于其交点的齐次坐标证明:假设直线、,易知两个系数向量的叉乘得到的向量同时垂直于和,故其内积为0,结合点在线上的充要条件: .../div>/div>/div>nav idpagination>div classpagination>span classpage-number current>1/span>a classpage-number href/page/2/#content-inner>2/a>span classspace>…/span>a classpage-number href/page/13/#content-inner>13/a>a classextend next relnext href/page/2/#content-inner>i classfas fa-chevron-right fa-fw>/i>/a>/div>/nav>/div>div classaside-content idaside-content>div classcard-widget card-info>div classis-center>div classavatar-img>img srchttps://blog.edenmo.top/name.png onerrorthis.onerrornull;this.src/img/friend_404.gif altavatar/>/div>div classauthor-info__name>Eden/div>div classauthor-info__description>不做前端所以博客不漂亮,纯免费授权码来自公众号:摸妖猫/div>/div>div classcard-info-data site-data is-center>a href/archives/>div classheadline>文章/div>div classlength-num>130/div>/a>a href/tags/>div classheadline>标签/div>div classlength-num>58/div>/a>a href/categories/>div classheadline>分类/div>div classlength-num>37/div>/a>/div>a idcard-info-btn target_blank relnoopener hrefhttps://github.com/EdenMoxe>i classfab fa-github>/i>span>Follow Me/span>/a>div classcard-info-social-icons is-center>a classsocial-icon hrefmailto:2436444815@qq.com target_blank titleEmail>i classfas fa-envelope>/i>/a>/div>/div>div classcard-widget card-announcement>div classitem-headline>i classfas fa-bullhorn fa-shake>/i>span>公告/span>/div>div classannouncement_content>文章任何错误、疏漏、建议麻烦请联系博主qq邮箱2436444815@qq.com/div>/div>div classsticky_layout>div classcard-widget card-recent-post>div classitem-headline>i classfas fa-history>/i>span>最新文章/span>/div>div classaside-list>div classaside-list-item no-cover>div classcontent>a classtitle href/2025/10/08/CMU-CSAPP%E4%BA%8CDataLab/ title深入理解计算机系统CMU-15213 CSAPP(二):DataLab>深入理解计算机系统CMU-15213 CSAPP(二):DataLab/a>time datetime2025-10-08T11:43:45.000Z title发表于 2025-10-08 19:43:45>2025-10-08/time>/div>/div>div classaside-list-item no-cover>div classcontent>a classtitle href/2025/09/30/OpenGL%E4%BA%8C-%E7%9D%80%E8%89%B2%E5%99%A8%E4%B8%8E%E5%9F%BA%E6%9C%AC%E6%B8%B2%E6%9F%93/ titleOpenGL C++记录(二):基本渲染与着色器>OpenGL C++记录(二):基本渲染与着色器/a>time datetime2025-09-29T16:55:58.000Z title发表于 2025-09-30 00:55:58>2025-09-30/time>/div>/div>div classaside-list-item no-cover>div classcontent>a classtitle href/2025/09/29/OpenGL%E4%B8%80-%E5%9F%BA%E4%BA%8EMinGw%E7%9A%84%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/ titleOpenGL C++记录(一):基于MinGw的环境搭建>OpenGL C++记录(一):基于MinGw的环境搭建/a>time datetime2025-09-28T16:09:58.000Z title发表于 2025-09-29 00:09:58>2025-09-29/time>/div>/div>div classaside-list-item no-cover>div classcontent>a classtitle href/2025/09/23/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E5%9B%9B%E7%BB%84%E5%90%88%E6%A8%A1%E5%BC%8F-%E8%B4%A3%E4%BB%BB%E9%93%BE%E6%A8%A1%E5%BC%8F-%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F/ title设计模式(四):组合模式、责任链模式、策略模式>设计模式(四):组合模式、责任链模式、策略模式/a>time datetime2025-09-23T11:13:17.000Z title发表于 2025-09-23 19:13:17>2025-09-23/time>/div>/div>div classaside-list-item no-cover>div classcontent>a classtitle href/2025/09/14/%E7%9F%A9%E9%98%B5%E6%B1%82%E5%AF%BC/ title矩阵求导>矩阵求导/a>time datetime2025-09-13T17:59:49.000Z title发表于 2025-09-14 01:59:49>2025-09-14/time>/div>/div>/div>/div>div classcard-widget card-categories>div classitem-headline> i classfas fa-folder-open>/i> span>分类/span> a classcard-more-btn href/categories/ title查看更多> i classfas fa-angle-right>/i>/a> /div> ul classcard-category-list idaside-cat-list> li classcard-category-list-item >a classcard-category-list-link href/categories/C/>span classcard-category-list-name>C/span>span classcard-category-list-count>21/span>/a>/li>li classcard-category-list-item >a classcard-category-list-link href/categories/C-Qt%E5%BC%80%E5%8F%91/>span classcard-category-list-name>C++ Qt开发/span>span classcard-category-list-count>7/span>/a>/li>li classcard-category-list-item >a classcard-category-list-link href/categories/C-C/>span classcard-category-list-name>C/C++/span>span classcard-category-list-count>14/span>/a>/li>li classcard-category-list-item >a classcard-category-list-link href/categories/CPP/>span classcard-category-list-name>CPP/span>span classcard-category-list-count>24/span>/a>ul classcard-category-list child>li classcard-category-list-item >a classcard-category-list-link href/categories/CPP/C-Generic-Programming/>span classcard-category-list-name>C++ Generic Programming/span>span classcard-category-list-count>3/span>/a>/li>li classcard-category-list-item >a classcard-category-list-link href/categories/CPP/C-boost%E5%BA%93%E5%BC%80%E5%8F%91/>span classcard-category-list-name>C++ boost库开发/span>span classcard-category-list-count>5/span>/a>/li>/ul>/li>li classcard-category-list-item >a classcard-category-list-link href/categories/FPGA/>span classcard-category-list-name>FPGA/span>span classcard-category-list-count>2/span>/a>ul classcard-category-list child>li classcard-category-list-item >a classcard-category-list-link href/categories/FPGA/verilog/>span classcard-category-list-name>verilog/span>span classcard-category-list-count>2/span>/a>/li>/ul>/li> /ul>/div>div classcard-widget card-tags>div classitem-headline>i classfas fa-tags>/i>span>标签/span>/div>div classcard-tag-cloud>a href/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9B%BE%E5%BD%A2%E5%AD%A6/ stylefont-size: 1.16em; color: #999b9e>计算机图形学/a> a href/tags/%E6%A0%BC%E5%BC%8F%E5%8C%96%E8%BE%93%E5%87%BA/ stylefont-size: 1.1em; color: #999>格式化输出/a> a href/tags/QR%E5%88%86%E8%A7%A3/ stylefont-size: 1.16em; color: #999b9e>QR分解/a> a href/tags/C-%E9%AB%98%E9%98%B6/ stylefont-size: 1.5em; color: #99a9bf>C++高阶/a> a href/tags/MIT-18-06/ stylefont-size: 1.1em; color: #999>MIT 18.06/a> a href/tags/Stanford-CS144/ stylefont-size: 1.21em; color: #999ea4>Stanford CS144/a> a href/tags/%E9%AB%98%E7%AD%89%E6%95%B0%E5%AD%A6/ stylefont-size: 1.16em; color: #999b9e>高等数学/a> a href/tags/3D%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B/ stylefont-size: 1.21em; color: #999ea4>3D目标检测/a> a href/tags/Givens%E5%8F%98%E6%8D%A2/ stylefont-size: 1.1em; color: #999>Givens变换/a> a href/tags/Effective-C/ stylefont-size: 1.1em; color: #999>Effective C++/a> a href/tags/CSAPP/ stylefont-size: 1.16em; color: #999b9e>CSAPP/a> a href/tags/LU%E5%88%86%E8%A7%A3/ stylefont-size: 1.1em; color: #999>LU分解/a> a href/tags/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/ stylefont-size: 1.27em; color: #99a0a9>设计模式/a> a href/tags/ASIO%E5%BC%82%E6%AD%A5%E7%BC%96%E7%A8%8B/ stylefont-size: 1.16em; color: #999b9e>ASIO异步编程/a> a href/tags/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/ stylefont-size: 1.1em; color: #999>线性代数/a> a href/tags/C-Qt/ stylefont-size: 1.39em; color: #99a4b4>C++ Qt/a> a href/tags/SVD%E5%88%86%E8%A7%A3/ stylefont-size: 1.1em; color: #999>SVD分解/a> a href/tags/Markdown%E8%AF%AD%E6%B3%95/ stylefont-size: 1.1em; color: #999>Markdown语法/a> a href/tags/%E8%AF%BB%E5%86%99%E9%94%81/ stylefont-size: 1.1em; color: #999>读写锁/a> a href/tags/Householder%E5%8F%98%E6%8D%A2/ stylefont-size: 1.1em; color: #999>Householder变换/a> a href/tags/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/ stylefont-size: 1.33em; color: #99a2af>网络编程/a> a href/tags/OpenGL/ stylefont-size: 1.16em; color: #999b9e>OpenGL/a> a href/tags/%E4%BF%A1%E5%8F%B7%E4%B8%8E%E7%B3%BB%E7%BB%9F/ stylefont-size: 1.1em; color: #999>信号与系统/a> a href/tags/C-SFINAF-and-Type-Traits/ stylefont-size: 1.1em; color: #999>C++ SFINAF and Type Traits/a> a href/tags/Git%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/ stylefont-size: 1.1em; color: #999>Git基本使用/a> a href/tags/json%E5%BA%8F%E5%88%97%E5%8C%96/ stylefont-size: 1.27em; color: #99a0a9>json序列化/a> a href/tags/%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86%E7%90%86%E8%AE%BA/ stylefont-size: 1.1em; color: #999>内存管理理论/a> a href/tags/C-11-%E6%96%B0%E7%89%B9%E6%80%A7/ stylefont-size: 1.33em; color: #99a2af>C++11 新特性/a> a href/tags/C-Generic-Programming/ stylefont-size: 1.21em; color: #999ea4>C++ Generic Programming/a> a href/tags/Linux/ stylefont-size: 1.21em; color: #999ea4>Linux/a> a href/tags/Beast%E5%BA%93/ stylefont-size: 1.1em; color: #999>Beast库/a> a href/tags/Private-Content/ stylefont-size: 1.21em; color: #999ea4>Private Content/a> a href/tags/Linux%E6%89%A9%E5%AE%B9/ stylefont-size: 1.1em; color: #999>Linux扩容/a> a href/tags/vim%E4%BD%BF%E7%94%A8/ stylefont-size: 1.1em; color: #999>vim使用/a> a href/tags/%E6%95%B0%E5%80%BC%E5%88%86%E6%9E%90%E6%96%B9%E6%B3%95/ stylefont-size: 1.21em; color: #999ea4>数值分析方法/a> a href/tags/%E8%BF%9B%E7%A8%8B%E4%B8%8E%E7%BA%BF%E7%A8%8B/ stylefont-size: 1.16em; color: #999b9e>进程与线程/a> a href/tags/%E6%8B%9F%E5%90%88%E7%AE%97%E6%B3%95/ stylefont-size: 1.1em; color: #999>拟合算法/a> a href/tags/CMake/ stylefont-size: 1.1em; color: #999>CMake/a> a href/tags/%E6%95%B0%E6%8D%AE%E5%BA%93/ stylefont-size: 1.33em; color: #99a2af>数据库/a> a href/tags/OpenCV/ stylefont-size: 1.44em; color: #99a7ba>OpenCV/a>/div>/div>div classcard-widget card-archives>div classitem-headline>i classfas fa-archive>/i>span>归档/span>a classcard-more-btn href/archives/ title查看更多> i classfas fa-angle-right>/i>/a>/div>ul classcard-archive-list>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/10/>span classcard-archive-list-date>十月 2025/span>span classcard-archive-list-count>1/span>/a>/li>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/09/>span classcard-archive-list-date>九月 2025/span>span classcard-archive-list-count>4/span>/a>/li>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/08/>span classcard-archive-list-date>八月 2025/span>span classcard-archive-list-count>6/span>/a>/li>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/07/>span classcard-archive-list-date>七月 2025/span>span classcard-archive-list-count>6/span>/a>/li>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/06/>span classcard-archive-list-date>六月 2025/span>span classcard-archive-list-count>6/span>/a>/li>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/05/>span classcard-archive-list-date>五月 2025/span>span classcard-archive-list-count>3/span>/a>/li>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/04/>span classcard-archive-list-date>四月 2025/span>span classcard-archive-list-count>4/span>/a>/li>li classcard-archive-list-item>a classcard-archive-list-link href/archives/2025/03/>span classcard-archive-list-date>三月 2025/span>span classcard-archive-list-count>6/span>/a>/li>/ul>/div>div classcard-widget card-webinfo>div classitem-headline>i classfas fa-chart-line>/i>span>网站资讯/span>/div>div classwebinfo>div classwebinfo-item>div classitem-name>文章数目 :/div>div classitem-count>130/div>/div>div classwebinfo-item>div classitem-name>本站总字数 :/div>div classitem-count>566.3k/div>/div>div classwebinfo-item>div classitem-name>本站访客数 :/div>div classitem-count idbusuanzi_value_site_uv>i classfa-solid fa-spinner fa-spin>/i>/div>/div>div classwebinfo-item>div classitem-name>本站总访问量 :/div>div classitem-count idbusuanzi_value_site_pv>i classfa-solid fa-spinner fa-spin>/i>/div>/div>div classwebinfo-item>div classitem-name>最后更新时间 :/div>div classitem-count idlast-push-date data-lastPushDate2025-10-14T17:20:35.966Z>i classfa-solid fa-spinner fa-spin>/i>/div>/div>/div>/div>/div>/div>/main>footer idfooter>div idfooter-wrap>div classcopyright>©2023 - 2025 By Eden/div>div classframework-info>span>框架 /span>a target_blank relnoopener hrefhttps://nodejs.org/en>Nodejs/a>span classfooter-separator>|/span>你忘掉理想 只能忙于生活吗br>img srchttps://blog.edenmo.top/beian.png styleposition: relative; top: 5px; margin-left: 5px;/>a hrefhttp://www.beian.gov.cn/portal/registerSystemInfo?recordcode44010602011738 stylecolor:#939393 target_blank>粤公网安备 44010602011738号/a>span classfooter-separator>|/span>a hrefhttps://beian.miit.gov.cn stylecolor:#f72b07 target_blank>粤ICP备2023072610号/a>/div>/div>/footer>/div>div idrightside>div idrightside-config-hide>button iddarkmode typebutton title浅色和深色模式转换>i classfas fa-adjust>/i>/button>button idhide-aside-btn typebutton title单栏和双栏切换>i classfas fa-arrows-alt-h>/i>/button>/div>div idrightside-config-show>button idrightside-config typebutton title设置>i classfas fa-cog fa-spin>/i>/button>button idgo-up typebutton title回到顶部>span classscroll-percent>/span>i classfas fa-arrow-up>/i>/button>/div>/div>div>script src/js/utils.js>/script>script src/js/main.js>/script>script srchttps://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.umd.min.js>/script>div classjs-pjax>script>window.typedJSFn { init: (str) > { window.typed new Typed(#subtitle, Object.assign({ strings: str, startDelay: 300, typeSpeed: 150, loop: true, backSpeed: 50, }, null)) }, run: (subtitleType) > { if (false) { if (typeof Typed function) { subtitleType() } else { getScript(https://cdn.jsdelivr.net/npm/typed.js/dist/typed.umd.min.js).then(subtitleType) } } else { subtitleType() } }}/script>script>function subtitleType () { if (false) { typedJSFn.init(月光有人捞起,有人瞧不起) } else { document.getElementById(subtitle).textContent 月光有人捞起,有人瞧不起 }}typedJSFn.run(subtitleType)/script>/div>script src/js/cover.js>/script>div classaplayer no-destroy data-id8526212161 data-servernetease data-typeplaylist data-fixedtrue data-autoplaytrue> /div>link relstylesheet typetext/css hrefhttps://qiniu.techgrow.cn/readmore/dist/hexo.css>script data-pjax srchttps://qiniu.techgrow.cn/readmore/dist/readmore.js typetext/javascript>/script>script data-pjax>var isMobilenavigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);var allowMobiletrue;if(!isMobile||(isMobile&&allowMobile)){try{var pluginnew ReadmorePlugin();plugin.init({type:hexo,id:article-container,name:摸妖猫,blogId:90627-3698668020370-144,qrcode:https://blog.edenmo.top/wx.jpg,keyword:送小宇宙,random:1,height:auto,expires:30,lockToc:yes,interval:30,tocSelector:#card-toc})}catch(e){console.warn(readmore plugin occurred error)}}/script>canvas classfireworks mobilefalse>/canvas>script srchttps://cdn.jsdelivr.net/npm/butterfly-extsrc/dist/fireworks.min.js>/script>script deferdefer idribbon srchttps://cdn.jsdelivr.net/npm/butterfly-extsrc/dist/canvas-ribbon.min.js size150 alpha0.6 zIndex-1 mobiletrue data-clicktrue>/script>link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css mediaprint onloadthis.mediaall>script srchttps://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js>/script>script srchttps://cdn.jsdelivr.net/npm/butterfly-extsrc/metingjs/dist/Meting.min.js>/script>script srchttps://cdn.jsdelivr.net/npm/pjax/pjax.min.js>/script>script>let pjaxSelectors head > title,#config-diff,#body-wrap,#rightside-config-hide,#rightside-config-show,.js-pjaxvar pjax new Pjax({ elements: a:not(target_blank):not(hrefhttps://www.edenmo.top/Music/):not(hrefhttp://localhost:4000/Music/), selectors: pjaxSelectors, cacheBust: false, analytics: false, scrollRestoration: false})document.addEventListener(pjax:send, function () { // removeEventListener btf.removeGlobalFnEvent(pjax) btf.removeGlobalFnEvent(themeChange) document.getElementById(rightside).classList.remove(rightside-show) if (window.aplayers) { for (let i 0; i window.aplayers.length; i++) { if (!window.aplayersi.options.fixed) { window.aplayersi.destroy() } } } typeof typed object && typed.destroy() //reset readmode const $bodyClassList document.body.classList $bodyClassList.contains(read-mode) && $bodyClassList.remove(read-mode) typeof disqusjs object && disqusjs.destroy()})document.addEventListener(pjax:complete, function () { window.refreshFn() document.querySelectorAll(scriptdata-pjax).forEach(item > { const newScript document.createElement(script) const content item.text || item.textContent || item.innerHTML || Array.from(item.attributes).forEach(attr > newScript.setAttribute(attr.name, attr.value)) newScript.appendChild(document.createTextNode(content)) item.parentNode.replaceChild(newScript, item) }) GLOBAL_CONFIG.islazyload && window.lazyLoadInstance.update() typeof panguInit function && panguInit() // google analytics typeof gtag function && gtag(config, , {page_path: window.location.pathname}); // baidu analytics typeof _hmt object && _hmt.push(_trackPageview,window.location.pathname); typeof loadMeting function && document.getElementsByClassName(aplayer).length && loadMeting() // prismjs typeof Prism object && Prism.highlightAll()})document.addEventListener(pjax:error, e > { if (e.request.status 404) { pjax.loadUrl(/404.html) }})/script>script async data-pjax src//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js>/script>div idlocal-search>div classsearch-dialog>nav classsearch-nav>span classsearch-dialog-title>搜索/span>span idloading-status>/span>button classsearch-close-button>i classfas fa-times>/i>/button>/nav>div classis-center idloading-database>i classfas fa-spinner fa-pulse>/i>span> 数据库加载中/span>/div>div classsearch-wrap>div idlocal-search-input>div classlocal-search-box>input classlocal-search-box--input placeholder搜索文章 typetext/>/div>/div>hr/>div idlocal-search-results>/div>div idlocal-search-stats-wrap>/div>/div>/div>div idsearch-mask>/div>script src/js/search/local-search.js>/script>/div>/div>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]