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

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

資源簡介

進入程序后,左鍵點擊畫板生成對應點,兩點自動連線,拖動右鍵會畫出矩形框,對線段進行裁剪 裁剪算法采用的是采用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:

評論

共有 條評論