• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: 其他
  • 标签:

资源简介

实现中点分割剪裁算法,用不同颜色画出固定的剪裁矩形窗口和线段,然后运行剪裁命令,做剪裁,再显示剪裁结果。线段包括所有类型的5种线段。

资源截图

代码片段和文件信息

// OGL1.cpp : Defines the entry point for the console application.
//

#include “stdafx.h“
#include “windows.h“
#include  // Header File For The OpenGL32 Library
#include  // Header File For The GLu32 Library
#include  // Header File For The Glaux Library

#include  // Header File For The OpenGL32 tools Library
#include
#include

#define LEFT 1
#define RIGHT 2
#define BOTTOM 4
#define TOP 8
#define XL 100
#define XR 300
#define YB 100
#define YT 200

//int x1x2y1y2;

//坐标点编码
typedef struct point
{
int x;
int y;
int code;
}Point;



//给坐标点编码
int encode(int xint y)
{
 
int c;
c=0;
 
if(x c=c|LEFT;
else if (x>XR) 
c=c|RIGHT;
if(y else if(y>YT)
c=c|TOP;
return c;
}

//判断线段两端点与窗口的位置关系
int judge(int code1int code2)
{
if( (code1 == code2) && code1==0)
{
//printf(“线段在窗口内。\n“);
return 1;
}
else if( (code1 & code2) != 0)
{
//printf(“线段在窗口外。\n“);
return -1;
}
else 
{
//printf(“需要求交点。\n“);
return 0;
}
}

//不断中点求交点
Point point_of_intersection(Point P1 Point P2)
{
printf(“in point intersection\n“ );
// printf(“P1.x is %d P1.y= %dP1.code is %d\n“P1.x  P1.y  P1.code );
Point P;
// printf(“P1.x - P2.x= %d\n“P1.x - P2.x );
while( abs(P2.x - P1.x) > 1)
{
P1.code = encode(P1.x P1.y);
//求中点坐标并编码
P.x = (P1.x + P2.x) / 2;
P.y = (P1.y + P2.y) / 2;
P.code = encode(P.x P.y);
// printf(“p.code is %d \n“P.code );
// printf(“p.x is %d p.y is %d\n“P.xP.y );
if( (P1.code & P.code) != 0)
P1 = P;
else
P2 = P;

}

return P2;
}

void init (void)
{
    glClearColor (1.0 1.0 1.0 0.0);  // Set display-window color to white.
    glMatrixMode (GL_PROJECTION);       // Set projection parameters.
gluOrtho2D (0.0 400.0 0.0 300.0);
}


void initPoints(Point *P)
{

//定义第一组线段:一半在窗口内一半在窗口外
P[0].x=60;P[0].y=140;
P[0].code=encode(P[0].xP[0].y);
P[1].x=140;P[1].y=160;
P[1].code=encode(P[1].xP[1].y);

//定义第二组线段:全在窗口内
P[2].x = 120;P[2].y=120;
P[2].code=encode(P[2].xP[2].y);
P[3].x=200;P[3].y=150;
P[3].code=encode(P[3].xP[3].y);

//定义第三组线段:全在左上角窗口外
P[4].x = 20;P[4].y=180;
P[4].code=encode(P[4].xP[4].y);
P[5].x = 80;P[5].y=220;
P[5].code=encode(P[5].xP[5].y);

//定义第四组线段:全在右下角窗口外
P[6].x = 200;P[6].y=50;
P[6].code=encode(P[6].xP[6].y);
P[7].x = 350;P[7].y=120;
P[7].code=encode(P[7].xP[7].y);

//定义第五组线段:横穿窗口
P[8].x = 120;P[8].y=250;
P[8].code=encode(P[8].xP[8].y);
P[9].x = 320;P[9].y=150;
P[9].code=encode(P[9].xP[9].y);


}


void DrawLines()
{
// 定义10个坐标点,表示五组线段
Point P[10];

initPoints(P);


for(int i = 0; i < 10; )
{
Point temp;
Point jd1 jd2;
int ifneed; //是否需要求交点

ifneed = judge(P[i].code P[i + 1].code);

/* glVertex2i (P[i].x P[i].y);       // Specify line-segment geometry.
glVertex2i (P[i+1].x P[i+1].

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6798  2014-05-16 19:02  中点分割裁剪算法\MidpointLine.cpp

     文件        291  2013-02-26 00:00  中点分割裁剪算法\StdAfx.cpp

     文件        769  2013-02-26 00:00  中点分割裁剪算法\StdAfx.h

     目录          0  2014-05-28 13:28  中点分割裁剪算法

----------- ---------  ---------- -----  ----

                 7858                    4


评论

共有 条评论