Weiler-Atherton多边形裁剪算法
来源:互联网 发布:php strcasecmp 编辑:程序博客网 时间:2024/05/21 19:35
来自:http://blog.csdn.net/liaojinyu282/article/details/6011177
这是一个通用的多边形裁剪算法,既可以裁剪凸多边形也可以裁剪凹多边。
通过下图来描述算法的执行过程
图中DCBA为裁剪窗口,dcba为要裁剪的多边形。在算法执行之前将多边形和裁剪窗口的交点分别加入他们的顶点序列。即图中的123456。
则多边形序列为:a,6,5,d,4,3,c,2,b,1
裁剪窗口序列为:A,5,4,D,C,1,B,2,3,6
从多边形顶点a开始按逆时针方向遍历多边形顶点。到达多边形与裁剪边界的交点6,此时线段是从裁剪区的外部进入裁剪区内部
(即交点6一个entering intersection),则在多边形序列上继续遍历直到找到第一个从边界“出去”的点或者一个已经遍历过的点,图中所示为交点5(称交点5为一个exiting intersection);
此时线段从裁剪区内出去,这时在裁剪窗口序列的当前顶点开始逆时针遍历(此时为交点5),到达交点4,线段d4指向多边形内部,交点4是一个entering intersection;
转换到多边形序列继续遍历,到交点3,交点3是一个exiting intersection;
转换到裁剪窗口序列逆时针遍历,到交点6,发现6已经访问过,得到顶点序列6543,即为一个要绘制的多边形;
这时退回到最后一个exiting intersection,即顶点3,在多边形序列上遍历,找到一个 entering intersection,即点2,然后按照上述过程得到一个顶点序列2b1B,此时多边形所有的点均已访问,算法结束;
整个算法就是先计算多边形和裁剪窗口的顶点序列,然后根据交点是一个entering intersection还是exiting intersection选择在不同的顶点序列上遍历,直到所有的点都访问完
输入给出多边形序列和裁剪窗口的序列,首先要一个预处理将他们的交点按依序插入各自的序列,一个比较直接的办法,可以直接按逆时针遍历这两个序列,每次取2个点组成一个线段与另一个序列的每条边比较计算交点,得出一个要插入的点集,然后按照该点集中的每个点到线段起点的距离按序插入,离起点近的就先插入;
参考 :
《计算机图形学》 赫恩
http://www.cs.fit.edu/~wds/classes/graphics/Clip/clip/clip.html
http://en.wikipedia.org/wiki/Weiler–Atherton_clipping_algorithm
- Weiler-Atherton多边形裁剪算法
- Weiler-Atherton多边形裁剪算法
- 多边形裁剪二:Weiler-Atherton算法
- 链表实现Weiler-Atherton多边形裁剪算法
- 多边形裁剪算法
- 基于Weiler-Atherton剪裁布尔运算openGL实现-2D
- Sutherland-Hodgman算法(多边形裁剪)
- Sutherland-Hodgman算法(多边形裁剪)
- Sutherlang-Hodgman 多边形裁剪算法
- Sutherland-Hodgman算法(多边形裁剪)
- 计算机图形学 - 多边形裁剪算法
- Sutherland-Hodgman算法(多边形裁剪)
- 2D中多边形裁剪算法
- 编程实现Sutherlang-Hodgman多边形裁剪算法
- 多边形裁剪一:Sutherland-Hodgman算法
- 多边形裁剪一:Sutherland-Hodgman算法
- 多边形裁剪
- 多边形的裁剪
- HDU 1385:Minimum Transport Cost【Floyd】
- php中数据库pdo的exec方法返回影响行数的问题
- nginx + tomcat 负载均衡+session复制共享
- POJ 2785 折半枚举
- 编译fdk-aac,执行批处理的时候出现这个错误,mingw32-gcc.exe: error: CreateProcess: No such file or directory的问题
- Weiler-Atherton多边形裁剪算法
- java设计模式—建造者模式
- requirejs 同过hack改变文件映射
- __try __try __finally __except 嵌套
- cmake编译文件生成android工程
- 欢迎使用CSDN-markdown编辑器
- HDOJ 1013题Digital Roots 大数,9余数定理
- js算法:分治法-棋盘覆盖
- 接口和抽象类