• 大小: 126KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: C/C++
  • 标签: 直线裁剪  

资源简介

用C语言实现的直线裁剪算法,初学计算机图形学的童鞋可以参考参考

资源截图

代码片段和文件信息

#include “ggltools.h“

void gltRasterText(double x double y const char *text void *font)
{
    if(text == NULL) return ;
    
    glRasterPos2d(x y);
    for(int i=0; text[i] != ‘\0‘; i++)
    {
        glutBitmapCharacter(font text[i]);
    } 
}

void gltLine2d(double x0 double y0 double x1 double y1)
{
    glBegin(GL_LINES);
        glVertex2d(x0 y0);
        glVertex2d(x1 y1);
    glEnd();
}

void gltRect2d(double x0 double y0 double x1 double y1)
{
    glBegin(GL_LINE_STRIP);
        glVertex2d(x0 y0);
        glVertex2d(x1 y0);
        
        glVertex2d(x1 y1);
        
        glVertex2d(x0 y1);
        
        glVertex2d(x0 y0);
    glEnd();
}

char gltClipCode(const GPoint2d &pt const GPoint2d &top const GPoint2d &bottom)//
{
    char code = 0;
    
    if(pt.y() > top.y()) code |= 0x01;
    else if(pt.y() < bottom.y()) code |= 0x02;
    
    if(pt.x() > bottom.x()) code |= 0x04;
    else if(pt.x() < top.x()) code |= 0x08;
    
    return code;
}

template
void swap(T&aT&b)
{
T t=a;
a=b;
b=t;
}

//直线的裁剪

bool gltLineClip2d(GPoint2d &pt0 GPoint2d &pt1 
                   const GPoint2d &top const GPoint2d &bottom)
{
bool isSwap=false;
char c0c1;//全部被接受,c0和c1 按位与 为0
while(true)
{
c0=gltClipCode(pt0topbottom);
c1=gltClipCode(pt1topbottom);

if((c0 | c1)==0) 
{
if(isSwap) swap(pt0pt1);
return true;
}
if((c0 & c1)!=0)
{
return false;
}
if(c0==0)
{
swap(pt0pt1);
swap(c0c1);
}

if(c0 & 0x01)//在yt之上
{
pt0.mX=pt0.x()+(pt1.x()-pt0.x())*(top.y()-pt0.y())/(pt1.y()-pt0.y());
pt0.mY=top.y();
}
else if(c0 & 0x02)//在yt之下
{

pt0.mX=pt0.x()+(pt1.x()-pt0.x())*(bottom.y()-pt0.y())/(pt1.y()-pt0.y());
pt0.mY=bottom.y();

}
else if(c0 & 0x04)//在yt 之右
{

pt0.mY=pt0.y()+(pt1.y()-pt0.y())*(bottom.x()-pt0.x())/(pt1.x()-pt0.x());
pt0.mX=bottom.x();

}
else if(c0 & 0x08)//在yt之左
{

            pt0.mY=pt0.y()+(pt1.y()-pt0.y())*(top.x()-pt0.x())/(pt1.x()-pt0.x());
pt0.mX=top.x();

}


}

    return false;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2011-12-05 10:49  clip\
     文件        3955  2010-08-29 22:31  clip\Clip.dsp
     文件         533  2010-08-29 22:29  clip\Clip.dsw
     文件       82944  2011-12-05 10:49  clip\Clip.ncb
     文件       93184  2011-12-05 10:49  clip\Clip.opt
     文件        1167  2011-12-05 10:47  clip\Clip.plg
     文件        2202  2011-12-05 09:26  clip\ggltools.cpp
     文件         514  2006-04-18 20:29  clip\ggltools.h
     文件         335  2005-12-19 21:13  clip\gpoint2d.cpp
     文件         514  2006-04-18 20:18  clip\gpoint2d.h
     文件        3677  2010-08-29 22:31  clip\main.cpp
     目录           0  2011-12-05 10:47  clip\Release\
     文件       49152  2011-12-05 10:47  clip\Release\Clip.exe
     文件      335912  2011-12-05 10:47  clip\Release\Clip.pch
     文件        2472  2011-12-05 10:47  clip\Release\ggltools.obj
     文件        1410  2011-12-05 08:27  clip\Release\gpoint2d.obj
     文件        8282  2011-12-05 08:27  clip\Release\main.obj
     文件       33792  2011-12-05 10:48  clip\Release\vc60.idb

评论

共有 条评论