Sutherland–Hodgman算法

✍ dations ◷ 2025-11-28 03:01:20 #计算机图形学,算法

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

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

相关

  • 平民会议平民会议(拉丁语:Concilium Plebis)是古代罗马共和国的主要大会和立法机构,平民可以通过该机构通过法律,选举地方行政官,审理司法案件。唯有平民保民官有权召开大会。会议可选举平
  • 家庭消费家庭消费(英文:Household Consumption)是以家庭为统计单位的消费数字,为满足家庭成员所需的食衣住行所有相关费用,家庭消费的来源为家庭成员所有收入的可支配所得。影响家庭消费
  • 暨南大学出版社暨南大学出版社是中华人民共和国的一家出版社,成立于1989年,社址位于广东省广州市,由国务院侨务办公室主管、暨南大学主办。
  • 行政院卫生福利部卫生福利部(简称卫福部)是中华民国有关公共卫生、医疗与社会福利事务的最高主管机关,同时监督各县市政府卫生局(处)、社会局(处)。其前身为1971年成立的“行政院卫生署”,2013年改制
  • 丽娅·萨隆加丽娅·萨隆加(英语:Lea Salonga,1971年2月22日-),菲律宾歌手、演员,以演出《西贡小姐》音乐剧闻名,曾获奥立弗奖、东尼奖、剧评人奖、圈外剧评人奖、世界戏剧奖等大奖肯定,是首位以单
  • 帕特格罗姆乌帕齐拉帕特格罗姆乌帕齐拉(孟加拉语:পাটগ্রাম)是孟加拉国的一个乌帕齐拉,位于朗布尔专区的拉尔莫尼哈德县。帕特格罗姆乌帕齐拉的坐标为26°21′N 89°01′E / 26.350°N 89.0
  • 帕里尼亚尔格帕里尼亚尔格(法语:Parignargues)是法国加尔省的一个市镇,位于该省中部偏西南,属于尼姆区。该市镇总面积11.01平方公里,2009年时的人口为604人。帕里尼亚尔格人口变化图示
  • 鲍勃·凯恩鲍勃·凯恩(英语:Bob Kane,原名:罗伯特·卡恩 Robert Kahn,1915年10月24日-1998年11月3日),是一名美国的著名漫画家、编剧,是著名漫画《蝙蝠侠》的原始作者,即“蝙蝠侠之父”。他出生
  • 克拉克斯维尔 (密苏里州)克拉克斯维尔(英语:Clarksville)是一个美国城市,位于密苏里州派克县。根据2010年的人口普查,当地人口为442人。根据美国人口普查局,该城市的总面积为0.82平方英里(2.12平方千米),其中
  • 叶卡捷琳娜一世叶卡捷琳娜一世·阿列克谢耶芙娜(俄语:Екатерина I Алексеевна ;1684年4月15日-1727年5月17日,1725年—1727年在位)是俄罗斯帝国女皇,有些中文依照英文(Catherin