CyrusBeck

Cyrus-Beck图像裁剪算法归纳  此算法能使用任意多边形对一条直线段进行裁剪。 类GLdoublePoint: 公有—GLdouble x ,y;类line:                 公有—GLdoublePoint first,second;linelist:                 line型数据组成的链表,用于描述多边形; 伪代码:int  CyrusBeck(line&   阅读详情

#include "myglbase.h"
#include "glut.h"
#include "vector"
#include "iostream"
using namespace  std;

class Line2Segment
{
 public:
  Point2 first ;
  Point2 second ;

  Vector2 norm()
  {
   Vector2 c = second - first ;
   Vector2 normalVector = c.GetNormalVector();
   return normalVector;
  }

  Line2Segment()
  {
   first.x=first.y=0;
   second.x=second.y=0;
  }

  Line2Segment(Point2  first,Point2  second)
  {
   this->first = first;
   this->second = second;
  }

  Line2Segment(Line2Segment& line2)
  {
   first = line2.first;
   second = line2.second;
  }
};

class Line2
{
 public:
  Point2 pt ;
  Vector2 norm;

  Line2()
  {
   pt.x=pt.y=0;
   norm.x=0;
   norm.y=0;
  }
  Line2(Point2 pt,Vector2 norm)
  {
   this->pt=pt;
   this->norm=norm;
  }
  Line2(const Line2& line2)
  {
   pt=line2.pt;
   norm = line2.norm;
  }

};
class Line2List
{
 public:
  vector<Line2> line;

  int num()
  {
   return line.size();
  }

  void push_back(Line2 newLine)
  {
   line.push_back(newLine);
  }
  Line2& operator[](int index)
  {
   if ((unsigned int)index >= line.size())  //注意size是unsigned int
   {
    throw "Out of range in  Line2List";
   }
   return line[index];
  }
};

 

int chopCI(double&tIn,double&tOut,double number,double denom)
{
 double tHit ;
 if(denom < 0) //射线是射入
 {
  tHit = number / denom ;
  if (tHit > tOut)
  {
   return 0 ;
  }
  else if(tHit>tIn)
  {
   tIn = tHit;
  }
 }
 else if(denom > 0)
 {
  tHit =  number / denom;
  if (tHit<tIn)
  {
   return 0 ;
  }
  if (tHit<tOut)
  {
   tOut = tHit;
  }
 }
 else if(number<=0) //denom为0,射线与直线平行
 {
  return 0 ;   //在外半空间
 }

 return 1;
}


//线段和凸多边形的交点 (二维)
int CyrusBeckClip(Line2Segment& seg,Line2List& L)
{
 double number,denom;
 double tIn = 0.0,tOut = 1.0 ;  //候选区间为[0,1]
 Vector2 c, tmp ;
 c = seg.first-seg.second; //直线的参数表示 R(t)=A+c*tHit
 for (int i=0;i<L.num();i++)
 {
  //利用公式 tHit=n*(B-A)/(n*c)  其中A和c是目的直线参数表示,B和n是另一条直线点法向量
   tmp = L.line[i].pt - seg.first;
   number = L.line[i].norm * tmp ;
   denom = L.line[i].norm * c ;
   if (!chopCI(number,denom,tIn,tOut))
   {
    return 0  ; //提前结束
   }
 }

 //注意tIn和tOut都是基于A+c*tHit ;所以在计算seg截点时,先计算seg.second;
 //否则,A的值,即seg.first就变化了
 if(tOut <1.0)
 {
  //书上做法
//   seg.second.x = seg.first.x + c.x * tOut ;
//   seg.second.y = seg.first.y + c.y * tOut ;
  //我已经对操作符进行了重载了
  seg.second = seg.first + c * tOut;

 }
 if (tIn>0.0)
 {
  //书上做法
//   seg.first.x = seg.first.x + c.x * tIn ;
//   seg.first.y = seg.first.y + c.y * tIn ;
  //我已经对操作符重载
  seg.first = seg.first + c * tIn;
 }
 return 1;
}


int main()
{
 return 0 ;
}

Cyrus-Beck算法抗锯齿曲线绘制课程设计与源码解析 Cyrus-Beck算法是一种广泛应用于计算机图形学中的线段与多边形相交检测的算法。该算法的核心在于高效地检测线段与多边形边界的交点,为解决计算机辅助设计、虚拟现实、动画制作中的相关问题提供了坚实的基础。 阅读详情

相关推荐

OpenGL Cyrus-Beck 算法截取射线

OpenGL Cyrus-Beck 算法截取射线 OpenGL Cyrus-Beck 算法截取射线 OpenGL Cyrus-Beck 算法截取射线 OpenGL Cyrus-Beck 算法截取射线 OpenGL Cyrus-Beck 算法截取射线 OpenGL Cyrus-Beck 算法截取射线 OpenGL Cyrus-Beck 算法截取射线

Cyrus-Beck算法思想

最近在复习计算机图形学,又被这个算法给难倒了,记得第一次学就找了好多资料,当时也没记得写个博客啥的记下来,这次一定要写下来,可不能再搞忘了(╥﹏╥),如果有不对的地方欢迎指正~ Cyrus-Beck算法是一种凸多边形裁剪算法,也叫做参数化裁剪算法。下面给出书上的例子: 如下图所示,是一个凸多边形区域R和一条线段,目标是求出线段落在区域R中的部分。 将线段用参数方程表示: 其中, 接下来我们直接上图: 图中A点是区域边界上一点,由它引出来一条内法线,P是线段上任意一点

m0_74357009的博客 1244

OpenGL 凸多边形截取线段 Cyrus-Beck 算法

OpenGL 凸多边形截取线段 Cyrus-Beck 算法 OpenGL 凸多边形截取线段 Cyrus-Beck 算法 OpenGL 凸多边形截取线段 Cyrus-Beck 算法 OpenGL 凸多边形截取线段 Cyrus-Beck 算法 OpenGL 凸多边形截取线段 Cyrus-Beck 算法 OpenGL 凸多边形截取线段 Cyrus-Beck 算法 参考rorger的博文 http://blog.youkuaiyun.com/rorger/archive/2011/04/26/6364536.aspx http://blog.youkuaiyun.com/rorger/archive/2011/04/26/6364878.aspx

计算机图形学:liang算法和Cyrus-Beck算法

最后我还有一个发现,但应该也被人发现过,那就是P1P2与四条边界的交点为q1,q2,q3,q4的话,在P1P2与矩形有交集的前提下,对这六个点的x坐标[y坐标也行]进行排序,那么第3、4个点就是需要显示的线段的端点。这很容易理解,点积>0时就可能中内部嘛,这就限定了t[直线参数]的一个范围,每个这样的边限定的范围的交集就是t的范围;也是确定了上限组和下限组,这张图还好,起码给了上下限组的概念,有的书是完全不给这个概念的;其实上限组顾名思义,其中的线段给出的限定,可以确定t的一个上限,下限组也顾名思义;

weixin_62953519的博客 1328

Cyrus-Beck算法课程设计及源码

Cyrus-Beck算法课程设计及源码,程序和报告都是好的,无错误,已成功编译

直线的四种裁剪算法

基于openGL的四种直线裁减算法,cohen-sutherland算法,中点分割裁剪算法,梁友栋算法,beck算法。

Cyrus Beck(参数化)裁剪算法基于opengl实现

  Cyrus Beck裁剪算法是计算机图形学中的一个实验,这个实验的难点在于理解,而不在于实现。这个算法也是基础算法里比较有趣的一个。CB算法只针对凸多边形,对于凹多边形不适用。     Cyrus Beck算法要求我们对多边形的每条边进行讨论,从而找出真正的入点和出点。CB算法也叫参数化裁剪,那是因为其中用到了初中的几何原理,相似三角形,如果你将实验用到的几个矢量进行简单的平移延长就能发现所谓...

陈奕迅的博客 4093

Cyrus_Beck多边形窗口裁剪

Cyrus_Beck多边形窗口裁剪,源码,能运行

2.qt-Cyrus-Beck算法(凸多边形的线裁剪算法-C++实现)

该算法比Cohen-Sutherland算法复杂不少, 它允许对非矩形窗口进行线剪裁。它还消除了Cohen-Sutherland算法中所需的重复计算。4.计算剪裁线向量与所有边缘的法线之间的点积,为正则为入点、否则为出点。3.计算每个边顶点与剪切线的向量与边的法线之间的点积(对于所有边)。5.从每组中选择一个't'值,并将其放入线的参数形式中以计算坐标。1.计算每条边的法线。2.计算剪裁线的向量。

抵抗时间扭曲,坚持做一件有意义的事 2157

nature子刊:MCNN基于电池故障诊断的模型约束的深度学习方法

本研究提出了一种基于模型约束神经网络(MCNN)的锂离子电池在线故障诊断方法,整合物理模型与深度学习,有效解决了随机工况下传统方法诊断精度低、依赖故障样本等问题。通过统计修正电池包模型和双向LSTM网络,实现了电池状态的高精度预测(平均RMSE 3.9%),并设计模型耦合自动编码器提取可解释特征。在包含18.2百万条真实车辆数据的验证中,该方法故障检测TPR在FPR=0.1时达85%,较基准方法提升超46.5%,且能提前30分钟预警内部短路等故障。研究还展示了算法在跨电池包结构迁移中的优越性,为工业应用提供

hasakie的博客 1758

海外支付实战:虚拟信用卡订阅ChatGPT Plus等服务的完整指南

在跨境数字服务消费中,支付环节常因地区限制、银行风控等因素受阻。其核心原理在于国际信用卡交易需通过发卡行风控系统,而国内银行对高频、小额或商户名非常规的境外线上交易敏感,导致成功率不稳定。为解决这一痛点,虚拟信用卡技术应运而生,它通过服务商生成关联预充值账户的虚拟卡号,提供地域灵活性与资金可控性,显著提升了支付通过率。这项技术的价值在于以较低学习成本,为个人用户打通了访问ChatGPT Plus、Midjourney、Claude Pro等前沿AI服务的支付通道。其典型应用场景包括订阅各类海外SaaS、内容

weixin_42531579的博客 1022

图形管线基础(二)

图形管线基础

weixin_39289457的博客 933

天龙八部源码深度解析:从宠物系统到副本机制(C++游戏开发实战)

本文深度解析《天龙八部》源码架构,重点剖析宠物系统状态机实现与副本动态加载机制等核心模块。通过C++代码示例展示宠物AI状态迁移逻辑和副本场景管理技术,为现代游戏开发提供兼容性改造方案与设计启示。适合游戏开发者学习经典MMORPG的工程化实现路径。

weixin_29011239的博客 386

计算机图形学——裁剪

裁剪作用:选择显示的内容--图形在窗口内的部分被显示出来,窗口外的部分被裁剪掉图形中每个图形基本元素都要经过裁剪,因此裁剪直接影响整个图形系统的效率。 裁剪窗口:矩形,凸多边形,任意多边形裁剪类型:二维裁剪、三维裁剪裁剪对象:直线段、多边形、文字等裁剪方法:直线的裁剪方法: Sutherland-Cohen算法 , Cyrus-Beck算法,梁友栋-Barsky算法多边形的裁剪方法:Suthe...

微赚开发者技术分享博客 3577

一位海外开发者的 OpenSPG KAG 实践分享

KAG 是一个以创建和操作知识图谱为核心的框架。知识图谱是数据之间相互关联的可视化和结构化表示,对于搜索引擎、推荐系统和机器学习等应用至关重要。KAG 的目标是提供一个强大的平台,使开发者能够:轻松构建图谱;通过增强算法丰富数据;集成人工智能,以进行更精确的推理。通过理解 KAG,可以明显看出,这个框架旨在帮助从初学者到专业开发者,在项目中创造更优的解决方案。它在简便性和集成方面的优势,使其成为下一代基于数据的应用程序的前景工具。

金融机器智能社区 3405

从手机到自动驾驶:MIPI-CSI2协议演进史与车规级改造要点

本文追溯了MIPI-CSI2协议从智能手机摄像头到自动驾驶核心传感器的演进历程。重点剖析了该协议在车规级改造中面临的严苛挑战,包括物理层稳定性、EMC防护、功能安全与数据可靠性等关键要点,并探讨了其在多传感器融合与高带宽实时传输中的工程实践。

weixin_28318011的博客 308

直线裁剪算法

此算法 就是Cyrus-Beck裁剪算法 1.判断dx,dy是否为零作相应的简单处理,并返回 2.下面通过例子说明第2步的原理,现在先给出原理 如果P1P2与裁剪区域有交点,那么P1P2与裁剪区域存在交集,使得交集中的任一元素t同时满足下列不等式 xmin ymin 其中,dx = x2 - x1, dy = y2 - y1,若(1)∩(2)= 空集

mybloglucis009的专栏 1279

LIO-SAM编译ubuntu20.04 Noetic

一、下载二、编译&&解决报错报错如下。

Kenneth666888的博客 689

Cyrus-Beck算法的计算方法

Cyrus-Beck算法的计算方法

Lees0nの博客 1047

AMBA-AXI and ACE协议详解(十)

本章介绍了ACE协议中的Barrier事务机制,包括内存屏障和同步屏障两种类型。

Crazzy_M的博客 613

Python爬虫教程:抓取区块链交易信息及加密货币市场数据

随着区块链技术和加密货币的迅猛发展,区块链交易和加密货币市场的数据逐渐成为金融、技术、经济研究等领域的热点。对于开发者和研究者而言,实时获取区块链交易数据和加密货币市场行情,对于投资分析、市场预测、技术研究等具有重要的参考价值。本文将通过Python爬虫技术,介绍如何抓取区块链交易信息及加密货币市场数据,详细阐述数据获取的原理、技术方案、实现方法以及抓取到的数据的存储与分析。我们将依托最新的爬虫技术,如requestsSeleniumScrapy,以及相关的数据处理库(如pandasmatplotlib。

2201_76125261的博客 2777

【图形学】多边形裁剪算法综述

系列综述:💞目的:本文是个人学习多边形裁剪知识整理的,整理期间努力理解论文作者含义,并增加了自己的详述和注解。🥰来源:材料主要源于多边形裁剪相关论文进行的,每个知识点的学习和深入主要参考各平台大佬的文章

qq_43840665的博客 5171

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Cyrus-Beck裁剪算法及OpenGL实践

  恩..接着就是Cyrus-Beck算法。这个算法比之前的Cohen-Sutherland算法厉害,处理任意凸多边形对线段的裁剪。自然,这个算法也比Cohen-Sutherland算法复杂不少。   首先,是线段与多边形相交的情况:   我们把定义向量c = (C - A),而线段AC是射线A + ct的一部分。那么t取0和1就是线段AC。我们将射线与多边形的每条边求出相交时的...

ahm95958的博客 1254

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

计算机图像学实验-Cyrus-Beck算法和梁友栋-Barsky算法(java实现附代码)

1、用Cyrus-Beck算法进行给定直线的裁剪。2、用梁友栋-Barsky算法进行给定直线的裁剪。

weixin_56448816的博客 1014

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

OpenGL 凸多边形截取线段,Cyrus-Beck算法

                                OpenGL  凸多边形截取线段,Cyrus-Beck算法//roger, 2011 //OpenGL 凸多边形截取线段 #include "myglbase.h" #include "glut.h" #include "vector" #include "iostream" #include "glut.h" using namespace std; //线段类 class Line2Segment { pu

2385

裁剪算法(计算机图形学)

#include #include #define LEFT 1 #define RIGHT 2 #define BOTTOM 4 #define TOP 8 int XL=150, XR=350, YB=350, YT=150; //编码算法 int encode(int x,int y) { int c=0; if(x<XL) c=c|LEFT; else if(x>XR

时光足迹 1万+
上一篇: C# 自定义比较器
下一篇: OpenGL 凸多边形截取线段 Cyrus-Beck算法的实现
rorger
博客等级 码龄16年 62粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值