裁剪任意直线段 liang-barshky算法 c

2023-11-20

一、 实验目的。

使用liang-barshky算法实现裁剪任意直线段实验工具

二、 实验工具

VC6.0

三、 实验步骤

思想:以直线的参数方程为基础:
X=x1 + u(x2-x1)
Y =y1 + u(y2-y1)

裁剪区域是不等式:
wxl<= X=x1 + u(x2-x1)<= wxr
wyb<= Y =y1 + u(y2-y1)<= wyt

代入直线方程经过一系列命名转换得到:
p1=-△x, p2=△x, p3=-△y, p4=△y,
q1=wx1-wxl, q2=wxr-wx1, q3=wy1-wxb, q4=wyt-y1,
是一条有方向的线段,延长线分别是入边和出边
然后分情况解决:
①p =0,q<0, 直线与裁剪框平行,且位于裁剪框的外面,直线不可见,可抛弃,直接结束
q>=0,直线在它所平行的窗口边界的内部,需进一步计算确定直线是否在窗口内、外、或者相交。
②p <0,直线从边界的外部延伸到内部
③p >0, 直线从边界的内部延伸到外部
p≠0,式子计算直线与边界k的交点的参数u。对于每条直线,计算直线位于裁剪窗口内线段的参数p 1和p 2
p 1由使得直线是从外部延伸到内部的窗口边界决定:ri = qi/ p i.
p 1 = max(ri,0)
p 2由那些使得直线是从内部延伸到窗口边界决定:
p 2 = min(ri,1)
如果p 1> p 2,这条直线完全在窗口的外面,不可见,抛弃,否则,根据参数u的两个值,计算出裁剪后线段的端点

最后显示出来,裁剪的线段与边界外的线段用不同颜色表示。

3.建立一个工程文件,将思路转化为c编程语言,进行编译。

代码如下:
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include<iostream>
#include<graphics.h>
#include<math.h>
using namespace std;
// 给出最大值
float maxi(float arr[],int n) {
   
  float m = 0;
  for (int i = 0; i < n; ++i)
    if (m < arr[i])
      m = arr[i];
  return m;
}
// 给出最小值
float mini(float arr[], int n
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

裁剪任意直线段 liang-barshky算法 c 的相关文章

  • GitHub上传新手

    第一次上传 1 注册GitHub 2 新建仓库 网上有新建教程 很简单的 3 下载安装Git 一般一直下一步即可 没有特殊要求的话 网址 https gitforwindows org 4 在Git Bush中进入放项目文件的地址 如果是直

随机推荐

  • CentOS7上安装anaconda3及其遇到的问题

    https mirrors tuna tsinghua edu cn anaconda archive 国内镜像 下载速度快 不要选择最新版 有问题 建议 4 3 0 运行命令 conda V 返回版本号即安装成功 1 通过命令行工具 wg
  • 必须了解的mysql三大日志-binlog、redo log和undo log

    目录 一 前言 二 binlog 备份日志 1 作用 2 使用场景 3 日志形式 4 binlog刷盘时机 三 redo log 重做日志 1 概念 2 为什么需要redo log 3 日志形式 4 redo log与binlog区别 四
  • 锂电池基础知识简介

    锂离子电池已经渗透到现代生活的方方面面 它可以为生活中很多东西 如手机 手表 平板电脑 便携式设备等 提供电源 现简单概要介绍锂电池的基础知识 1 基础术语 1 C rate 倍率 指电池充放电时电流与电池标称容量的比率 即描述了电池可以在
  • FPGA Lattice Diamond 开发环境搭建

    FPGA Lattice Diamond 开发环境搭建 Lattice Diamond 软件下载 在浏览器中输入 Lattice 的官网地址 http www latticesemi com 进入官网首页在上方选择产品系列选项 出现如下图所
  • Unity学习笔记(一)—— 基础知识

    一 基础知识 1 开发团队组成 2 unity特点 图形界面 所见即所得 入门简单 支持C 比OC C 更友好 js 国内外资源丰富 因为使用的人多 跨平台性好 PC端 移动端等 对VR AR的支持最完善 3 成功案例 游戏 炉石传说 神庙
  • 【源码篇】基于ssm+bootstrap+jquery的学生成绩管理系统

    系统介绍 基于ssm bootstrap jquery的学生成绩管理系统一共分为六大模块 分别是用户管理 课程管理 班级管理 学籍管理 学费管理 成绩管理 用户管理 1 用户信息预览 查询并根据姓名搜索系统用户 2 新增用户信息 添加系统用
  • Redis7之事务(五)

    五 Redis 事务 5 1 介绍 可以一次执行多个命令 本质是一组命令的集合 一个事务中的所有命令都会序列化 按顺序地串行化执行而不会被其他命令插入 不许加塞 一个队列中 一次性 顺序性 排他性的执行一系列命令 5 2 Redis事务和数
  • 包管理工具那么多,怎么选?npm、yarn 和 pnpm 三者比较及使用详解!

    1 简介 在 Vue 项目中 我们需要使用许多第三方依赖库 如 Vue Router Vuex Axios Element UI 等等 这些依赖库通常以 NPM 包的形式提供 而且在使用时需要进行版本管理 因此 我们需要使用一个包管理工具来
  • TCP/IP详解 第十二章(2) linux 网络编程

    转载请声明博主https mp csdn net console editor html 106517098 一 Linux网络概述 LINUX网络优势 1 完善的内置网络 和内核结合在一起的网络部分 I p queue 2 Linux 免
  • python将超大CSV文件切割为多个Excel文件存储

    很多时候处理数据会碰到CSV文件 如果是一般的少量文件问题不大 一旦碰到大型的CSV文件 就会出现打不开文件的结果 因为文本无法打开超大型文件 Excel也最多能够容量一百万条数据量 因此只能将CSV文件切割成为多个小的CSV文件 将csv
  • Swing之Jframe窗体、 JDialog弹窗、标签、面板、按钮(图片按钮,单选框,多选框)、列表(下拉框,列表框)、文本框、密码框

    Swing Jframe窗体 import javax swing import java awt public class JFrameDemo init 初始化 public void init JFrame frame new JFr
  • Vue 组件化

    什么是组件化 任何一个人处理信息的逻辑能力都是有限的 所以 当面对一个非常复杂的问题时 我们不太可能一次性搞定一大堆的内容 但是 我们人有一种天生的能力 就是将问题进行拆解 如果将一个复杂的问题 拆分成很多个可以处理的小问题 再将其放在整体
  • 每月的倒扣料

    这是一个生产领料的典型 倒扣法 即BOM配置的单位和发料单位不相同时 我们不可能通过转换而达到发料的方便 比较典型的物料有 电线 按米领料 发料时要按捆化工 按kg领料 发料时按桶等等 通常在实施的时候 先将一捆电线调拔到线边仓库 仓管操作
  • 利用人工智能技术普及教学应用、拓展教师研训应用、增强教育系统监测能力

    2019年 中国教育现代化2035 指出 以人才培养为核心 通过提升校园智能化水平 探索新型教学形式 创新教育服务业态 推进教育治理方式变革 智能驱动教育创新发展 2021年教育部等六部门发布 关于推进教育新型基础设施建设构建高质量教育支撑
  • Linux C/C++编程:对文件操作的封装

    Linux C C 编程 lseek fseek ftell rewind fgetpos fsetpos 源码 Created by oceanstar on 2021 8 9 ifndef OCEANSTAR HTTP ACL FILE
  • 企业网上订货管理软件构架源码系统介绍

    企业网上订货管理软件构架源码系统介绍 手机订单管理系统 一 什么是订货通 什么是企业订货管理系统 是一款针对中小型企业通过网络实现 厂家和客户 经销商 批发商 代理商一站式订货系统 最终实现厂家的下游客户通过网络实现实时订货功能 二 订货通
  • 惊艳了!升级版的 APDrawing,秒让人脸照变线条肖像画

    作者 高卫华 出品 AI科技大本营 随着深度学习的发展 GAN模型在图像风格转换的应用越来越多 其中不少都实现了很好的效果 此前 reddit上的一个技术博主AtreveteTeTe基于GAN模型混合将普通的人像照片卡通化 并通过First
  • AJAX——AJAX的异步与同步、AJAX代码封装

    个人主页 胖虎不秃头 个人简介 Java领域新星创作者 随时准备跑路的大二学生 精品专栏 有这一个就够了 个人名言 知道的越多 不知道的越多 刷题神器 推荐一款算法刷题网站Nowcoder 点击跳转刷题网站进行注册学习 文章目录 AJAX的
  • 可以通过2种方法遍历HashMap

    可以通过2种方法遍历HashMap Map map new HashMap for Iterator iter map entrySet iterator iter hasNext Map Entry entry Map Entry ite
  • 裁剪任意直线段 liang-barshky算法 c

    一 实验目的 使用liang barshky算法实现裁剪任意直线段实验工具 二 实验工具 VC6 0 三 实验步骤 思想 以直线的参数方程为基础 X x1 u x2 x1 Y y1 u y2 y1 裁剪区域是不等式 wxl lt X x1