当前位置: 首页 > news >正文

C语言实现Cohen_Sutherland算法

前提简要:

算法简介:

        编码算法是最早、最流行的线段裁剪算法,该算法采用区域检验的方法,能够快速有效地判断一条线段与裁剪窗口的位置关系,对完全接受或完全舍弃的线段无需求交,即可直接识别。

算法思想:

         编码算法将整个画布分成9个区域,如下图所示:

    根据线段端点所在位置,给每个端点一个四位二进制码(称为区域码)。四位区域码的4位从左到右依次表示上、下、右、左。区域码的任何为赋值为1代表端点落在相应的区域中,否则为0。
————————————————
版权声明:本文为CSDN博主「矢月」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44397852/article/details/109015504

代码实现:

//利用数值的位运算
//实现Cohen_Sutherland算法
double xl, xr, yt, yb;//事先给出的窗口位置,四个数值均为已知
void Cohen_SutherLand(double x0, double y0, double x2, double y2)
{int c, c0, c1;double x, y;c0 = makecode(x0, y0); c1 = makecode(x2, y2);while (c0 != 0 || c1 != 0) {if (c0&c1 != 0)return;c = c0; if (c == 0)c = c1;if (c & 1 == 1) {y = y0 + (y2 - y0)*(xl - x0) / (x2 - x0);x = xl;}else if (c & 2 == 2) {y = y0 + (y2 - y0)*(xr - x0) / (x2 - x0);x = xr;}else if (c & 4 == 4) {x = x0 + (x2 - x0)*(yb - y0) / (y2 - y0);y = yb;}else if (c & 8 == 8) {x = x0 + (x2 - x0)*(yt - y0) / (y2 - y0);y = yt;}if (c == c0) {x0 = x;y0 = y;c0 = makecode(x, y);}else {x2 = x;y2 = y;c1 = makecode(x, y);}showline(x0, y0, x2, y2);//显示可见线段}
}
int makecode(double x, double y) {int c = 0;if (x < xl)c = 1;else if (x > xr)c = 2;if (y < yb)c = c + 4;else if (y > yt)c = c + 8;return c;
}

相关文章:

C语言实现Cohen_Sutherland算法

前提简要&#xff1a; 算法简介&#xff1a; 编码算法是最早、最流行的线段裁剪算法&#xff0c;该算法采用区域检验的方法&#xff0c;能够快速有效地判断一条线段与裁剪窗口的位置关系&#xff0c;对完全接受或完全舍弃的线段无需求交&#xff0c;即可直接识别。 算法思想&…...

MySQL进阶_EXPLAIN重点字段解析

文章目录 第一节.准备1.1 版本信息1.2 准备 第二节.type2.1 system2.2 const2.3 eq_ref2.4 ref2.5 ref_or_null2.6 index_merge2.7 unique_subquery2.8 range2.9 index2.10 all 第三节. Extra3.1 No tables used3.2 No tables used3.3 Using where3.4 No matching min/max row3…...

视图层与模板层

视图层 1 视图函数 一个视图函数&#xff0c;简称视图&#xff0c;是一个简单的Python 函数&#xff0c;它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容&#xff0c;一个重定向&#xff0c;一个404错误&#xff0c;一个XML文档&#xff0c;或者一张图片. . . 是…...

MySQL数据库——触发器-案例(Insert类型、Update类型和Delete类型)

目录 表结构准备 插入数据触发器 代码 测试 修改数据触发器 代码 测试 删除数据触发器 代码 测试 通过触发器记录 tb_user 表的数据变更日志&#xff0c;将变更日志插入到日志表user_logs中&#xff0c;包含增加&#xff0c;修改&#xff0c;删除。 表结构准备 根据…...

快速创建桌面端(electron-egg)

介绍 | electron-egg electron-egg: 一个入门简单、跨平台、企业级桌面软件开发框架。 electron-egg是一个基于Electron和Egg.js的框架&#xff0c;可以用于快速构建跨平台的桌面应用程序。 1.兼容平台&#xff1a;electron-egg可以在Windows、MacOS和Linux等多个平台上运行…...

docker配置redis插件

docker配置redis插件 运行容器redis_6390 docker run -it \ --name redis_6390 \ --privileged \ -p 6390:6379 \ --network wn_docker_net \ --ip 172.18.12.19 \ --sysctl net.core.somaxconn1024 \ -e TIME_ZONE"Asia/Shanghai" -e TZ"Asia/Shanghai"…...

前端入口教程_web01

web标准 记得看&#xff01; html&#xff1a;表示整个页面 head&#xff1a; titile&#xff1a; body&#xff1a; 常用标签 1.标题标签 2.段落标签 3.换行标签 4.文本格式化标签 5. 和 标签 6.图像标签 相对路径–用来插自己本地的图片 #### 绝对路径–用来插网上找的图…...

Win7 SP1 x64 Google Chrome 字体模糊

1 打开 Google Chrome &#xff0c;地址栏输入 chrome://version/ &#xff0c;字体模糊。 2 Microsoft Update Catalog 搜索更新 kb2670838&#xff0c;下载&#xff0c;安装&#xff0c;重启电脑。 3 打开 Google Chrome&#xff0c;地址栏输入 chrome://version/ &#xff0…...

read()之后操作系统都干了什么

首先说明三个参数 file文件 buff从内存中开辟一段缓冲区用来接收读取的数据 size表示这个缓冲区的大小 有关file的参数&#xff1a; 状态&#xff1a;被打开 被关闭权限&#xff1a;可读可写最重要的是inode: 他包含了 文件的元数据(比如文件大小 文件类型 文件在访问前需要加…...

YoloV8改进策略:Swift Parameter-free Attention,无参注意力机制,超分模型的完美迁移

摘要 https://arxiv.org/pdf/2311.12770.pdf https://github.com/hongyuanyu/SPAN SPAN是一种超分网络模型。SPAN模型通过使用参数自由的注意力机制来提高SISR的性能。这种注意力机制能够增强重要信息并减少冗余,从而在图像超分辨率过程中提高图像质量。 具体来说,SPAN模…...

Python----练习:使用面向对象实现报名系统开发

第一步&#xff1a;分析哪些动作是由哪些实体发出的 学生提出报名 学生提供相关资料 学生缴费 机构收费 教师分配教室 班级增加学生信息 于是&#xff0c;在整个过程中&#xff0c;一共有四个实体&#xff1a;学生、机构、教师、班级&#xff01;在现实中的一个具体的实…...

1.什么是html

1.什么是html什么是html&#xff1f; 一.基础信息 英文名字&#xff1a;HyperText Markup Language 中文名字&#xff1a;超文本标记语言 简称&#xff1a;html 文件格式&#xff1a;.htm 或 .html 结尾 作用&#xff1a;描述网页的语言。通过各种各样的标签&#xff0c;组…...

GeoServer漏洞(CVE-2023-25157)

前半部分是sql注入一些语句的测试&#xff0c;后面是漏洞的复现和利用 Sql注入漏洞 1.登入mysql。 2.查看默认数据库 3.使用mysql数据库 4.查看表 1.查看user 表 2.写注入语句 创建数据库 时间注入语句 布尔注入语句 报错注入语句 Geoserver漏洞&#xff…...

一个完整的手工构建的cuda动态链接库工程 03记

1&#xff0c; 源代码 仅仅是加入了模板函数和对应的 .cuh文件&#xff0c;当前的目录结构如下&#xff1a; icmm/gpu/add.cu #include <stdio.h> #include <cuda_runtime.h>#include "inc/add.cuh"// different name in this level for different type…...

rdf-file:SM2加解密

一&#xff1a;SM2简介 SM2是中国密码学算法标准中的一种非对称加密算法&#xff08;包括公钥和私钥&#xff09;。SM2主要用于数字签名、密钥交换和加密解密等密码学。 生成秘钥&#xff1a;用于生成一对公钥和私钥。公钥&#xff1a;用于加密数据和验证数字签名。私钥&…...

harmonyOS学习笔记之@Styles装饰器与@Extend装饰器

Styles装饰器 定义组件重用样式 自定义样式函数使用装饰器 可以定义在组件内或全局,内部优先级>外部,内部不需要function,外部需要function 定义在组件内的styles可以通过this访问组件内部的常量和状态变量,可以在styles里通过事件来改变状态变量 弊端:只支持通用属性和通用…...

GateWay的路由与全局过滤器

1.断言工厂 我们在配置文件中写的断言规则只是字符串&#xff0c;这些字符串会被Predicate Factory读取并处理&#xff0c;转变为路由判断的条件 例如Path/user/**是按照路径匹配&#xff0c;这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRoutePr…...

MuleSoft 中的细粒度与粗粒度 API

API 设计是一个令人着迷的话题。API 设计的一个重要方面是根据 API 的特性和功能确定正确的“大小”。所有建筑师都必须在某个时候解决过这个问题。在本文中&#xff0c;我将尝试对我们在获得“正确的”粒度 API 之前需要考虑的各种参数进行一些深入的探讨&#xff1a; 可维护…...

【笔记】2023最新Python安装教程(Windows 11)

&#x1f388;欢迎加群交流&#xff08;备注&#xff1a;csdn&#xff09;&#x1f388; ✨✨✨https://ling71.cn/hmf.jpg✨✨✨ &#x1f913;前言 作为一名经验丰富的CV工程师&#xff0c;今天我将带大家在全新的Windows 11系统上安装Python。无论你是编程新手还是老手&…...

Android Wifi断开问题分析和802.11原因码

Android Wifi连接和断链分析思路。 1.密码错误导致的连接失败 2.关联被拒绝 3.热点未回复AUTH_RSP或者STA未收到 AUTH_RSP 4.热点未回复ASSOC_RSP或者STA未收到ASSOC_RSP 5.DHCP FAILURE 6.发生roaming 7.AP发送了DEAUTH帧导致断开连接 8.被AP踢出&#xff0c;这个原因…...

Zynq MPSoC实战:从官方Base TRD里,只抠出HDMI输入+DP显示这一个功能(Vivado 2020.1 + Petalinux)

Zynq MPSoC实战&#xff1a;精准剥离HDMI输入与DP显示功能的工程精简指南 面对Xilinx官方提供的Base TRD参考设计&#xff0c;许多开发者都会被其庞大的规模所震撼——12000行代码、数十个功能模块交织在一起&#xff0c;就像一个功能齐全但臃肿不堪的"瑞士军刀"。本…...

免费解锁Adobe全家桶!Adobe GenP 3.0终极指南让你告别订阅费

免费解锁Adobe全家桶&#xff01;Adobe GenP 3.0终极指南让你告别订阅费 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 还在为Adobe Creative Cloud的高昂订阅费用…...

别再只刷Demo了!手把手教你用CCS给AWR1843毫米波雷达写自己的‘大脑’

从Demo玩家到雷达开发者&#xff1a;AWR1843毫米波雷达CCS深度开发实战 毫米波雷达技术正在智能驾驶、工业检测等领域掀起革命浪潮。作为TI明星产品&#xff0c;AWR1843凭借其高性价比和丰富功能成为众多开发者的首选。但大多数用户止步于运行官方Demo&#xff0c;未能真正释放…...

open62541批量读写踩坑实录:从‘UA_ReadRequest’配置到结果解析的完整避坑指南

open62541批量读写深度实战&#xff1a;从核心配置到异常处理的完整解决方案 在工业自动化与物联网系统开发中&#xff0c;OPC UA协议已成为设备互联的事实标准。作为开源实现的佼佼者&#xff0c;open62541为开发者提供了强大而灵活的工具集。但当面对需要高效处理大量节点数据…...

Unity 2D游戏开发:用Cinemachine 2D Camera实现平滑镜头跟随,告别手动写代码

Unity 2D游戏开发&#xff1a;用Cinemachine 2D Camera实现平滑镜头跟随&#xff0c;告别手动写代码 在2D游戏开发中&#xff0c;摄像机跟随是最基础却又最容易出问题的功能之一。很多开发者习惯用代码手动控制摄像机的位置更新&#xff0c;却常常陷入边界抖动、跟随延迟不自然…...

Vivado仿真避坑指南:从Testbench编写到波形调试的完整实战(以流水灯为例)

Vivado仿真避坑指南&#xff1a;从Testbench编写到波形调试的完整实战&#xff08;以流水灯为例&#xff09; 在FPGA开发中&#xff0c;仿真环节往往是新手工程师最容易"踩坑"的重灾区。明明RTL代码逻辑清晰&#xff0c;下载到板卡却出现异常行为&#xff1b;仿真波…...

LRCGET:如何用500行代码重定义你的离线音乐体验

LRCGET&#xff1a;如何用500行代码重定义你的离线音乐体验 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 在数字音乐流媒体盛行的时代&#xff0c;我…...

CircuitPython开发实战:串口通信与编辑器配置全攻略

1. 项目概述与核心价值 如果你刚开始接触CircuitPython&#xff0c;或者从Arduino这类环境转过来&#xff0c;可能会觉得有点懵&#xff1a;代码写好了&#xff0c;怎么看到板子的输出&#xff1f;板子报错了&#xff0c;怎么知道错在哪里&#xff1f;为什么我的代码文件一保存…...

出口黎巴嫩必知:清关要求与税费标准

黎巴嫩清关需备齐提单、发票、原产地证等文件&#xff0c;经申报、审查、缴税、查验后放行。关税优惠覆盖旅游、农业、工业投资&#xff0c;助力企业降低成本。黎巴嫩清关流程准备清关文件装货单&#xff08;Bill of Lading&#xff09;&#xff1a;船运公司签发的货物装船证明…...

ARM PMU性能监控架构与PMCEID2寄存器详解

1. ARM PMU性能监控架构概述性能监控单元(Performance Monitoring Unit, PMU)是现代处理器中用于硬件级性能分析的核心模块。在ARM架构中&#xff0c;PMU通过一组可编程的事件计数器实现对处理器微架构行为的精确监控。这些计数器可以记录诸如指令执行周期、缓存命中/失效、分支…...