-
大小: 2KB文件類型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-05-13
- 語言: C/C++
- 標(biāo)簽:
資源簡介
已知線段 P1P2的兩個端點坐標(biāo)分別是 P1(-0.4, 0.8)和 P2(0.8, -0.4),
裁剪窗口為(0, 0)~(0.8, 0.8),請使用 Cohen-Sutherland 算法構(gòu)造一個完成該裁剪任務(wù)的完整程序。
代碼片段和文件信息
#include
#define?LEFT?1
#define?RIGHT?2
#define?BOTTOM?4
#define?TOP?8
int?x1=-40y1=80?x2=80?y2=-40?XL=0?XR=80?YB=0?YT=80;
int?x11=-40y11=80?x21=80?y21=-40;
int?encode(int?xint?y)
{
????int?c?=?0;
????if?(x?????if?(x?>?XR)?c?|=?RIGHT;
????if?(y?????if?(y?>?YT)?c?|=?TOP;
????return?c;
}
void?CS_LineClip()??
{
????int?x?y;
????int?code1?code2?code;
????code1?=?encode(x1?y1);
????code2?=?encode(x2?y2);
????while?(code1?!=?0?||?code2?!=?0)
????{
????????if?(code1?&?code2)
????????????return;
????????if?(code1?!=?0)
????????????code?=?code1;
????????else
????????????code?=?code2;
????????if?(LEFT?&?code)
????????{
????????????x?=?XL;
????????????y?=?y1?+?(y2?-?y1)*(XL?-?x1)?/?(x2?-?x1);
????????}
????????else?if?(RIGHT?&?code)
????????{
????????????x?=?XR;
????????????y?=?y1?+?(y2?-?y1)*(XR?-?x1)?/?(x2?-?x1);
????????}
????????else?if?(BOTTOM?&?code)
????????{
????????????y?=?YB;
????????????x?=?x1?+?(x2?-?x1)*(YB?-?y1)?/?(y2?-?y1);
????????}
????????else?if?(TOP?&?code)
????????{
????????????y?=?YT;
????????????x?=?x1?+?(x2?-?x1)*(YT?-?y1)?/?(y2?-?y1);
????????}
????????if?
- 上一篇:QT編寫的電子時鐘 c++源碼
- 下一篇:一元多項式運算器
評論
共有 條評論