CGA裁剪算法之线段裁剪算法
常用的线段裁剪算法有三种:【1】Cohen_SutherLand裁剪算法,【2】中点分割裁剪算法,【3】参数化方法。
1. Cohen_SutherLand裁剪算法
为了能快速的判断一条直线与矩形窗口属于何种位置关系,Cohen_SutherLand裁剪算法采用如下的编码方案,因此又称为“编码裁剪算法”。
在编码裁剪算法中采用了如下图所示的空间划分和编码方案:
编码的[上, 下, 右, 左], 即上: 1000, 下:0100,右:0010, 左:0001,分别对应的十进制数: 上:8, 下:4, 右:2, 左:1。所以在矩形窗口(包含四个边的边界)左上,左下,右上,右下编码如下图。
aaarticlea/png;base64,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" alt="" width="477" height="307" />
裁剪一条线段时,先求出两端点所在的区号code1和code2,有如下情况:
(1)若code1 = 0且code2 = 0,则说明线段的两个端点均在窗口内,那么整条线段必在窗口内,应取之,直线可以直接显示;
(2)若code1和code2经按位与运算的结果不为0,则说明两个端点同在窗口的上 方、下方、左方或右方。这种情况下,对线段的处理是弃之,直线不进行显示。
(3)如果上述两种条件都不成立,则按第三种情况处理。求出线段与窗口某边的交点,在交点处把线段一分 为二,其中必有一段完全在窗口外,可弃之,对另一段则重复上述处理,如线段P1P2, 则最终得到的显示线段为P3P4,即为裁剪后的线段,然后进行显示。
算法分析:
因为需要对窗口的不同防线进行编码,所以只适合方形的窗口,不适合圆形的窗口裁剪处理。
程序如下:
////////////////裁剪算法////////////////////////
#define TOP_EDGE 8
#define BOTTOM_EDGE 4
#define RIGHT_EDGE 2
#define LEFT_EDGE 1 class CBassClip
{
public: public:
bool isInited; }; class CCohenSutherLandClip:public CBassClip
{
public:
CCohenSutherLandClip()
{
isInited = false;
}
bool cohen_SutherLandClip(Point &p_startPos, Point &p_endPos, Point &p_startResult, Point &p_endResult);
void readClipInformation(Point &p_winRU, Point &p_winLB);
private:
//声明出编码获取说明
unsigned char getCompPointCode(Point &p_Point);
private:
Point m_winLB, m_winRU; }; //初始化裁剪信息
inline void CCohenSutherLandClip::readClipInformation(Point &p_winRU, Point &p_winLB)
{
this->m_winLB = p_winLB;
this->m_winRU = p_winRU; this->isInited = true;
}
//获取指定点的窗口位置编码
inline unsigned char CCohenSutherLandClip::getCompPointCode(Point &p_Point)
{
assert(isInited);
unsigned char code = 0x00;
//边界位置算窗口内
if (p_Point.y > m_winRU.y )
code |= ;
if (p_Point.y < m_winLB.y )
code |= ;
if (p_Point.x > m_winRU.x )
code |= ;
if (p_Point.x < m_winLB.x )
code |= ;
return code;
}
//编码裁剪算法实现
inline bool CCohenSutherLandClip::cohen_SutherLandClip(Point &p_startPos, Point &p_endPos, Point &p_startResult, Point &p_endResult)
{
assert(isInited);
bool accept, done; float x,y;
accept = false;
done = false; unsigned char code0,code1, codeout;
code0 = getCompPointCode(p_startPos);
code1 = getCompPointCode(p_endPos);
do{
if(!(code0 | code1))//窗口内部
{
accept = true ;
done = true;
}
else if(code0 & code1)//窗口外部
done = true;
else//不确定
{
if(code0 != )
codeout = code0;
else
codeout = code1; if(codeout & LEFT_EDGE)
{
y = p_startPos.y + (p_endPos.y-p_startPos.y)*(m_winLB.x-p_startPos.x)/(p_endPos.x-p_startPos.x);
x = m_winLB.x;
}
else if(codeout & RIGHT_EDGE){
y = p_startPos.y + (p_endPos.y-p_startPos.y)*(m_winRU.x-p_startPos.x)/(p_endPos.x-p_startPos.x);
x = m_winRU.x;
}
else if(codeout & BOTTOM_EDGE){
x = p_startPos.x + (p_endPos.x-p_startPos.x)*(m_winLB.y-p_startPos.y)/(p_endPos.y-p_startPos.y);
y = m_winLB.y;
}
else if(codeout & TOP_EDGE){
x = p_startPos.x + (p_endPos.x-p_startPos.x)*(m_winRU.y-p_startPos.y)/(p_endPos.y-p_startPos.y);
y = m_winRU.y;
} if(codeout == code0)//开始顶点处理完毕
{
p_startResult.x = x;
p_startResult.y = y;
code0 = getCompPointCode(p_startResult);
}
else
{
p_endResult.x = x;
p_endResult.y = y;
code1 = getCompPointCode(p_endResult);
}
}
}while(!done);
return accept;
}