資源簡介
進入程序后,左鍵點擊畫板生成對應點,兩點自動連線,拖動右鍵會畫出矩形框,對線段進行裁剪
裁剪算法采用的是采用Cohen-Sutherland算法
代碼片段和文件信息
//////////////////////////////////////////////////////
//?程序名稱:最終版?試驗3-1實現直線段的裁剪算法
//?功??????能:進入程序后,左鍵點擊畫板生成對應點,兩點自動連線,拖動右鍵會畫出矩形框,對線段進行裁剪
// ???裁剪算法采用的是采用Cohen-Sutherland算法
//?編譯環境:Visual?C++?6.0,EasyX_2014冬至版
//?最后修改:2017-11-1?
#include???????//?引用圖形庫頭文件
#include?
#include?
#define?LEFT?1//根據位運算,設置對應范圍判斷的參數常量
#define?RIGHT?2
#define?BOTTOM?4
#define?TOP?8
double?encode(double?x?double?y?int?*codedouble?Edge[]/*邊的信息*/)
{?//判斷端點(xy)的編碼Edge數組中分別記錄的是?最左邊、最右邊的橫坐標,最上邊、最下邊的縱坐標,根據點位置設置端點編碼
int?c;
c=0;
if?(x else?if?(x>Edge[1])?c=c|RIGHT;//判斷端點是否在框的左右
if?(y else?if?(y>Edge[3])?c=c|TOP;//判斷端點是否在框的上下
*code=c;?
return?0;
}
double?C_S_LineClip(double?x1double?y1double?x2double?y2double?Edge[])
{//根據Cohen-Sutherland算法對之間進行裁剪,(x1y1)(x2y2)分別是被裁剪直線的兩個端點,
//Edge數組中分別記錄的是?最左邊、最右邊的橫坐標,最上邊、最下邊的縱坐標。
int?code1code2code;
double?xy;
encode(x1y1&code1Edge);
encode(x2y2&code2Edge);
while?(code1?!=0?||?code2?!=?0)
{
if?((code1?&?code2)?!=?0)//是否顯然不可見?
return?0;
code=code1;
if?(code1==0)?code=code2;//第一點完全可見
if?((LEFT?&?code)?!=?0)
{
x=Edge[0];
y=y1+(y2-y1)*(Edge[0]-x1)/(x2-x1);}//取新端點
else?if?((RIGHT?&?code)?!=?0)//判斷是否超出右邊,超出則取半
{
x=Edge[1];
y=y1+(y2?-y1)*(Edge[1]-x1)/(x2-x1);?}
else?if?((BOTTOM?&?code)?!=?0)//是否超出下邊,超出則取半
{
y=Edge[2];
x=x1+(x2-x1)*(Edge[2]-y1)/(y2-y1);}
else?if?((TOP?&?code)?!=?0)//是否超出上邊,超出則取半
{
y=Edge[3];
x=x1+(x2-x1)*(Edge[3]-y1)/(y2-y1);?}
if?(code==code1)//循環截止,即兩點重合
{
x1=x;?y1=y;?encode(xy?&code1Edge);?}
else
{
x2=x;?y2=y;?encode(xy?&code2Edge);?}?
}
line(x1y1x2y2);
return?0;
}
double?main()
{
void?Cut_Rectangle(double?Edge[]int?xint?ydouble?linee[][4]int?Num);//畫裁剪方框
double?Edge[4]={0};//截圖方框各點信息
double?linee[20][4]={0};//矩陣存點
char?Help[]=“按任意鍵繼續“;//提示消息
char?Help1[]=“左鍵點擊生成點兩點自動畫出一條線,右鍵按住拖動畫出裁剪框“;
int?Num=0;//已錄入點的個數
int?flag=0;//判斷畫線完成否為0時等待輸入起點,為1時等待輸入終點,為2時表示可以畫線
int?i=0;
MOUSEMSG?m;//定義一個鼠標消息
printf(“程序已裝載好,按任意鍵進入程序“);
getch();
initgraph(640?700);?
while(1)
{
outtextxy(00Help1);
m?=?GetMouseMsg();//?獲取一條鼠標消息
switch(m.uMsg)
{
case?WM_LBUTTONDOWN:
- 上一篇:操作系統的模擬實現 C++編寫
- 下一篇:基于51單片機的人體感應燈設計
評論
共有 條評論