Sutherland–Hodgman算法

✍ dations ◷ 2025-11-22 05:35: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表示 ),这可以通过简单地使用叉积 实现。

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

相关

  • 查尔斯·约瑟夫·米纳德查尔斯·约瑟夫·米纳德(法语:Charles Joseph Minard;发音:;1781年3月27日-1870年10月24日),法国土木工程师,以其对资讯图表在土木工程与统计上的应用闻名;另外,米纳德也以其以地图呈现
  • 卡尔加里火焰卡尔加里火焰(英语:Calgary Flames)是位于加拿大阿尔伯塔省卡尔加里(简称卡城)的国家冰球联盟(NHL)队伍,隶属于西大区太平洋分区。火焰队的主要竞争对手是阿省的另一支NHL球队埃德蒙
  • The Astrophysical Journal天文物理期刊(The Astrophysical Journal)是在天文学及天体物理学领域重要的研究期刊,于1895年创刊,至2008年底都由美国芝加哥大学出版社发行;2009年1月起改由英国物理学会出版社
  • 进驻维希法国日军入侵法属印度支那(日语:仏印進駐),又名为越南远征、入侵法属中南半岛,是大日本帝国在第二次中日战争期间,为封锁中华民国及阻止美国通过海防至云南之中越铁路以运送军
  • 中国国民党总裁中国国民党主席是中国国民党的最高领导人,自2001年起由中国国民党全体党员直选。《党章》第19条规定“主席之任期为四年,连选得连任一次。”从第七任党主席开始将根据2013年中
  • 浊小舌内爆音浊小舌内爆音是一种极为罕见的辅音,国际音标写作⟨ʛ⟩(大写拉丁字母G小写化,且右上角有一钩)。 当符号成对出现时,左边的是清音,右边的是浊音。阴影区域表示被认为是不可能的发音
  • 南普拉特河南普拉特河(英语:South Platte River)是普拉特河的主要支流,流经美国的科罗拉多州和内布拉斯加州,长约707千米。
  • 津田健次郎津田健次郎(1971年6月11日-),日本男性声优、演员。大阪府出身。2018年2019年2020年2014年2016年2017年2018年2020年2017年2019年电视/电影
  • C2萘C2萘是指含有一个苯环和两个碳原子取代基的有机化合物。这些化合物有10种二甲基萘和2种乙基萘:其它分子式为C12H12的化合物
  • 布巴赫湖坐标:48°30′03″N 8°14′41″E / 48.500714°N 8.244606°E / 48.500714; 8.244606布巴赫湖(德语:Buhlbachsee),是德国的湖泊,位于该国西南部,由巴登-符腾堡州负责管辖,处于拜尔