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

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

資源簡介

圖形學,用二維直線裁剪--梁友棟-Barsky算法裁剪一直線段;

資源截圖

代碼片段和文件信息


#include?
#include?
#include?
class?wcPt2D;
void?myclip(void);

class?wcPt2D
{
private:
GLfloat?xy;
public:
wcPt2D(GLfloat?xt=0.0GLfloat?yt=0.0)
{
x=xt;
y=yt;
}
void?setCoords(GLfloat?xCoordGLfloat?yCoord)
{
x=xCoord;
y=yCoord;
}
GLfloat?getx()?const
{
return?x;
}
GLfloat?gety()?const
{
return?y;
}
};
//clipTest函數,根據p、q來判斷是舍棄線段還是改變交點的參數。。
//p<0時,參數r用于更新u1;當p>0時參數r用于更新u2。如果更新了u1或u2后使u1>u2則舍棄該線段
//否則,更新適當的u參數,使新值僅僅縮短了縣城。
//當p=0且q<0時,舍棄該線程,因為該線段平行于邊界并且位于邊界之外。
//如果測試完p、q的四個值之后,結果并未舍棄該線段,則由u1、u2值決定裁減線段的端點。
GLint?clipTest(GLfloat?pGLfloat?qGLfloat?*u1GLfloat?*u2)
{
GLfloat?r;
GLint?returnValue=true;?????????????????//true:表示舍棄;faule:表示可見。
if(p<0.0)
{
r=q/p;
if(r>*u2)
returnValue=false;
else
if(r>*u1)
*u1=r;???????????????????????//u1取“進入“點的最大參數值

}
else
if(p>0.0)
{
r=q/p;
if(r<*u1)
returnValue=false;
else?if(r<*u2)
*u2=r;?????????????????????//u2取“離開“?點的最小參數值
}
else???????????????????????????????//p=0,且q<0。平行于邊界,而且在界外的線
if(q<0.0)?????????????
returnValue=false;
return?(returnValue);
}
void?lineClipLiangBarsk(wcPt2D?winMinwcPt2D?winMaxwcPt2D?p1wcPt2D?p2)
{
GLfloat?u1=0.0u2=1.0dx=p2.getx()-p1.getx()dy;
if(clipTest(-dxp1.getx()-winMin.getx()&u1&u2))
if(clipTest(dxwinMax.getx()-p1.getx()&u1&u2))
{
dy=p2.gety()-p1.gety();
if(clipTest(-dyp1.gety()-winMin.gety()&u1&u2))
if(clipTest(dywinMax.gety()-p1.gety()&u1&u2))
{
if(u2<1.0)
{
p2.setCoords(p1.getx()+u2*dxp1.gety()+u2*dy);//通過u2求得裁剪后的p2端點

}
if(u1>0.0)
{
p1.setCoords(p1.getx()+u

評論

共有 條評論

相關資源