Sutherland–Hodgman算法

✍ dations ◷ 2025-11-26 12:37:26 #计算机图形学,算法

Sutherland–Hodgman算法是裁剪多边形的算法。它通过轮流延长每个凸多边形的边,并且只选择在可见一侧的顶点来完成任务。

该算法从目标多边形中所有顶点的输入列表开始。接下来,剪裁多边形的一条边在两个方向上无限延伸,同时遍历目标多边形的边。如果输入列表中的顶点位于扩展的剪裁多边形线的可见侧,则它们会插入到输出列表中,并且目标多边形与剪裁多边形的延长后的边相交的顶点会添加到输出列表。

使用一个阶段的输出列表作为下一个阶段的输入列表,对每个剪辑多边形侧重复进行此过程。剪裁多边形的所有边都经过处理后,最终生成的顶点列表将定义一个完全可见的新单个多边形。请注意,如果目标多边形在剪裁多边形外部的顶点处凹入 ,则新多边形可能具有重叠的边缘——这对于渲染是可接受的,但不适用于其他应用程序,例如计算阴影。

给定一个剪裁多边形的一组边,和一个目标多边形的顶点列表,下面的过程将目标多边形根据剪裁多边形进行剪裁。

   List outputList = subjectPolygon;        for (Edge clipEdge in clipPolygon) do      List inputList = outputList;      outputList.clear();          for(int i = 0 ; i < inputList.count ; i += 1) do         Point current_point = inputList;         Point prev_point = inputList;             Point Intersecting_point = ComputeIntersection(prev_point, current_point, clipEdge)             if (current_point inside clipEdge) then            if (prev_point not inside clipEdge) then               outputList.add(Intersecting_point);            end if            outputList.add(current_point);                  else if (prev_point inside clipEdge) then            outputList.add(Intersecting_point);         end if          done   done

当算法终止时,将在找到裁剪后多边形的顶点。请注意,如果它位于该边缘作为多边形的剩余部分的相同侧上的点被定义为边缘 。如果剪裁多边形的顶点始终沿逆时针方向列出,那么这等效于测试该点是否位于直线的左侧(left表示 ,right表示 ),这可以通过简单地使用叉积 实现。

是一个函数,为清楚起见在此省略了该函数,它返回线段和无限边的交点。请注意,仅在已知存在这种相交的情况下才调用它,因此可以简单地将两条线都视为无限长。

相关

  • 希腊黑暗时代希腊黑暗时代(英语:Greek Dark Ages),又称荷马时代(根据荷马史诗)、几何时代(根据当时的几何艺术),是指希腊历史中从公元前11世纪迈锡尼文明覆灭到公元前9世纪第一个城邦的建立的历史
  • 查理七世查理七世(法语:Charles VII,1403年2月22日-1461年7月22日),绰号胜利者(法语:le Victorieux)、忠于职守者(法语:le Bien-Servi),瓦卢瓦王朝第五位国王(1422年-1461年在位)。他最后打赢百年战
  • 芍药Paeonia edulis Salisb.Paeonia albiflora Pall.芍药(学名:Paeonia lactiflora),又称作白芍'、杭白芍、金芍药,是一种芍药科芍药属的著名草本花卉。多年生草本,高60-80厘米,地下有圆
  • 科罗拉多洛矶科罗拉多洛矶队(英语:Colorado Rockies)是一支位于科罗拉多州丹佛的美国职棒大联盟球队,隶属国家联盟西区。洛矶于1991年进行筹建,并在1993年正式成军进行比赛,主场为库尔斯球场(Co
  • 南加州都会铁路南加州都会铁道(Metrolink),又译:南加州通勤铁路,大都会通勤铁路,或南加州城铁(标识:SCAX)是一个为南加州洛杉矶及周边地区提供通勤铁路服务的系统,目前该系统有7条线路以及55个火车站
  • 北安地斯板块北安地斯板块(North Andes Plate)是南美洲的小型板块,位于安地斯山脉北部,受南美洲板块和纳斯卡板块挤压。由于纳斯卡板块沉入北安地斯板块,因此这个地区经常发生地震和火山爆发
  • 大卫·德霍尔特大卫·德霍尔特(荷兰语:David de Gorter,1717年4月30日-1783年4月8日),荷兰物理学家和植物学家。他曾经在大学任教,是俄女皇伊丽莎白·彼得罗芙娜·罗曼诺娃的皇家物理学家,同时是俄
  • 乙醛酸还原酶乙醛酸还原酶(英语:glyoxylate reductase,EC 1.1.1.26)是一种以NAD+或NADP+为受体、作用于供体CH-OH基团上的氧化还原酶。这种酶能催化以下酶促反应:这种酶主要参与乙醛酸和二羧
  • 约翰·约翰逊 (作曲家)约翰·约翰逊(冰岛语:Jóhann Jóhannsson,冰岛语音标:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","
  • 链式前向星链式前向星是一种用于存储图的数据结构,一般认为是由Jason911发明的。链式前向星采用了邻接表的思想,本质上就是用链表实现的邻接表。可以使用数组模拟链表,定义head,to,nxt,ed