资源简介
进入程序后,左键点击画板生成对应点,两点自动连线,拖动右键会画出矩形框,对线段进行裁剪
裁剪算法采用的是采用Cohen-Sutherland算法
代码片段和文件信息
//////////////////////////////////////////////////////
// 程序名称:最终版 试验3-1实现直线段的裁剪算法
// 功 能:进入程序后,左键点击画板生成对应点,两点自动连线,拖动右键会画出矩形框,对线段进行裁剪
// 裁剪算法采用的是采用Cohen-Sutherland算法
// 编译环境:Visual C++ 6.0,EasyX_2014冬至版
// 最后修改:2017-11-1
#include // 引用图形库头文件
#include
#include
#define LEFT 1//根据位运算,设置对应范围判断的参数常量
#define RIGHT 2
#define BOTTOM 4
#define TOP 8
double encode(double x double y int *codedouble Edge[]/*边的信息*/)
{ //判断端点(xy)的编码Edge数组中分别记录的是 最左边、最右边的横坐标,最上边、最下边的纵坐标,根据点位置设置端点编码
int c;
c=0;
if (x else if (x>Edge[1]) c=c|RIGHT;//判断端点是否在框的左右
if (y else if (y>Edge[3]) c=c|TOP;//判断端点是否在框的上下
*code=c;
return 0;
}
double C_S_LineClip(double x1double y1double x2double y2double Edge[])
{//根据Cohen-Sutherland算法对之间进行裁剪,(x1y1)(x2y2)分别是被裁剪直线的两个端点,
//Edge数组中分别记录的是 最左边、最右边的横坐标,最上边、最下边的纵坐标。
int code1code2code;
double xy;
encode(x1y1&code1Edge);
encode(x2y2&code2Edge);
while (code1 !=0 || code2 != 0)
{
if ((code1 & code2) != 0)//是否显然不可见
return 0;
code=code1;
if (code1==0) code=code2;//第一点完全可见
if ((LEFT & code) != 0)
{
x=Edge[0];
y=y1+(y2-y1)*(Edge[0]-x1)/(x2-x1);}//取新端点
else if ((RIGHT & code) != 0)//判断是否超出右边,超出则取半
{
x=Edge[1];
y=y1+(y2 -y1)*(Edge[1]-x1)/(x2-x1); }
else if ((BOTTOM & code) != 0)//是否超出下边,超出则取半
{
y=Edge[2];
x=x1+(x2-x1)*(Edge[2]-y1)/(y2-y1);}
else if ((TOP & code) != 0)//是否超出上边,超出则取半
{
y=Edge[3];
x=x1+(x2-x1)*(Edge[3]-y1)/(y2-y1); }
if (code==code1)//循环截止,即两点重合
{
x1=x; y1=y; encode(xy &code1Edge); }
else
{
x2=x; y2=y; encode(xy &code2Edge); }
}
line(x1y1x2y2);
return 0;
}
double main()
{
void Cut_Rectangle(double Edge[]int xint ydouble linee[][4]int Num);//画裁剪方框
double Edge[4]={0};//截图方框各点信息
double linee[20][4]={0};//矩阵存点
char Help[]=“按任意键继续“;//提示消息
char Help1[]=“左键点击生成点两点自动画出一条线,右键按住拖动画出裁剪框“;
int Num=0;//已录入点的个数
int flag=0;//判断画线完成否为0时等待输入起点,为1时等待输入终点,为2时表示可以画线
int i=0;
MOUSEMSG m;//定义一个鼠标消息
printf(“程序已装载好,按任意键进入程序“);
getch();
initgraph(640 700);
while(1)
{
outtextxy(00Help1);
m = GetMouseMsg();// 获取一条鼠标消息
switch(m.uMsg)
{
case WM_LBUTTONDOWN:
- 上一篇:操作系统的模拟实现 C++编写
- 下一篇:基于51单片机的人体感应灯设计
相关资源
- 计算机图形学 透视图算法
- Bezier曲线算法
- 计算机图形学VSC++生成时钟报告含代码
- 计算机图形学直线段的扫描转换C++实
- Cantor集算法实现
- 开放源码的计算机图形学几何算法包
- 计算机图形学课程设计皮球运动动画
- MFC 中点切割算法实现线段裁剪
- 计算机图形学考试内容-Opengl-会移动的
- 计算机图形学 课程设计 作业
- 双三次B样条曲面算法 计算机图形学
- 三次B样条曲线算法 计算机图形学 案
- Bezier曲线MFC实现源代码
- 计算机图形学实验之消隐处理
- 计算机图形学——立方体旋转 VC MFC
- 二维区域图形裁剪
- 计算机图形学大作业 二维图形变换
- 北京邮电大学大三下计算机图形学作
- 计算机图形学 四面体的消隐
- 利用VC++实现Sutherland-Hodgman算法多边形
- 使用opengl的图形学大作业
- 计算机图形学直线、圆、多边形画法
- CohenSutherland裁剪算法和中点分割裁剪
- Cohen-Sutherland 算法线段裁剪
- 球的绘制与消隐
- 立方体的绘制与消隐
- 计算机图形学教程第二版实验生成“
- 计算机图形学图形的区域填充
- 计算机图形学正十二面体旋转
- 梁友栋-Barsky直线裁剪算法 VC实现
评论
共有 条评论