用opengl绘制winxp版扫雷的墨镜笑脸
写在前面
最近看看OpenGL的东西, 学了一些基础的语法, 所以用来做点东西, 用基本的点线多边形等来绘制一个Windows XP中经典的游戏扫雷里面的标志性笑脸, 如下图:
思路
这个笑脸有四种形态,分别是初始状态的笑脸, 点击时候的o型嘴, 赢的时候的墨镜脸和输了时候的伤心脸, 下面通过简单的直线和圆来绘制, 都是简单图形, 本质上其实都是点的绘制, 这里我封装了一下函数, 调用会方便一些, 分别是通过vector<GLint>表示的点, 这样用initializer_list时候会方便很多.
其次就是一些小细节, 例如圆的绘制中的角度问题(这里就是嘴的绘制), 还有键鼠事件的交互, 我觉得熟悉了这个流程之后, 主要的思路就都放在点的坐标上了, 这里我建议...
C++字符串大小比较的踩坑
坑
最近学习C++11中的initializer_list这一新特性, 一个实例是关于字符串比较大小的, 代码如下:
cout << max({string("Fff"), string("Eoa"), string("Acc")}) << endl;
运行结果如下:
Fff
很显然最大值就是字符串"Fff"(依字典序), 但是我觉得string这个关键字可以去掉, 也就是将上述代码改为:
cout << max({"Fff", "Eoa", "Acc"}) << endl;
但是这时候结果就变成了:
Acc
这是为什么呢?
分析
一开始我以为问题出在max()函数的身上, 找出源码后发现其本质还是逐元素比较...
关于二叉树插入空节点占位的问题
写在前面
今天刷lc的每日一题, 碰到了关于二叉树的题目, 本来是简单层序遍历(BFS)出结果的, 但是我在本地测试的时候总是出问题, 层序遍历出来的结果竟然跟测试样例的二叉树长得不一样了!
看下面这个例子:
1
\
2
\
3
/ \
4 5
上面这颗树的层序遍历应该是:[1,None,2,None,3,4,5], 但是我的测试代码却得到了:
第1层元素: [1]
第2层元素: [None, 2]
第3层元素: [None, 3, 4, 5]
就是说直接忽略了空节点, 这可是大大影响了树的结构了.. 下面尝试解决这个问题.
代码(Python)
# 首先定义树的...
组合学笔记(七)möbius函数的计算
写在前面
这次总结一下计算 Möbius 函数的一些内容, 包括一些例子, 具体地给出 Möbius 函数的一些用途.
一个平凡的例子: 微积分基本定理的有限差分模拟
设$P=\mathbb N$,(chain, 链) 则由 Möbius 函数的归纳定义, 代入计算,
\[\begin{cases}
\mu(x,x)=1,\quad\forall x\in P, \\[5pt]
\mu(x,y)=-\sum_\limits{x\le z<y}\mu(x,z),\ \forall x<y\in P,
\end{cases}\tag1\]
可以得到:$\forall i,j\in P$,
\[\mu(i,j)=\begin{cases}
1,&i=j,\\
...
Mac m1使用sublime格式化python,c++,json的最佳方式
写在前面
越来越离不开Sublime Text(下称ST) 这款轻量级跨平台编辑器了, 满足我对轻量化编辑代码的所有要求, 并不像VSCode一样臃肿, 内存占用也不大, 但是有一点不太好的就是现在插件市场的插件很多都不维护了, 就导致现在大多数开发者都转向vscode阵营了(我不想做大多数).
我可是放不下这款超级棒的编辑器的, 不管是刷LeetCode还是写小的测试程序, 都让我觉得非常舒服. 但是最近遇到了一个问题, 就是在ST中写C++时候代码格式化总是不好用, 一开始我用的是一款叫做CoolFormat的插件, 但是遇到C++代码总是提示Cannot format this file, 网上找到的推荐插件是SublimeAStyleFormatter1, 据说用来格式化C...
Python的defaultdict对象使用自定义类型的方法(以sortedlist为例)
写在前面
最近写周赛题, 逃不开的一种题型是设计数据结构, 也就是第三题, 做这种题需要的就是对语言中的容器以及常用排序查找算法的掌握, 而我只熟悉了最基本的一些方法, 做起这些题来总是超时…
为了搞定这些题, 我决定学习一下大佬们的做法, 特别是优先队列的方法维护有序容器以及有序列表等容器, 这些都在Python中封装好了, 用起来很是方便, 但是采用defaultdict的时候, 其缺省数据类型常常需要与题目给出的特定结构匹配, 这就需要定义一个新的数据类型, 下面我就以一种十分常用的结构SortedList为例, 设置自定义的数据类型(本例为将默认的升序列表变成降序列表).
其他的数据结构当然也可以根据下面列出的方法来改, 主要知识点就是函数与类的运用了. 这里我参...
Opengl基础(二)键盘事件控制
写在前面
键盘字符对应
ESC键: VK_ESCAPE (27)
回车键:VK_RETURN (13)
TAB键:VK_TAB (9)
Caps Lock键:VK_CAPITAL (20)
Shift键:VK_SHIFT (16)
Ctrl键:VK_CONTROL (17)
Alt键:VK_MENU (18)
空格键:VK_SPACE (32)
退格键:VK_BACK (8)
左徽标键:VK_LWIN (91)
右徽标键:VK_RWIN (92)
鼠标右键快捷键:VK_APPS (93)
Insert键:VK_INSERT (45)
Home键:VK_HOME (36)
Page Up:VK_PRIOR (33)
PageDown:VK_NEXT (3...
在macos(m1)中成功构建soil库的方法
写在前面
最近跟着网上的教程学学OpenGL, 但是却倒在了配置环境的第一步, 这个项目需要使用一个名为Simple OpenGL Image Library (SOIL)1的库, 实际上就是对OpenGL接口的进一步封装, 用于添加纹理, 但是不巧的是这个库所使用的Carbon API2在MacOS Catalina已经不支持MacOS的api了3, 就在我准备放弃的时候, 一个新的名为SOIL2的库4走进我的视线, 竟然还是从O’Reilly中的免费阅读项目中找到的, (这本书还算挺新的, 可以申请免费试看) 有了这个我就直接进入SOIL2的官方主页5, 然后开始一系列的配置~
但是就是这配置, 却让我折腾了快一天, 最后竟然只是因为brew的一个小小的包影响的.. 实在是不应...
共计 465 篇文章,59 页。
您是Zorch的第 个小伙伴
Hits