Liang-Barsky算法思想及简单cpp实现

Liang-Barsky算法是一种快速的直线段裁剪方法,适用于图形学中的标准矩形窗口。通过参数方程表示直线段,并将其与窗口四边的入边和出边进行比较,确定裁剪后的起点和终点。通过计算参数u的值,确定线段与窗口边界的交点,进而裁剪出在窗口内的线段部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

liang-barsky算法是针对标准矩形更快的直线段裁剪算法

基本出发点是直线的参数方程

  • 首先给定一个矩形的窗口,我们将矩形的窗口的四条边分成两类:入边和出边
    在这里插入图片描述
  • 我们将需要裁剪的直线段(黑色表示)看成一条有方向的线段,该线段使用参数方程可以表示为:x = x1 + u * ( x2 - x1 ) , y = y1 + u* ( y2 - y1) (0 <= u <= 1) , 所以起始点的 u = 0 ,末点的 u = 1 ,越往左 u -> 负无穷 ,往右趋向于正无穷

在这里插入图片描述

  • 最终裁剪的线段起点是直线和两条入边的交点以及初始端点这三个点中参数 u 最大的那个点 ,根据上图例子就是给定线段的初始端点
  • 最终裁剪的线段终点是直线和两条出边的交点以及初始末点这三个点中参数 u 最小的那个点,根据上图例子就是给定线段与ymax的交点
  • 如果我们用 u1, u2 分别表示最终线段可见部分的起点与终点,则

u1 = max ( 0 , ul , ub )
u2 = min ( 1, ut , ur )

  • 参数式推导:
    设给定的线段的起始点为(x1,y1) 结束点为 (x2,y2)
    在这里插入图片描述当 pk == 0:
    如果 qk < 0: 则线段完全在给定矩形边界外,应当舍弃该线段
    当 pk != 0:
    如果qk < 0: 线段从裁剪边界的延长线的外部延申到内部,是入边的交点
    如果qk > 0: 线段从裁剪边界延长线的内部延伸到外部 ,是出边交点
    线段和窗口边界一共有四个交点,,根据pk的符号就知道那两个是入交点哪两个是出交点(pk<0对应入边交点,pk>0对应出边交点)
    可知uk = qk/pk ,则可根据这四个u值和u=0,u=1,一共6个u值就可以找到两个端点
#include <iostream>
#include<glut.h>
#include<Windows.h>
using namespace std;
#define ww 640   //屏幕的宽度
#define wh 480   //屏幕的高度
int xs, ys, xb, yb;
int rl = 200, rb = 200;
int rr = 400, rt = 400;
bool first;
//画线的方法
void lineNew(int x0, int y0, int xEnd, int yEnd)
{
   
 glClear(GL_COLOR_BUFFER_BIT);
 glColor3f(1.0f, 1.0f, 0.0f);  //画黄色
 glLineWidth(3);
 glBegin(GL_LINES)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值