zoukankan      html  css  js  c++  java
  • 多边形裁剪

    一、多边形的裁剪

    如果按线段的方法裁剪,得到的是一系列线段。

    而实际上,应该得到的是下图所示的有边界的区域:

    多边形裁剪算法的输出应该是裁剪后的多边 形边界的顶点序列!

    需要构造能产生一个或多个封闭区域的多边 形裁剪算法

    二、Sutherland-Hodgeman多边形裁剪

    该算法的基本思想是将多边形边界作为一个整体,

    每次用窗口的一条边对要裁剪的多边形和中间结果多边形进行裁剪,

    体现一种分而治之的思想

    把平面分为两个区域:

    包含有窗口区域的一个域称为可见侧;

    不包含窗口区域的域为不可见侧

    裁剪得到的结果多边形的顶点有两部分组成:

    (1)落在可见一侧的原多边形顶点

    (2)多边形的边与裁剪窗口边界的交点

    根据多边形每一边与窗口边所形成的位置关系,沿着多边形 依次处理顶点会遇到四种情况:

    (1)第一点S在不可见  侧面,而第二点P在 可见侧

    交点I与点 P均被加入到输 出顶点表中。

     

    (2)是S和P都在可见侧

     则P被加入到输出顶点表中

    (3)S在可见侧,而P在不可见侧

    则交点I被加入到输出顶点表中

    (4)如果S和P都在不可见侧

    输出顶点表中不增加任何顶点

    在窗口的一条裁剪边界处理完所有顶 点后,其输出顶点表将用窗口的下一 条边界继续裁剪

     

    while对于每一个窗口边或面 do

      begin

        if P1 在窗口边的可见一侧 then 输出P1

        for i=1 to n do

        begin

         if P1 在窗口边的可见一侧 then

        if P1+1 在窗口边的可见一侧 then 输出 P1+1

         else 计算交点并输出交点

        else if Pi+1 在窗口可见一侧,then 计算交点

          并输出交点,同时输出Pi+1

        end

      end

    end

    Sutherland-Hodgeman算法不足之处

    利用Sutherland-Hodgeman裁剪算法对凸多边形进行裁剪可以 获得正确的裁剪结果,但是凹多边形不行。

  • 相关阅读:
    docker安装nginx
    docker安装tomcat&部署javaweb程序
    linux/work
    Go语言入门篇-gRPC基于golang & java简单实现
    Go语言入门篇-jwt(json web token)权限验证
    Go语言入门篇-JSON&http调用
    Go语言入门篇-基本流程控制
    Go语言入门篇-基本类型排序和 slice 排序
    Go语言入门篇-高级数据类型
    Go语言入门篇-基本数据类型
  • 原文地址:https://www.cnblogs.com/cnblog-wuran/p/9830804.html
Copyright © 2011-2022 走看看