91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 4KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2021-06-16
  • 語言: C/C++
  • 標(biāo)簽: 編碼裁剪??

資源簡(jiǎn)介

圖形學(xué)作業(yè),用二維直線裁剪--區(qū)域編碼算法裁剪一直線段;

資源截圖

代碼片段和文件信息

#include?
#include?
//////////////////////////////////////////////////////////////////////////
//區(qū)域碼
const?GLint?leftBitCode=0x1;
const?GLint?rightBitCode=0x2;
const?GLint?buttonBitCode=0x4;
const?GLint?topBitCode=0x8;
GLint?winWidth=640winHeight=480;
class?screenPT
{
public:
GLfloat?xy;
};
inline?GLint?inside(GLint?code){return?GLint(!code);} //判斷點(diǎn)是否在裁剪區(qū)內(nèi)
inline?GLint?reject(GLint?code1GLint?code2){return?GLint(code1&code2);} //判斷能否完全排除一條線段
inline?GLint?accept(GLint?code1GLint?code2){return?GLint(!(code1?|?code2));} //判斷能否完全接受一條線段
inline?void?swapPT(screenPT&?ascreenPT&?b){screenPT?t=a;a=b;b=t;} //交換兩個(gè)點(diǎn)
inline?void?swapCode(GLubyte&?aGLubyte&?b){GLubyte?t=a;a=b;b=t;} //交換兩個(gè)區(qū)域碼
//確定一個(gè)點(diǎn)所在位置的區(qū)域碼
GLubyte?encode(const?screenPT&?pconst?screenPT&?winMinconst?screenPT&?winMax)
{
GLubyte?code=0x00;
if(p.x code?|=?leftBitCode;
if(p.x>winMax.x)
code?|=?rightBitCode;
if(p.y code?|=?buttonBitCode;
if(p.y>winMax.y)
code?|=?topBitCode;
return?code;
}
//在屏幕上畫一條未裁剪的線,由裁剪函數(shù)調(diào)用
void?drawOneLine(const?screenPT&?aconst?screenPT&?b)
{
glBegin(GL_LINES);
glVertex2f(a.xa.y);
glVertex2f(b.xb.y);
glEnd();
}
//裁剪函數(shù)
void?lineClip(screenPT?winMinscreenPT?winMaxscreenPT?lineBeginscreenPT?lineEnd)
{
GLubyte?code1code2; //保存兩個(gè)端點(diǎn)的區(qū)域碼
GLboolean?done=falseplotLine=false; //判斷裁剪是否結(jié)束和是否要繪制直線
GLfloat?k; //斜率
while(!done)
{
code1?=?encode(lineBeginwinMinwinMax);
code2?=?encode(lineEndwinMinwinMax);
if(accept(code1code2)) //當(dāng)前直線能完全繪制
{
done=true;
plotLine=true;
}
else
{
if(reject(code1code2)) //當(dāng)前直線能完全排除
done?=?true;
else
{
if(inside(code1)) //若lineBegin端點(diǎn)在裁剪區(qū)內(nèi)則交換兩個(gè)端點(diǎn)使它在裁剪區(qū)外
{
swapPT(lineBeginlineEnd);
swapCode(code1code2);
}
//計(jì)算斜率
if(lineBegin.x?!=?lineEnd.x)
k?=?(lineEnd.y-lineBegin.y)/(lineEnd.x-lineBegin.x);
//開始裁剪以下與運(yùn)算若結(jié)果為真,
//則lineBegin在邊界外,此時(shí)將lineBegin移向直線與該邊界的交點(diǎn)
if(code1?&?leftBitCode)
{

評(píng)論

共有 條評(píng)論

相關(guān)資源