Computational Geometry ---- 计算几何学
文章目录
参考
python
C++
Java
博客
工具
python
Shapely
- sympy.spacial
- scipy.spacial
scikit-geometry (skgeom)
pyclipper
- GitHub - fonttools/pyclipper: Cython wrapper for the C++ translation of the A…
- C++ 的 clipper 库 python wrapper
PyGEOS
- GitHub - pygeos/pygeos: Wraps GEOS geometry functions in numpy ufuncs.
- C++ GEOS 库的 python wrapper
- 已经被合并到 shapely 中了
cgal-bindings
- cgal-swig-bindings/examples/python at main · CGAL/cgal-swig-bindings · GitHub
- Home · CGAL/cgal-swig-bindings Wiki · GitHub
- swig 编写,代码 python 不友好
- 需要和 cgal 一起安装
euclid
C/C++
GEOS
CGAL
Clipper
- GitHub - AngusJohnson/Clipper2: Polygon Clipping and Offsetting - C++, C# and…
- polygon 的布耳运算(clipping)和 平移(offsetting) 操作
Java
JTS (Java Topology Suite)
- GitHub - locationtech/jts: The JTS Topology Suite is a Java library for creat…
- c/c++ 的 geos 和这个项目同源
data model 说明
术语
| 名词 | 解释 |
|---|---|
| standards-compliant | 符合标准的 |
基础
两直线交点
HTTPS://WWW.CNBLOGS.COM/XZYXZY/P/10033130.HTML
HTTPS://IMAGES.CNBLOGS.COM/CNBLOGS_COM/XZYXZY/1374475/O_%E5%AE%9A%E6%AF%94%E5%88%86%E7%82%B9FLASH.PNG
- 参考上图
- A1P 与 A1A2 在同一条直线上
另外 C X B 等于 A1P X B
- 叉积的意义:平行四边形的面积
所以,A1P 与 A1A2 的比例 T
- 就是两个平行四边形的面积比例
- A1P / A1A2 = (C X B) / (A1P X B) = T
最后:P = A1 + A1A2 * T
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20// * 点向法表示直线 //调用前需保证 Cross(v, w) != 0 // P, v 一条直线 // Q, w 一条直线 Point GetLineIntersection(Point P, Vector v, Point Q, Vector w){ Vector u = P - Q; double t = Cross(w, u)/Cross(w, v); return Q + v*t; } // * 两点法表示直线 Point GetCrossPoint(Point A1, Point A2, Point B1, Point B2){ Vector a = A2 - A1; Vector b = B2 - B1; Vector c = B1 - A1; double t = Cross(c, b) / Cross(a, b); return A1 + a * t; }
两直线相交
两次跨立实验
B1A1 X B1A2 与 B2A1 X B2A2 是否异号
- (B1 —> A1, A2) 与 (B2 —> A1, A2) 构建向量
a1b1 x a1b2 与 a2b1 x a2b1 是否以后
- (a1 —> b1, b2) 与 (a2 —> b1, b2) 构建向量
scipy.spacial.ConvexHull
| |
概述
这是一个类 class,用来处理凸包问题
方法
hull.simplices
极边 Extreme Edge 的两个端点[终点,起点], 按逆时针方向
hull.vertices
极点 Extreme Point 的在 hull.points 中的索引 index
hull.points
ConvexHull 初始化用到的 points
图形计算库
simpy.spacial
python 符号运算库
scipy.spacial
python 库
cgal
https://www.cgal.org/ C++ 计算几何算法库 computational geometry algorithm library
算法
扫描线算法
线段交点的扫描线算法 Bentley-Ottmann algorithm
- wiki https://en.wikipedia.org/wiki/Bentley%E2%80%93Ottmann_algorithm#:~:text=The%20main%20idea%20of%20the,in%20sequence%20as%20it%20moves.&text=No%20three%20line%20segments%20intersect%20at%20a%20single%20point.
文章作者
上次更新 2024-01-05 (5c92d1c)