polygon clipping之Sutherland-Hodgman Algorithm
来源:互联网 发布:华杉讲透 孙子兵法知乎 编辑:程序博客网 时间:2024/06/03 09:07
Sutherland-Hodgman算法
Sutherland-Hodgman算法也叫逐边裁剪法,该算法是萨瑟兰德(I.E.Sutherland)和霍德曼(Hodgman)在1974年提出的。这种算法采用了分割处理、逐边裁剪的方法。
一,基本思想:
一次用窗口的一条边裁剪多边形。
考虑窗口的一条边以及延长线构成的裁剪线该线把平面分成两个部分:可见一侧;不可见一侧。多边形的各条边的两端点S、P。它们与裁剪线的位置关系只有四种
情况(1)仅输出1个顶点P;
情况(2)输出0个顶点;
情况(3)输出线段SP与裁剪线的1个交点I;
情况(4)输出线段SP与裁剪线的1个交点I和1个终点P
二、算法实现:
1、已知:多边形顶点数组src,顶点个数n,
定义新多边形顶点数组dest。
2、赋初值:用变量flag来标识:
0表示在内侧,1表示在外侧。
3、对多边形的n条边进行处理,对当前点号的考虑为:0~n-1。
for(i=0;i<n;i++)
{
if(当前第i个顶点是否在边界内侧?)
{
if(flag!=0) /*前一个点在外侧吗?*/
{
flag=0;/*从外到内的情况,将标志置0,作为下一次循环的前一点标志*/
(dest + j) =求出交点; /*将交点dest放入新多边形*/
j++;
}
(dest + j)= (src + i); /*将当前点srci放入新多边形*/
j++;
}
else
{
if(flag==0) /*前一个点在内侧吗?*/
{
flag=1;/*从内到外的情况,将标志置1,作为下一次循环的前一点标志*/
(dest + j) =求出交点; /*将交点dest放入新多边形*/
j++;
}
}
s= (src + i); /*将当前点作为下次循环的前一点*/
}
三,算法特点:
Sutherland-Hodgeman多边形裁剪算法具有一般性,被裁剪多边形可以是任意凸多边形或凹多边形,裁剪窗口不局限于矩形,可以是任意凸多边形。
上面的算法是多边形相对窗口的一条边界进行裁剪的实现,对于窗口的每一条边界依次调用该算法程序,并将前一次裁剪的结果多边形作为下一次裁剪时的被裁剪多边形,即可得到完整的多边形裁剪程序。
- polygon clipping之Sutherland-Hodgman Algorithm
- Line clipping之cohen-sutherland Algorithm
- polygon clipping之Greiner-Hormann Algorithm
- Sutherland-Hodgman多边形裁剪
- Sutherland-Hodgman算法
- Sutherland-Hodgman算法(多边形裁剪)
- Sutherland-Hodgman算法(多边形裁剪)
- Sutherland-Hodgman算法(多边形裁剪)
- Sutherland-Hodgman算法(多边形裁剪)
- Polygon Rasterization之Scanline Polygon Rasterization Algorithm
- 多边形裁剪一:Sutherland-Hodgman算法
- 多边形裁剪一:Sutherland-Hodgman算法
- 裁剪算法 - Cohen Sutherland Clipping的原理及Java实现
- scan line polygon fill algorithm
- 直线矩形视口裁剪算法 Cohen–Sutherland algorithm
- 名人故事之 Ivan Edward Sutherland
- Android 5.0学习之Tinting和Clipping
- UIpanel之修改 clipping size 数值
- Cloud Foundry:我们的博客APP - 如何绑定服务
- eclipse使用ServletActionContext.getRequest总是出错的解決方法
- ios应用开发Objective-C语法快速参考
- 《从程序员到项目经理》读书笔记(五) :程序员加油站 -- 懂电脑更要懂人脑
- 编译打包Apache源码
- polygon clipping之Sutherland-Hodgman Algorithm
- 解决eclipse中无法直接使用Base64Encoder的问题
- 5月风怒
- polygon clipping之Greiner-Hormann Algorithm
- wireshark过滤器小记
- 《从程序员到项目经理》读书笔记(六):程序员加油站 -- 完美主义也是一种错
- mongodb安装与服务配置
- Fence Repair
- 提交数据get和post的区别