Sutherland–Hodgman算法

✍ dations ◷ 2025-12-01 02:39:21 #计算机图形学,算法

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

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

相关

  • 呼吸中止呼吸中止、呼吸暂停(英文:Apnea)指的是呼吸完全停止。呼吸一旦终止,将不会有吸气及相关的肌肉动作且肺的体积将保持不变。端视呼吸道被锁死的程度与肺部跟外界环境的气流通气度
  • 着色性干皮症着色性干皮症(Xeroderma pigmentosum, XP)是一种遗传性疾病。患者皮肤细胞被阳光中的紫外线破坏之后不能自行修复,于儿童期即很易诱发癌变。发病率为1/25万。表皮细胞中的DNA在
  • 阿片阿片样肽受体或阿片类受体、阿片受体(英语:Opioid receptors)是一类以阿片样肽为配体的G蛋白偶联受体。内源性类阿片物质包括强啡肽、脑啡肽(英语:enkephalin)、内啡肽、endomorph
  • 新十大建设新十大建设计划,指2003年11月由时任中华民国总统陈水扁指示、行政院院长游锡堃宣布的国家整体建设计划,以5年时间用5千亿新台币扩大公共建设投资,计划于2005年6月立法院预算审
  • 爱米尔·涂尔干埃米尔·涂尔干(法语:Émile Durkheim,法语发音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code20
  • 全州全州可以指:
  • 杨正中杨正中(1954年-),中国国民党政治人物,在2010年11月27日于台中市市议员选举当选市议员,现任第二届台中市议员。杨正中的Facebook专页
  • 乡民乡民有以下的意思:
  • 弗兰茨·博普弗兰茨·博普(德语:Franz Bopp,德语:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code2000","Gentiu
  • 陈敬容陈敬容(1917年-1989年),原名陈懿范,原籍四川乐山,中国现代作家、诗人。1932年春读初中时开始学习写诗。1934年底前往北京自学中外文学,并在北京大学和清华大学中文系旁听。第一首诗