用Sutherland-Hodgman算法实现裁剪任意凸多边形

2023-10-27

一、 实验目的。
用Sutherland-Hodgman算法实现裁剪任意凸多边形

二、 实验工具
VC6.0
三、 实验步骤
思想:每次用窗口的一条边界以及其延长线来裁剪多边形。
裁剪得到的多边形的顶点由两部分组成:
落在可见一侧的原多边形顶点;多边形的边与裁剪窗口边界的交点
根据多边形每一边与窗口边所形成的位置关系,沿着多边形依次处理顶点会遇到四种情况:
(1)第一点 S 在不可见侧面,而第二点 P 在可见侧。处理方法:交点 I 和点 P 均被加入到输出顶点表中。
(2)S 和 P 都在可见侧。处理方法:P 被加入到输出顶点表中
(3)S 在可见侧,而 P 在不可见侧。处理方法:交点 I 被加入到输出顶点表中
(4)如果 S 和 P 都在不可见侧。处理方法:输出顶点表中不增加任何顶点

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

3.建立一个工程文件,将思路转化为c编程语言,进行编译。
代码如下:

在这里插入代码片
``

第一次代码:
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include<iostream>
#include<graphics.h>
#include<math.h>
using namespace std;
void CMyClip_A View::ClipedgeL (CPoint polypoint[], CPointclipwindow[], UINT polyum){
long xl, xr,yt, yb;
UINT i;
xl=clipwindow[0].x;
xr=clipwindow[0].x;
yt=clipwindow[0].y;
yb=clipwindow[0].y;
for(i=1;i<=4;i+t){
	if(xl>clipwindow[il.x)
	xl=clipwindow[i]·x;
	if(xc<clipwindow[i].x)
		xr=clipindow[i].x;
	if(yb>clipwindow[i]. y)
		yb=clipwindow[i].y;
	if(yt<clipwindow[i].y)
		yt=clipwindow[i]. y;
}

CPoint B[Polygon_Num],C[Polygon_Num];
UINT m_nA,m_nB;,
int x,y;
long teml, tem2:
m_nA=polynum://记载原始多边形顶点顶点个数
m_nB-0://记载新生成多边形顶点顶点个数
for(i=0;i<m_nA;i++){
	if (polypoint[i]. x<x1 && polypoint[i+1]. x<xl){ //判断多边形两个端点都在外部,不做处理
		continue;//如果是这种情况,就继续对下-条多边形边作判断//
				 }
  if(polypoint[i]. x>=xl && polypoint[i+l].x>=xl) //两端点都在内部,保留。因为每个保留的点在数组中只出现一次,且下一次判断时第二个端点一定要的//
  {
	  B[m_nB].x = polypoint[i].x;
	  B[m_nB].y =polypoint[i].y;
      m_nB=m_nB+1;
	  continue;
  }
  if
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用Sutherland-Hodgman算法实现裁剪任意凸多边形 的相关文章

  • python调用m文件

    系统环境 windows 64bit matlab 2018b 64bit python3 6 前提 windows下需要有matlab软件和python python调用m文件需要安装matlab engine 注意matlab版本与py

随机推荐

  • 类模板下运算符重载的两种用法

    1 template
  • java编写定时器,定时执行某个方法

    第一步 编写测试类 该类extends TimerTask 重新run 方法 run方法里面就是你要执行的逻辑代码 示例如下 import java text SimpleDateFormat import java util Date i
  • Python如何调用js函数?

    Python如何调用SDK的js函数 一 概述 二 环境准备 三 调用方法 步骤 四 Demo演示基础版 五 常见问题 六 深入了解 待更新 七 参考资料 一 概述 测试web前端 前端SDK web渗透流程等时 难免会需要调用前端js里面
  • 【Linux】浏览器写代码!部署code-server远程vscode网页

    部署code server远程vscode网页 在浏览器上写代码 参考文档 https developer aliyun com article 876967 slide 7 本文首发于 慕雪的寒舍 1 什么是code server 注意
  • 奔跑吧恐龙----基于JavaSwing的一个跑酷游戏

    1 游戏功能 随机出现障碍物 人物可以通过向上跳进行避免 游戏结束后出现分数 对难度进行一定的控制 当分数 gt 1000时难度升级 当分数 gt 4000时 难度再进行升级 并存在音乐播放功能 2 具体实现 2 1 model 1 Din
  • C++基于TCP/IP简单的客户端、服务器通信程序实例

    本篇文章实现了一个基于TCP 的一个非常简单的客户 服务器通信程序实例 该程序中通讯协议使用的是面向连接的TCP协议SOCK STREAM 服务器的ip地址为本地地址即 127 0 0 1 端口号为自定义的5099 大于1024即可 服务端
  • springBoot入门(快速搭建一个springBoot项目)

    目录 一 SpringBoot介绍 1 定义 2 springBoot简化的配置 3 应用打包 二 springBoot项目搭建 1 新建一个spring initializr项目 2 点击下一步 3 之后一个springBoot项目就构建
  • 好用的插件分享

    检查无用代码 Android studio gt 设置 gt Plugins gt 搜索PMD 安装QAPlug PMD 安装完成后重启Android studio
  • STM32--舵机(SG90)

    文章目录 一 介绍 二 工作原理 三 舵机的控制 四 设计流程 五 代码实现 六 舵机工程代码 七 备注 舵机 一 介绍 舵机是一种位置 角度 伺服的驱动器 适用于那些需要角度不断变化并可以保持的控制系统 目前在高档遥控玩具 如航模 包括飞
  • GitHub下载速度慢?找“马云”啊,干货帖

    大名鼎鼎的GitHub大家想必都知道 毕竟我这个无所事事的小白都知道 用多了GitHub的人应该对下面这种情况非常熟悉 当然 有的时候是不会下载失败的 还是会有个10k 8k的 注意我这里说的可不是工资 但是对于一个突然醒悟要好好学习的程序
  • Python编码问题总结

    问题一 当python中间处理非ASCII编码时 经常会出现如下错误 UnicodeDecodeError ascii codec can t decode byte 0x in position 1 ordinal not in rang
  • js对象方法Object.assign( )详解

    1 基本用法 Object assign方法用于对象的合并 将源对象 source 的所有可枚举属性 复制到目标对象 target var target a 1 var source1 b 2 var source2 c 3 Object
  • neo4j--Cypher查询调优与执行计划

    1 查询调优 1 1查询如何执行 Cypher执行引擎会将每个Cypher查询都转为一个执行计划 在执行查询时 执行计划将告知Neo4j执行什么样的操作 1 2查询性能分析 查看执行计划对查询进行分析时有两个Cypher语句可用 1 2 1
  • 关系型数据库和非关系型数据库类比

    1 关系型数据库 关系型数据库 是指采用了关系模型来组织数据的数据库 关系模型是在1970年由IBM的研究员E F Codd博士首先提出的 在之后的几十年中 关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型 简单来说 关系模
  • win10 WMDC安装

    解决方案 WMDC in Windows 10 junipersys com 参考连接 Previous WMDC fixes for Windows 10 junipersys com amd64 https junipersys com
  • linux中把程序启到前台,Linux程序前台后台切换

    1 在Linux终端运行命令的时候 在命令末尾加上 符号 就可以让程序在后台运行 root Ubuntu tcpserv01 2 如果程序正在前台运行 可以使用 Ctrl z 选项把程序暂停 然后用 bg number 命令把这个程序放到后
  • 知乎爬虫经验教程

    为了完成课程论文研究 暑假写了关于知乎的爬虫 把用户主页 回答中能爬到的数据全都爬下来了 接下来 把我踩过的坑跟大家分享 希望大家少走一些弯路 1 导入一些必要的python包 其中会包括我们接下来要使用的函数 import re impo
  • 疯壳AI人脸及语音识别教程2-8WIFI-TCP网络通信

    详情地址 https fengke club GeekMart views offline ai 购买链接 https fengke club GeekMart su fKw7Nb7oC jsp 视频地址 https fengke club
  • iOS 开发中的争议(二)UI到底应该用xib/storyboard完成,还是用手写代码来完成?

    文章来源 http www devtang com blog 2015 03 22 ios dev controversy 2 参考文章 关于代码手写UI xib和StoryBoard http blog csdn net likendsl
  • 用Sutherland-Hodgman算法实现裁剪任意凸多边形

    一 实验目的 用Sutherland Hodgman算法实现裁剪任意凸多边形 二 实验工具 VC6 0 三 实验步骤 思想 每次用窗口的一条边界以及其延长线来裁剪多边形 裁剪得到的多边形的顶点由两部分组成 落在可见一侧的原多边形顶点 多边形