计算几何 - C++ 库的调研
系列文章
《计算几何——算法与应用(第三版)》学习笔记1 - 扫描线(第1-4章)
《计算几何——算法与应用(第三版)》学习笔记2 - 空间索引(第5-7章)
番外篇
-> 计算几何 - C++ 库的调研
Boost C++ Libraries学习 - Geometry
Boost C++ Libraries学习 - Boost.Polygon (GTL)
Boost.Geometry
官方网站
学习笔记:Boost C++ Libraries学习 - Geometry
License
Distributed under the Boost Software License, Version 1.0.
特点
易于使用,资料多、文档齐全。
常见的几何操作都有,但更小众的需求可能不如 CGAL。
可视化调试
vscode 插件:Graphical Debugging
使用方法:在 Debug 界面会有 GRAPHICAL WATCH 栏(图中左下角),在里面点击“+”号,输入变量名即可,效果如下:
但由于 GDB 和 LLDB 不会输出变量的原始类型(例如使用了typ ...
A*算法扩展 - 三维A*
系列文章
A算法初探究及优化 - 自动解贪吃蛇
A算法深入探究 - 使用Qt和C++实现带权重版本的A*
-> A算法扩展 - 三维A
基本思路
本项目是基于这篇文章里面的代码修改的:A*算法深入探究 - 使用Qt和C++实现带权重版本的A*
先将 A* 相关的类修改为维度无关的(Dimension Agnosticism),再实现一份存储三维地图数据的地图结构。由于之前的工作,A* 算法已经与地图类解耦了,所以可以实现用同一份 A* 算法,寻路的维度由地图类决定。
使用模板扩展Node的维度
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960namespace astar {namespace bg = boost::geometry;namespace bgm = boost::geometry::model;enum class NodeStatus{ wild, open, ...
Boost C++ Libraries学习 - Geometry
系列文章
《计算几何——算法与应用(第三版)》学习笔记1 - 扫描线(第1-4章)
《计算几何——算法与应用(第三版)》学习笔记2 - 空间索引(第5-7章)
番外篇
计算几何 - C++ 库的调研
-> Boost C++ Libraries学习 - Geometry
Boost C++ Libraries学习 - Boost.Polygon (GTL)
参考 Boost 官方手册
Boost.Geometry contains a dimension-agnostic, coordinate-system-agnostic and scalable kernel, based on concepts, meta-function and tag dispatching. On top of that kernel, algorithms are built: area, length, perimeter, centroid, convex hull, intersection (clipping), within (point in polygon), distance ...
C++并行开发 - 尝试Taskflow
参考 Taskflow Handbook
快速使用
Taskflow 用 C++ 17 编写,使用 CMake 3.18 以上构建,所以请确保环境版本正确再进行后续操作。
下载
git clone https://github.com/taskflow/taskflow.git
编译
123cd taskflowcmake -S . -B buildcmake --build build
运行简单示例
12cd build/examples./simple
获得输出
1234TaskATaskCTaskBTaskD
获得统计信息
12TF_ENABLE_PROFILER=simple.json ./simplecat ./simple.json
获得输出
123[{"executor":"0","data":[{"worker":6,"level":0,"data":[{"span":[168,182]," ...
《计算几何——算法与应用(第三版)》学习笔记1 - 扫描线(第1-4章)
系列文章
-> 《计算几何——算法与应用(第三版)》学习笔记1 - 扫描线(第1-4章)
《计算几何——算法与应用(第三版)》学习笔记2 - 空间索引(第5-7章)
番外篇
计算几何 - C++ 库的调研
Boost C++ Libraries学习 - Geometry
Boost C++ Libraries学习 - Boost.Polygon (GTL)
计算几何:导言
Voronoi 图(Voronoi diagram),可以为覆盖多个城市的商业区域建立模型,指挥机器人,甚至描述和模拟晶体的生长过程。
凸包的例子
平面的一个子集SSS被称为是“凸”的,当且仅当对于任意两点p,q∈Sp, q ∈ Sp,q∈S,线段pq‾\overline{pq}pq都完全属于SSS。
集合SSS的凸包CH(S)CH(S)CH(S),就是包含SSS的最小凸集——更准确地说,它是所有包含SSS的所有凸集的交集。
可以将平面有限点集PPP的凸包定义为:顶点取自于PPP且包含PPP中所有点的那个唯一的凸多边形(convex polygon)。
所以计算出一个点集的凸包可以取所有点对,如果其他所有 ...
EDA流程学习 - DRC/LVS/RCX Runset开发培训课程(DRC部分)
可以结合这篇文章看:EDA流程学习 - DRC中各种设计规则
有一个工具:scout,用来检查 DRC Code 是否书写正确。
最小宽度及最大宽度检查
根据单层与双层命令,可分为 5 类检查:
单层 INT:查单层图形的宽度
单层 EXT:查单层图形的间距
双层 INT:查一层图形伸入另一层图形的距离
双层 EXT:查两层图形的间距
双层 ENC:查一层图形被另一层图形包围的间距
A cut B:表示 A 有一部分和 B 重合,但不全部与 B 重合。
这个表示并不对称,下图中打勾的部分符合B cut A:
Enclosed Area:空心的洞或者环的面积。
Parallel Run Length:两个图形相互投影,得到的重合长度。
两个例子:
ENCLOSURE TO GT <0.18 ABUT >0<90,写了>0那么刚好是0的时候不会报错。
EXTERNAL TB DN <3.5 MEASURE ALL,如果不写MEASURE ALL会导致被包含在TB中的DN不被检查。
规则有一些隐含含义:
规则描述
值
隐含含义
对应规则中的写法 ...
EDA流程学习 - DRC中各种设计规则
以下参考:VLSI Concepts
一些DRC中用到的几何术语
一张图总览
如下图:
符号
层
说明
规则
A
Diffusion
Min Width
>=W.D
B
Diffusion
Min Space
>=S.D
E
N-Well
Min Width
>=W.NW
G
N-Well
Min Space to N+ Diffusion/Active
>=S1.NW
H
N-Well
Min Enclosure of P+ Diffusion/Active
<=E.NW
J
N-Well
Min Enclosure of N select
>=E1.NW
K
Poly
Min Width
>=W.PC
M
Poly
Min Poly Extnsion On Diffusion
>=E.PC
N
Poly
Min Diffusion Extension On Poly
<=E1.PC
P
Contact
Width (Minimum = Maximum)
=W.C
R
...
在Mac上使用运行远程GUI程序 - XQuartz + vscode
本地
安装xquartz
终端中使用如下命令
brew install --cask xquartz
因为需要从 github 上面 clone 一些东西,所以有可能卡很长时间而且失败,换源,或者多试几次。
接着从启动中打开XQuartz,并设置环境变量:
将export DISPLAY=:0加到.zshrc中并source之。
此处省略了服务器端的环境搭建。
使用 ssh 命令连接到远程服务器(记得加上-X参数),并输入xclock指令,如果一切正常会弹出如下窗口
vscode
Remote X11 (SSH)
Remote X11
其中,前者运行在本地的 vscode,后者运行于服务器。
遇到问题
DISPLAY设置失败
Remote X11 扩展报错:
Failed to get DISPLAY: Error: Error while signing data with privateKey: error:06000066:public key routines:OPENSSL_internal:DECODE_ERROR
解决办法:将本地私钥改成 PEM 格式
ssh-k ...
让我的vscode更好用 - 插件和快捷键
插件
Git Graph
Git History
GitLens
Better Comments
Night Owl
Markdown All in One
Markdown Preview Github Styling
PlantUML
TODO Highlight
Waka Time
GitHub Copilot
Git相关
Git Graph
(像乐谱一样)
Git History
右键菜单中能找到File History,就能方便地回退到特定的版本了。
GitLens
光标所在的行会显示提交人以及时间。
被增删改的代码旁边会出现提示,点击就可以查看版本对比内容,方便回退。
这个插件功能强大,还有付费功能。
界面
Better Comments
在设置中搜索到扩展,然后在settings.json中添加预设。
TODO Highlight
Night Owl
漂亮的蓝黑色主题。
Markdown编写
Markdown All in One
使用快捷键Cmd + Shift + P可以调出命令输入框,输入markdown即可找到该扩展对应的命令。
另外,书写过程 ...
远程调试C++程序 - 配置vscode的launch.json和tasks.json
参考vscode 官方文档
插件安装列表
C/C++
C/C++ Extension Pack
Clang-Format
CMake
CMake Tools
Remote - SSH
Remote - SSH: Editing Configuration Files
Remote Explorer
编辑代码
远程编辑
参考:vscode环境搭建 - SSH、Google Test 和 CMake
格式化代码
找到Clang-Format插件设置,将其中如下选项设置为Google:
Clang-format: Fallback Style
Clang-format › Language › C: Style
Clang-format › Language › Cpp: Style
Clang-format: Style
在设置中搜索Format On Save,打上勾
构建工程
CMake
点击 vscode 底部状态栏,选择编译器
选择一个比较新版本的编译器
之后 CMake 会自动运行
点击下面的[all]可以选择生成项目中某个可执行文件,默认生成所有;点击生成可以开始 ...