资源简介
进入程序后,左键点击画板生成对应点,两点自动连线,拖动右键会画出矩形框,对线段进行裁剪
裁剪算法采用的是采用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单片机的人体感应灯设计
相关资源
- 交互式计算机图形学 第六版 OpenGL源代
- 图形学简单绘图系统
- OpenGL迷宫山东大学图形学实验三
- 计算机图形学走样反走样时钟
- c++QT5图形学-中点画圆完整工程文件
- 西北工业大学软件学院计算机图形学
- 计算机图形学实验源代码中南民族大
- 图形学各种曲线--Bezier曲线,B-样条曲
- 鼠标交互画圆及椭圆基于Bresenham、中
- 绘制任意斜率的直线段
- QSplat:基于点绘制的图形学开山之作
- 计算机图形学简单CAD系统
- 真实感图形学
- 计算机图形学多边形种子填充算法
- 计算机图形学 消隐
- 计算机图形学作业,中点算法画椭圆
- MFC中点圆的生成算法
- 改进的有效边表算法--计算机图形学
- 最好的CS游戏opengl、C++实现
- 梁友栋-直线裁剪算法图形学mfc
- 计算机图形学 清华大学教材 及 vc++
- 孔令德的计算机图形学实验及课程设
- 图形学消隐
- 计算机图形学大作业参考代码(VC版)
- 计算机图形学 图形变换 C++ MFC
- 用visual C++ 6.0编写的计算机图形的一些
- 计算机图形学简单多边形裁剪程序
- 计算机图形学 大作业 多功能图形学程
- MFC多边形画法--计算机图形学
- 计算机图形学 visual c++ 6.0 实时动画有
评论
共有 条评论