这篇又拖了下,主要是动图一直没心情做,现在放假了才把它给补好,让大家久等了。

上篇中我们提到,对于图形软件来说,存储一根线,端点信息几乎成为了必要的组成部分。为此,不同的图形软件各显神通,让不同类型的曲线都满足上述条件。

其中,Adobe系列的产品用三次贝塞尔曲线进行拟合,而其算法相信大家都能很轻易地给搜索出来。相反,用圆弧去拟合贝塞尔曲线的文章却反倒不多见。以前我感到很困惑,圆弧不是更简单么?为什么更多的人喜欢反向拟合?如今,我做过图形编辑功能,就彻底明白了。

如上篇所言,贝塞尔曲线对生产并不友好,所以AutoCAD发明了另外一套曲线体系,谓之多段线。这个词虽然我个人不太喜欢,但它却把这种线支持首尾相接的特性给很好地体现出来。

为了让不懂CAD的朋友理解起来更方便,后面我会把它称作圆弧直线。

在这种线条中,不管它是圆弧还是直线,AutoCAD都会存储它的起点和终点。

然后为了确定最终的曲线形状,我们可以加入第3个点,当这个点在线段SE上时,曲线为直线,否则为圆弧。

这样看起来整个体系很完美了,但仔细思考一下会发现,同一条曲线,满足条件的“控制点”有无数个。如下图,弧线上任一位置的点确定的都是同一条圆弧。

像这种一个值对应多个解的情况,用到实际中并不方便。我们知道,SE两点确定下来之后,其圆心一定在SE的垂直平分线上。

所以我们完全可以改用一个纯数字的变量来描述它,比如圆心到连线的距离,距离为0时为直线,其它距离为圆弧,距离可以设定为有向,这样的话就可以让距离相等但不同侧的圆心也能有所区分。

AutoCAD别出心裁地为这一特性定制了一个变量,叫凸度(bulge),它等于圆弧的与圆心角的1/4的正切值

bulge=tan(angle/4)

这个定义可谓非常巧妙,我们知道正切值在0~pi/2区间是单调递增,并且值域为0到无穷大。然后圆心角的取值范围为0到2pi,除以4刚好让正切值既包含所有正数,又随着凸度的增大而增大。(事实上,只有当起点和终点完全重合,凸度才可以是无穷大)。

而另一个巧妙的地方,则是当圆弧为半圆的时候,其拱形的高度刚好等于半径,而此时的bulge=tan(pi/4)=1,跟我们半圆凸度为1的主观理解不谋而合。

凸度也有正负的定义,一般而言,当圆弧从起点到终点的旋转方向为正向(即y轴向上的坐标系下逆时针旋转)时定义为正,反之则定义为负。当凸度为0时,曲线为直线。

凸度为0时变为直线可以通过下面的动图来理解:当弧线慢慢趋于平直的时候,圆心到连线的距离越来越大,并且起点和终点跟圆心连线的夹角也越来越小。当弧线变平,起点和终点跟“圆心”的连线变成平行,夹角为0。

这种圆弧直线可以把图形软件和生产工具的冲突给很好的调和起来,可谓是图形界的一大创举。美中不足的是,它不支持非等比缩放(直线的情况除外),因为非等比缩放会把圆弧变成椭圆弧,而目前业界尚没有通过存储端点的方式来描述椭圆,所以在AutoCAD里面,这种线只能做等比缩放。

而贝塞尔曲线的弹性则强很多,不管如何,我们只要把端点和控制点进行缩放,得到的新曲线也正好是原曲线不等比缩放的结果。因此对于图形软件来说,贝塞尔曲线仍然是首选。

介绍完了圆弧直线这样的一个知识背景后,我们将重新回到微积分系列的教程当中。

浅谈图形软件中直线和曲线的基本构成(下)相关推荐

  1. 浅谈HFSS软件中端口有源S参数(Active_SParameter)

    HFSS在仿真天线阵时,在后处理结果有了有源S参数,我们可以看到有源S参数和普通的S参数计算的值会有差别,那么在仿真时到底用哪个做为准呢,这就需要我们搞明有源S参数的意义. 看重点,首先给出ANSYS ...

  2. 函数图像在图形计算机的应用,浅谈图形计算器在高中函数教学中的应用

    浅谈图形计算器在高中函数教学中的应用 陈理宏广州市花都区教研室(510800) 摘要:函数是高中一个重要内容,在这个内容的学习中应用图形计算器的函数功能和绘图功能,有利于学生加深对函数知识的理解,挖掘 ...

  3. 浅谈VB6.0中的实用技巧

    浅谈VB6.0中的实用技巧 (一) VB6.0中文本框处理技巧 在Visual Basic中,文本框(TextBox)是最常用的控件,熟练运用文本框 是开发出高质量的应用程序的基础.笔者在从事应用程序 ...

  4. 浅谈单片机程序设计中的“分层思想”!

    浅谈单片机程序设计中的"分层思想",并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用.看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种 ...

  5. 计算机审计的概念的论文,论文:浅谈计算机审计中的数据分析

    浅谈计算机审计中的数据分析 [摘要]数据分析在计算机审计中占有重要地位.审计人员通过数据分析,可以更好地实现收集证据.把握总体.突出重点.精确延伸等目标.数据分析从类型上可以分为查询型.验证型和挖掘型 ...

  6. 软件工程:浅谈人工智能软件开发与传统软件开发的区别

    题目:浅谈人工智能软件开发与传统软件开发的区别 摘要:人工智能的飞速发展带动着软件工程的发展,最终使得软件工程产生新的变革.因为人工智能特有的性质,因而导致了人工智能软件与传统软件的差异性.本文对比了 ...

  7. 浅谈导航数据中POI搜索技术原理

    浅谈导航数据中POI搜索技术原理之一 王健 导航技术的应用已经成为现在生活中重要组成部分,为我们的生活提供了极大的便利.基本都有这样生活的体验,搜索自己位置附近的银行网点.餐馆.那么这些POI是如何快 ...

  8. 让数据站住脚-浅谈用户研究中的信度与效度

    让数据站住脚-浅谈用户研究中的信度与效度 在用户研究工作中,如何让自己的数据和结论更有说服力,是很重要的问题.最近将自己积累的用研信度和效度的笔记整理一下,罗列在文中,希望对大家有所帮助. 一.调查的 ...

  9. 浅谈智能交通中的电子地图

    浅谈智能交通中的电子地图 20世纪80年代以来,随着经济的发展和人口的增长,车和人的矛盾变得越来越尖锐,交通拥挤和阻塞现象日益严重,交通污染与交通事故等日益困扰着交通事业的发展.路网通过能力已不能满足 ...

最新文章

  1. python制作英语字典_如何在Python中创建字典词典
  2. 关于数据存储的经典题
  3. 在线使用Octave、Matlab画单电荷等位线和电力线、matlab的nonconformant arguments错误
  4. 【线上分享】视频质量评价:挑战与机遇
  5. 转:OAUTH协议简介
  6. LeetCode 801. 使序列递增的最小交换次数(动态规划)
  7. php上传大文件500错误,PHP fastcgi模式大文件上传500错误
  8. 笛卡尔函数_笛卡尔,伯克利和函数式React式编程
  9. 2017.10.29 软件安装 思考记录
  10. jvisualvm.exe远程连接tomcat
  11. pandas merge融合
  12. mysql中count(*)、count(1)和count(字段)的区别
  13. 微信小程序商城搭建小程序服装购物商城+后台
  14. C#学习之IntPtr类型
  15. 需求分析(知识点总结)
  16. Flutter访问webservice
  17. 让我们的爱洒满孩子们的心
  18. golang 数学函数
  19. 消防设施操作员考试真题、模拟练习题库(6)
  20. java程序员必读书目推荐

热门文章

  1. 计算机软考论文网络真题,2017上半年软考中级信息系统项目管理师真题论文
  2. 微头条快速赚钱变现方法,一天可赚100元
  3. 评课用计算器计算机,【用计算器探索规律评课稿】_用计算器探索规律评课稿...
  4. 手把手安装Windows11虚拟机
  5. 软件测试 | 测试开发 | Sikuli 基于图形识别的自动化测试技术
  6. VFP6.0运行exe文件后显示:程序错误 “不能存取文件”
  7. 60秒Dapp快讯 | 全球公有链技术评估:以太坊在应用性上排第一;蚂蚁金服区块链试水医疗电子票据
  8. 酷派 手机 stop charging
  9. Docker 取代 VM !是什么让 Docker 比 VM 或裸机更安全?
  10. xxx is not in the sudoers file. This incident will be reported.解決方法