apriltag源码阅读
12 Jul 2023笔记 TBD
-- unionfind.h 和 unionfind.c - done
并查集的实现
-- zarray.h 和 zarray.c - done
基本数据结构的管理
Defines a structure which acts as a resize-able array ala Java’s ArrayList.
-- zhash.h 和 zhash.c - done
哈希表实现
A hash table for structs and primitive types that stores entries by value.
比较巧妙的
void zhash_iterator_init(zhash_t *zh, zhash_iterator_t *zit)
{
zit->zh = zh;
zit->czh = zh;
zit->last_entry = -1;
}
void zhash_iterator_init_const(const zhash_t *zh, zhash_iterator_t *zit)
{
zit->zh = NULL;
zit->czh = zh;
zit->last_entry = -1;
}
然后判断的时候
void zhash_iterator_remove(zhash_iterator_t *zit)
{
assert(zit->zh); // can't call _remove on a iterator with const zhash
zhash_t *zh = zit->zh;
-- string_utils.h 和 string_utils.c - done
字符串处理相关函数
-- svd22.h 和 svd22.c - doing
计算奇异值和向量,用于计算一个2x2矩阵的奇异值分解(Singular Value Decomposition,SVD)
-- doubles.h doubles_floats_impl.h floats.h - doing
其实就是实现类似于模板的函数,关键在于下面三句话
#define TRRFN(root, suffix) root ## suffix
#define TRFN(root, suffix) TRRFN(root, suffix)
#define TFN(suffix) TRFN(TNAME, suffix)
用的时候只需要 #include "doubles.h"
或者 "floats.h"
就可以了
-- matd.h 和 matd.c - doing
Defines a matrix structure for holding double-precision values with data in row-major order (i.e. index = row*ncols + col)
nrows and ncols are 1-based counts with the exception that a scalar (non-matrix) is represented with nrows=0 and/or ncols=0
-- debug_print.h - done
下面这个用法很常见,在别的地方也见到过
#define debug_print(fmt, ...) \
do { if (DEBUG) fprintf(stderr, "%s:%d:%s(): " fmt, strrchr("/"__FILE__,'/')+1, \
__LINE__, __func__, ##__VA_ARGS__); fflush(stderr);} while (0)
-- math_util.h - done
注意一些坑 比如
static inline int mod_positive(int vin, int mod) {
return (vin % mod + mod) % mod;
}
-- time_util.c 和 time_util.h 时间处理相关函数,被 timeprofile.h(性能分析器) 包含 - done
主要是翻译区别好
ms - millisecond 毫秒
us - microseconds 微秒
ns - nanoseconds 纳秒
-- postscript_utils.h - done
以 PostScript 语言编写命令,以渲染图像
-- getopt.h 和 getopt.c - doing
解析参数命令
-- zmaxheap.h 和 zmaxheap.c - done
大顶堆实现