• 大小: 2KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: C/C++
  • 标签:

资源简介

已知线段 P1P2的两个端点坐标分别是 P1(-0.4, 0.8)和 P2(0.8, -0.4), 裁剪窗口为(0, 0)~(0.8, 0.8),请使用 Cohen-Sutherland 算法构造一个完成该裁剪任务的完整程序。

资源截图

代码片段和文件信息

#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 < XL) c |= LEFT;
    if (x > XR) c |= RIGHT;
    if (y < YB) c |= BOTTOM;
    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 

评论

共有 条评论