矩形截取直线段扫描算法——Liang–Barsky 算法C++实现

矩形截取直线段扫描算法——Liang_Barsky_clipper算法简介以及C++实现

目录

C++代码实现

//将原来以(x1,y1)为起点 (x2,y2)为终点的线段
//截取矩形(xmin,ymin, xmax, ymax)内部的线段,
//替换原来的起点、终点。
bool Liang_Barsky_clipper(double xmin, double ymin, double xmax, double ymax,
                          double& x1, double& y1, double& x2, double& y2) {
  double dx = x2 - x1;
  double dy = y2 - y1;
  double p[5];
  p[1] = -dx;
  p[2] = -p[1];
  p[3] = -dy;
  p[4] = -p[3];
  double q[5];
  q[1] = x1 - xmin;
  q[2] = xmax - x1;
  q[3] = y1 - ymin;
  q[4] = ymax - y1;
  double u1 = 0, u2 = 1;
  for (size_t i = 1; i <= 4; i++)
  {
    double r = q[i]/p[i];
    if (p[i] < 0)
    {
      if (r > u2) return false;
      if (r > u1) u1 = r;     
    }
    else if (p[i] > 0)
    {
      if (r < u1) return false;
      if (r < u2) u2 = r;      
    }
    else if (q[i] < 0) return false;
  }
  //do x2 y2 first 
  x2 = x1 + u2*dx;  y2 = y1 + u2*dy;
  x1 = x1 + u1*dx;  y1 = y1 + u1*dy;
  return true;
}//liang_barsky_clipper

简介待续···

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值