Sutherland–Hodgman算法

✍ dations ◷ 2025-11-25 00:17:36 #计算机图形学,算法

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表示 ),这可以通过简单地使用叉积 实现。

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

相关

  • 行政区划以下是美国俄勒冈州36个县的列表。俄勒冈州宪法(英语:Oregon Constitution)并没有明确规定县城:第六条,包括行政机关,只是简单地规定:更多俄勒冈州县名和地名的信息都在俄勒冈州
  • 干白葡萄酒干白葡萄酒(le vin blanc),“干”是从香槟酒酿造中借用的一个词,即不添加任何水、香料、酒精等添加剂,直接用纯葡萄汁酿造的酒。葡萄榨汁后,立即将葡萄皮核过滤出去,葡萄汁酿成酒
  • 高雄关帝庙坐标:22°37′51″N 120°19′54″E / 22.630851°N 120.331697°E / 22.630851; 120.331697高雄关帝庙,旧名五块厝武庙,是位于台湾高雄市苓雅区的关帝庙。此庙原名“关帝厅”,
  • 核潜艇核动力潜艇,简称核子潜艇、核潜艇,是以核反应堆为动力来源的潜艇。由于这种潜艇的生产与操作成本,加上相关设备的体积与重量,采用这种动力来源的潜艇几乎都是军事用途,仅有少数核
  • 1001年
  • 车田正美车田正美(1953年12月6日-)日本1980年代重要的男性漫画家,出生于东京都中央区,是周刊《少年Jump周刊》的台柱作者之一。以希腊神话为故事背景的漫画作品《圣斗士星矢》,成为20世纪8
  • 巨林猪大林猪(学名:Hylochoerus meinertzhageni),是偶蹄目猪科大林猪属中唯一的一种,分布于西非和中部非洲地区。其种加词“meinertzhageni”得名于英国军官及动物学家理查德·梅纳茨哈
  • 囊鼠火山口囊鼠属(Cratogeomys) 东囊鼠属(Geomys) 粗毛囊鼠属(Orthogeomys) 墨西哥囊鼠属(Pappogeomys) 平齿囊鼠属(Thomomys) 裸尾囊鼠属(Zygogeomys)囊鼠科,学名Geomyidae,也叫
  • 阁骨岛阁骨岛(泰语:เกาะกูด),一译沽岛,是坐落于泰国东侧的一个岛屿,行政区划属于达叻府阁骨县。该岛是泰国东侧海岸距离泰国湾最远的岛屿。它是泰国第四大岛屿,也是位处于达叻府管
  • 沙孟海沙孟海(1900年6月11日-1992年10月10日),原名沙文若,字孟海,号沙邨、兰沙、石荒、决明等,浙江省鄞县(现宁波市鄞州区)塘溪镇沙村人,中国当代书法家、篆刻家、学者。1914年,入读宁波浙江