精华内容
下载资源
问答
  • 思维导图整理 东南大学 软件工程 复试3门科目历年真题 思维导图整理 高等数学 做题技巧 易错点 知识点(张宇,汤家凤)思维导图整理 考研 线性代数 惯用思维 做题技巧 易错点 (张宇,汤家凤)思维导图整理 高等数学...

    本文内容是根据 莫烦Python 网站的视频整理的笔记,笔记中对代码的注释更加清晰明了, 同时根据所有笔记还整理了精简版的思维导图, 可在此专栏查看, 想观看视频可直接去他的网站, 源文件已经上传到主页中的资源一栏中,有需要的可以去看看,

    我主页中的思维导图中内容大多从我的笔记中整理而来,相应技巧可在笔记中查找原题, 有兴趣的可以去 我的主页 了解更多计算机学科的精品思维导图整理

    本文可以转载,但请注明来处,觉得整理的不错的小伙伴可以点赞关注支持一下哦!

    博客中思维导图的高清PDF版本,可关注公众号 一起学计算机 点击 资源获取 获得

    感觉作者写的不错的, 别忘了点赞关注加收藏哦(一键三连)!你的支持会带给我极大的动力, 写出更多优秀文章!

     文章到这里就结束了, 感谢你的认真观看, 为了感谢读者们, 我把我一直以来整理的各种计算机相关/考研相关精品思维导图/力扣算法讲解/面试资料/各种实用软件工具分享给大家(并且会持续更新哦!), 希望能够帮助到你们.

    关注公众号 一起学计算机 点击 资源获取 即可获得所有资源, 包含的资源如下图, 其中具体资源的相关讲解和各种软件的使用可以查看下面相应的文章.

    我的更多精彩文章链接, 欢迎查看

    各种电脑/软件/生活/音乐/动漫/电影技巧汇总(你肯定能够找到你需要的使用技巧)

    力扣算法刷题 根据思维导图整理笔记快速记忆算法重点内容

    经典动漫全集目录 精彩剧集

    海贼王 动漫 全集目录 分章节 精彩打斗剧集 思维导图整理

    火影忍者 动漫 全集目录 分章节 精彩打斗剧集 思维导图整理

    死神 动漫 全集目录 分章节 精彩打斗剧集 思维导图整理

    计算机专业知识 思维导图整理

    Python 北理工慕课课程 知识点 常用代码/方法/库/数据结构/常见错误/经典思想 思维导图整理

    C++ 知识点 清华大学郑莉版 东南大学软件工程初试906 思维导图整理

    计算机网络 王道考研 经典5层结构 中英对照 框架 思维导图整理

    算法分析与设计 北大慕课课程 知识点 思维导图整理

    数据结构 王道考研 知识点 经典题型 思维导图整理

    人工智能导论 王万良慕课课程 知识点 思维导图整理

    红黑树 一张导图解决红黑树全部插入和删除问题 包含详细操作原理 情况对比

    各种常见排序算法的时间/空间复杂度 是否稳定 算法选取的情况 改进 思维导图整理

    人工智能课件  算法分析课件  Python课件  数值分析课件  机器学习课件 图像处理课件

    考研相关科目 知识点 思维导图整理

    考研经验--东南大学软件学院软件工程

    东南大学 软件工程 906 数据结构 C++ 历年真题 思维导图整理

    东南大学 软件工程 复试3门科目历年真题 思维导图整理

    高等数学 做题技巧 易错点 知识点(张宇,汤家凤)思维导图整理

    考研 线性代数 惯用思维 做题技巧 易错点 (张宇,汤家凤)思维导图整理

    高等数学 中值定理 一张思维导图解决中值定理所有题型

    考研思修 知识点 做题技巧 同类比较 重要会议 1800易错题 思维导图整理

    考研近代史 知识点 做题技巧 同类比较 重要会议 1800易错题 思维导图整理

    考研马原 知识点 做题技巧 同类比较 重要会议 1800易错题 思维导图整理

    考研数学课程笔记  考研英语课程笔记  考研英语单词词根词缀记忆  考研政治课程笔记

    Python相关技术 知识点 思维导图整理

    Numpy常见用法全部OneNote笔记     全部笔记思维导图整理

    Pandas常见用法全部OneNote笔记     全部笔记思维导图整理

    Matplotlib常见用法全部OneNote笔记  全部笔记思维导图整理

    PyTorch常见用法全部OneNote笔记    全部笔记思维导图整理

    Scikit-Learn常见用法全部OneNote笔记  全部笔记思维导图整理

    Java相关技术/ssm框架全部笔记

    Spring  springmvc  Mybatis  jsp

    科技相关 小米手机

    小米 红米 历代手机型号大全 发布时间 发布价格

    常见手机品牌的各种系列划分及其特点

    历代CPU和GPU的性能情况和常见后缀的含义 思维导图整理

    展开全文
  • 三角函数之前端动画

    2018-08-21 13:42:00
    左边的摆球是线性匀速摆动,右边是用了三角函数优化的结果。显然左边的效果设计师会打人。 swing-ball   只需使用 sin 或 cos 乘以最大角度,就可以得到在摆动最大角度之间的 SlowInSlowOut。 ctx.rotate...

    平时写动画也尽量使用 css3 来实现,timer-function 随意选用,最多也就调一下 cubic-bezier,找到看着舒服的就行。但是怎样让动画更顺滑,写出更贴近自然的动画,说实话以前我没怎么考虑过。

    每次当动效设计师提出,能不能这样那样的时候,我会理所当然地予以否决。所以有很长一段时间,我非常羡慕那些能用 canvas 绘制很酷炫的动画的程序员。

    sad man in sine

    sad man in sine

     

    先这样吧,又不是不会动。

    今天来分享一下三角函数相关的内容,如果刚学前端的时候有人教我这些,我会很开心。

    三角函数

    三角函数已经是老生常谈了(街舞圈称之为 Old School),它伴随我们从初中到大学,太多的公式定理,光是应付考试就花了不少时间。先简单回顾一下,确保你还记得基础知识。

    勾股定理

    最开始学三角函数的时候就是从背勾三股四弦五开始,勾股定理描述的是对于直角三角形,直角两条边的平方和等于斜边的平方,

    a^2 + b^2 = h^2

     

    常用三角函数

    印象中教科书里面只保留了 sin, cos, tan,其他可以通过变换得到。

    sinθ = a / h
    cosθ = b / h
    tanθ = a / b
    

     

    极坐标系和单位圆

    在笛卡尔直角坐标系中,任一点 (x, y) 都可以转化成极坐标表示 (r, θ),其中

    r = Math.sqrt(x^2 + y^2)
    θ = Math.atan2(y, x)
    

    单位圆的定义是半径为单位长度的圆,圆上任意一点的横坐标就是对应角度的余弦值,任意点的纵坐标就是对应角度的正弦值。

    单位圆

     

    简单的图像变换
    以正弦曲线为例,对函数进行简单的变换,得到不一样的结果。

    正弦曲线变换

     

    正弦曲线公式:y = A sin(Bx + C) + D

    A 控制振幅,A 值越大,波峰和波谷越大,A 值越小,波峰和波谷越小;
    B 值会影响周期,B 值越大,那么周期越短,B 值越小,周期越长。
    C 值会影响图像左右移动,C 值为正数,图像右移,C 值为负数,图像左移。
    D 值控制上下移动。

    这个公式非常有用,如果下文的代码让你不解,记得回来查看注解。

    简单得回顾一下之后,确保你还记得这些基础知识,那么这些曾经被得滚瓜烂熟的内容,和前端代码结合会变成什么样?

    常见的应用场景

    图像应用

    最直观的应用是使用三角函数来绘制 Wave 曲线

    for (let x = 0; x < width; x++) {
      const y = Math.sin(x * a) * amplitude
    }
    

    简单曲线

     

    再结合三角函数偏移让左右成为波谷,中间成为波峰,就能得到曼妙的波纹。

    for (let x = 0; x < width; x++) {
      const radians = x / width * Math.PI * 2
      const scale = (Math.sin(radians - Math.PI * 0.5) + 1) * 0.5
      const y = Math.sin(x * 0.02 + xSpeed) * amplitude * scale
    }
    

    图像上的应用

     

    之前掘金上很火的一篇文章,也是同样的道理,使用两层正弦函数绘制曲线,fill 之后加上 stagger 动画,就能得到非常酷炫的?效果。

    wave

     

    如果再结合鼠标位置 + lerp 动画,就能实现坚果首页同款的动画。

    smartisan

     

    这篇文章大部分代码都可以在我的 Codepen 主页看到。

    SlowInSlowOut

    正余弦曲线有很自然地缓入缓出的特性,并且在一个周期里面从 -1 到 1 再回到 -1,非常适合用来模拟一些物理效果。因为真实世界里面,汽车都是缓慢启动,加速,减速,再缓慢减速直到速度变为 0 的,突变会让人很难受。左边的摆球是线性匀速摆动,右边是用了三角函数优化的结果。显然左边的效果设计师会打人。

    swing-ball

     

    只需使用 sin 或 cos 乘以最大角度,就可以得到在摆动最大角度之间的 SlowInSlowOut。

    ctx.rotate(Math.cos(t / 180 * Math.PI) * Math.PI * 0.25)
    

    角度控制

    在开发过程中,我们常常需要跟角度打交道,比如在头像左上角(45deg)显示 Notification 红点,用鼠标控制 rotation 等等。

    前端 JS 里面 Math.atan2(y, x) 可以用来计算 (x, y) 和 x 轴正方向的夹角弧度值。

    function getCurrentDegree () {
      const deltaX = mouse.x - window.innerWidth * 0.5
      const deltaY = mouse.y - window.innerHeight * 0.5
      return Math.atan2(deltaY, deltaX) * 180 / Math.PI
    }
    

    war-star

     

    插一句,三角函数相关的动画并不一定需要用 js 来写,比如下面的 DEMO,使用 compass 依赖,同样可以做到灵活控制在特定角度的动画(千万不要手写各个点的坐标!!!后期没办法维护)

    @import "compass";
    
    .checkbox:checked {
      ~ button {
        $per: 180 / 4;
        @for $i from 1 through 6 {
          &:nth-of-type(#{$i}) {
            $angle: $per * ($i - 1) * 1deg + 180deg;
            $x: cos($angle) * $d;
            $y: sin($angle) * $d;
    
            transform: translate($x, $y) rotate(0deg) ;
          }
        }
      }
    }
    

    千万不要手写各个点的坐标!!!

     

    源码

    Case Study

    经常用到的场景大概就这些吧,再以一个案例分析来复习一下。

    前两天在 Codepen 首页看到热门推荐,作者用存 css 动画来实现一个行走的动画,挺新颖的,然而仔细一看,脚步的动画真心觉得别扭,于是想用三角函数优化一下。

    sad man

     

    绘制头部:

    drawHead (t) {
      ctx.save()
      ctx.beginPath()
      ctx.translate(0, Math.sin(t) * 4)
      ctx.arc(80, -35, 35, 0, 2 * Math.PI)
      ctx.fill()
      ctx.closePath()
      ctx.restore()
    }
    

    我会给每个方法传入周期参数 t, t 从 0 到 2 PI , 这样能保证所有的周期运动时间同步。

    head

     

    身体和阴影的绘制都差不多,直接跳过看脚步动画。

    脚有两只,按道理应该是抬脚到落脚的动作完成时,其他部位都完成了一个完整的周期,所以在绘制脚的时候,t 需要除以 2。然后第一只脚和第二只脚相差半个脚自身的周期,可以直接将 t 替换成 t + Math.PI 就是第二脚的动画。

    drawFeet (t) {
    t = t / 2
      ctx.translate(Math.cos(t) * -50, 0)
    
      // 另一只脚
      ctx.translate(Math.cos(t + Math.PI) * -50, 0)
    }
    

    feet

     

    脚步动画自身周期的一半是在地面上的,可以通过判断一下 sin 值,小于 0 则不做 y 纵轴方向上的变化。

    ctx.translate(Math.cos(t) * -50, Math.sin(t) > 0 ? Math.sin(t) * -35 : 0)
    

    feet2

     

    还没完,为了让脚更加逼真,同样在前半个周期做一下 rotate 。

    if (t < Math.PI) {
      ctx.rotate(Math.sin(t) * Math.PI / 180 * -5)
    }
    

    feet3

    feet3

     

    最终得到的效果是这样的:
    sad man in sine

    sad man in sine

     

    源码

    总结

    现如今前端发展速度非常迅速,刚入门的同学刚学完 jQuery 就被告知,You Dont Need jQuery。追新的脚本根本停不下来,在学习新框架新技能的同时,也别忘了基础知识的重要性。

    好了,今天就分享到这里,希望一次汇集这么多效果,能让你下次使用三角函数更得心应手。

    转载于:https://www.cnblogs.com/m18320364494/p/9510872.html

    展开全文
  • 考的内容也有三角函数,我们也想写一写 "用途多多的三角函数", 基本操作之地球周长 基本操作之地月距离 基本操作之恒星距离 基本操作之太阳地球间的距离 计算机新闻分类 IT起源学说:e = 2.71828... 最美的...

    哈,明天就有一场考试。

    考的内容也有三角函数,我们也想写一写 "用途多多的三角函数",

    • 基本操作之地球周长
    • 基本操作之地月距离
    • 基本操作之恒星距离
    • 基本操作之太阳地球间的距离
    • 计算机新闻分类
    • IT起源学说:e = 2.71828... 
    • 最美的数学公式
    • 傅里叶变换

                                                                                         《目录》


    希望,我们能写的有趣和准确。 

     螺旋楼梯

     

    咳咳,为什么是我们 ?是自我的精神分裂:

              自我1: 三角函数多用于工程上。

                   自我2: 的确,毕竟三角函数公式那么多,不过都是类似加减计算一样简单, 但记的我好郁闷。

              自我1: 哈!?? 你是记的 ??我不记公式的,多写几遍就理解了。

                   自我2: 切,你那是被公式给唬住了。

                ......

              自我1: 反正,三角函数这个东西,即简单又易懂。可是被你学杂了。 

                   自我2: 一边去,我看你也就是知道逻辑,并没有理解内在!

              自我1: 好,好,好,这样吧!!

                         物理学家费曼说:"如果你不能用简单的语言给一个外行解释一个东西,你就是没有真正理解这个东西"。

                         不需要我说了吧,赶紧去找幼儿园的小朋友,看谁可以让ta听懂三角函数。

                    自我2: who 怕 who,就是当着全宇宙的小朋友面,我也能讲懂 ! !

              自我3: 不用找了,你们俩个不就是吗 ?

                自我1自我2 :0.0 ...... 0.0


               听说,如果我们做的是不该做的事,内心就会有一些压力,ta就会发出禁止的声音。

               从单位圆开始,单位圆是半径为 1 的圆,现在试着画一个单位圆。

               用 Python 画出来。资料: turtle 、turtle官方文档

    • import turtle
      # 导入画画模块
      
      turtle.showturtle()
      # 显示窗口
      
      turtle.write(" 0 ", font = ("华为琥珀", 20 , "normal"))
      turtle.goto(200,0) # 向 x 轴正方向前进 100,y 不变
      turtle.write("x", font = ("华为琥珀", 20 , "normal")) # 打印文字
      turtle.goto(-200,0) # 向 x 轴负方向前进 100 , y不变
      
      turtle.penup()  # 提笔
      turtle.goto(0,200) # 画 y 轴的坐标,因为提笔了所以没有画线
      turtle.write("y", font = ("华为琥珀", 20 , "normal"))
      
      turtle.pendown() # 落笔
      
      turtle.goto(0,-200)
      turtle.goto(0,-100) # 到坐标轴中心画圆
      turtle.circle(100)
      turtle.write(" r = 1", font = ("华为琥珀", 20 , "normal"))
      turtle.done()
      # 保留窗口

                

               假设 有一点,在圆上运动,记为P。

               我们要研究P点运动时在圆的不同位置和 y 轴有什么关系,那么以什么标准研究好呢 ?

               P 一直变化,ta的坐标也会一直变化,那就研究 ta产生的角度吧。

               连接OP,与OX构成 \measuredangle POX ,这是一个随P运动而改变的角度。

    研究坐标与角度的关系:点 P 轴单位圆做圆周运动时 ,

                  \measuredangle POX与 y 轴的关系是怎样 ?

                 \measuredangle POX与 x 轴的关系是怎样 ?

    y = sin (x)

    如果把   \measuredangle POX与 y 轴的关系 对应为函数。函数自变量 x 是角度,函数因变量 y 是 P 的 y坐标。

    这个对应法则记为 sin,写法如下,

    • y = sin (x),x 是 角度。

    当 x = 0º,点 P 就在 x 正半轴上,  sin (0º) = 0

    当 x = 90º, 点 P 也正好在  y  正半轴上, sin(90º) = 1

    现在 P 点转了一圈,那么 ta 运动范围可达到的极限是 -1 到 1,即函数 y = sin(x) ,y 的值域是 [-1, 1]。

    对呀,在坐标轴上圆的半径是 1 ,P 在单位圆活动距离中 y 最大分别是,当 P 在 90º 和 270º。

    不过,我们研究的是 坐标与角度的关系,距离是正数,在表示负下标时如 sin ( 270º ) ,要写成 负数,sin(270º) = -1。

    所以,试试 sin(180º) 和 sin(360º) ...

    "都是0、都是0",我猜小朋友能答对的。(如果这句话伤害到了您,我只能表示惬意~)

    那 sin(45º) 是 sin(90º) 的一半是吗 ? 

    看看函数图像就明显了,sin(45º) 图像,

    对比 y 轴,连接 y-P 的虚线显然要大于 1 的一半, 所以 sin(45º) 并不是 sin(90º) 的一半。

    这是由俩个等边直角三角形组成的正方形,我们可以用 勾股定理 or 正方形对角线 计算出 PH 即sin(45º)。

    勾股定理:研究的是直角三角形三边的关系 a^{2} + b^{2} = c^{2},应该不陌生。

    PH^{2} + OH^{2} = OP^{2}

    PH^{2} + OH^{2} = 1^{2}

    \because PH = OH = y

    \therefore y^{2} + y^{2} = 1

        2*y^{2} = 1

         y^{2} = \frac{1}{2}

         y =\frac{1}{\sqrt{2}}

         y = \frac{\sqrt{2}}{2}

    那么,您能画图分析并计算出 sin(60º) 吗,可做辅助线。

    这些都是三角函数的特殊特殊角,

     看 sin 时,我发现 60 和 120 都是 \frac{\sqrt{3}}{2} , 这是为什么 ?

     哈哈,回想 P 点的图像,就会发现在 这俩个角度,P的 y 坐标并没有变化,只是 x 坐标变了,

    那么,同理推出更多相似的角,

     60º 和 120º 和 240º 和 300º 是相似的,超过 180º 的是负数。

    如果把 sin(0º) 到 sin(360º) 的点连起来,在坐标轴上长啥样 ?

    sin 分数形式 小数形式
    sin(0º)  0 0.0
    sin(30º)   \frac{1}{2} 0.500···
    sin(45º)  \frac{\sqrt{2}}{2} 0.707···
    sin(60º) \frac{\sqrt{3}}{2} 0.866···
    sin(90º) 1 1.0
    其ta象限都是对称角 \ \
    别名:正弦曲线

     

    看坐标轴的横坐标竟然不是 x ? 

    三角函数的正弦曲线研究的是 y  和 P 运动的角度  的关系,一般把 P 运动的角度记为希腊字母 \theta(读西塔,也是渐进记号的读法)。

    y = cos(x)

    那么, \measuredangle POX与 x 轴的关系是怎样 ?

    相信您看了sin已经知道个大概,就不在复述,因为还有一个更重要的知识呢 --- 弧度制


    弧度制

        用( º )的单位表示角,是角度制,1º 等于 周角的  \frac{1}{360} 。

        弧度制是由大数学家欧拉提出,长度等于半径长的弧所对的圆心角记为 1 弧度(rad),其核心:圆弧的长度是半径的多少倍

        我们知道了一些常用的角度与弧度的对应值,

    角度 弧度
    \frac{\pi}{180}
    90º \frac{\pi}{2}
    180º \pi
    360º 2\pi

     举个例子,360º

    360º时,P 刚好落在 x 轴上。

    半径为 r 的圆的圆周 = 2 * 圆周率 * 半径,2\pi r...

    弧度制核心:圆弧的长度是半径的多少倍

    圆弧长度 = 圆的圆周 ,多少倍显然是除法关系:   \frac{2\pi r}{r} = 2\pi

    90º 是 360º 的 四分之一, 60º 是 360º 的 六分之一 ,试着计算 90º 、60º 是多少弧度(rad) ! 

    再把 sin()、cos() 函数与弧度制联系在一起,sin(\frac{\pi}{6}) = ~?

    \pi = 180º ,\frac{180}{6} = 30,sin(30º) = ?

    做另一个三角形,使勾股定理成立,这一步我省略了尝试自己推出来,最后得出 :\frac{1}{2} 。

    哦,对了。角 \theta 的弧度公式是 \theta = \frac{l}{r}, l : 角 \theta 对应的弧长, r :圆半径。


    地球周长

            引言: 亚里士多德在其著作中记述了很多地球是圆形的证据,于是就有许多学者想要知道地球的周长是多少 !

            回忆圆的周长公式 : 2\pi r, 只有地球半径是不知道的。

            \vartheta 知道地球半径即可~

            不要百度?半径因为今天主角是数学...

            数学史上,俩次数学高峰期第一次就在古希腊,让我们一起回到那个数学史上了不起的年代吧。

            地球周长最早是被古希腊学者兼亚历山大图书馆第三任馆长所记录 --- ta叫埃拉托斯特尼 简称 埃尼吧。

            埃尼 从书中便知道每年的6月21日,阳光在正午时会直射 (光线和地面是直角) 到埃及的阿斯旺水井中。

                    p.s. 因为阿斯旺处于北回归线上,阳光会在夏至时直射北回归线。

            于是,埃尼测量了6月21日当天的亚历山大,阳光在正午时射入水井中的角度为 7º 12''。

            接着,从旅行的商队那里得知了亚历山大与阿斯旺之间的近似距离,这是角 \theta 对应的弧长 。

            按照上图分析,照射给亚历山大与阿斯旺的太阳光是平行的。

            所以,亚历山大和阿斯旺之间的夹角也等于 7º 12''。   

            那么,亚历山大和阿斯旺之间距离(弧长) L 也就是:  l = 2\pi r * \frac{\theta}{360}º

           弧长化简:l = \frac{\pi r*\theta}{180}

           而亚历山大已经从商队知道了弧长 L ,因此我们转换公式为求半径 : r = \frac{180*l}{\pi*\theta}

           最后把弧长L代入便估算了地球的周长是 39, 690公理,与今天的 40,076公理只有 2% 的误差。

     

           总结:计算地球周长,结合一个圆以圆上的一个弧度和角度,求出ta的半径再代入 圆的周长公式 : 2\pi r 即可。


    地月距离

              古希腊学者再计算出地球周长之后。又在这个基础上琢磨地球和月亮的距离了,我们一起回到那个搞事情 NX 的年代吧。

    前置技能:圆形的阴影。

               圆形的阴影:一个圆形的物体经过光的照射后会有一个圆形的阴影。随着物体的不断升高,阴影会渐渐变成一个 ▪️ 黑点。这个黑点到圆形物体的距离刚好是物体直径的 108 倍,地球?也是如此,可以用手电筒?代替太阳模拟。

              古希腊学者,以这个规律来研究地月距离。说到月球,不得不说一个特殊现象 --- 天狗食月。

              天狗食月,是因为地球夹在太阳和月亮之间,挡住了供给月球的太阳光导致看月亮好像是被咬了。

    小的是月球,大的是地球,太阳光从右边过来

              当月球不断运动经过地球产生的阴影区时,古希腊学者估算出月球通过面前这段阴影区(FE)长度大概是月球直径(ED)的 2.5 倍。

              数学表达: FE = 2.5ED

               为方便分析,古希腊学者又建立了数学模型,

              这样就产生了 3 个三角形,刷题的经验告诉了我们,这就是求出地月距离的关键。

              ta们分别是 ABC、AFE、CDE ...

              三角形求高的公式:h=2×S△÷a(S△是三角形的面积,a是三角形的底)

     

                      思考 3 min...

               


              从小到大,依次分析:

                                       最小的三角形 CDE,ta的高就是 地月之间的距离,ta的底是 月亮的直径。

                                       次大的三角形 AFE,ta的高是 FE * 到月球的距离,ta的底是 FE = 2.5ED。

                                       最大的三角形 ABC,ta的高是 108*BC(根据圆形阴影理论),ta的底是 BC(地球直径)。

              因为三角形 AFE\sim EDC,比例关系为 2.5。所以俩个三角形高的比例也是 2.5。

                          p.s.  如果两个图形形状相同,但大小不一定相等,那么这两个图形相似(相似的符号:∽)。

              把AFE三角形的高记为 AH(H点需要自己标注),CDE三角形的高设为 x ,则 AH = 2.5x。

              三角形 ABC的高记为 AG,G点需要自己标注上去。

              那么从H点到G点也是地月间的距离,因此 HG = x。

              推出 :2.5x + x = AH + HG = AG,又因为 AG 是三角形 ABC 的高等于 108 * 地球的直径(记为d)。

                          2.5x + x = 108 * d

                                 3.5x = 108*d 

                                      x = \frac{108*d}{2.5}

             埃尼计算出来的地球半径为 39, 690 ,古希腊学者们取了近似值 40, 000,那么地球直径为 d = r * 2 = 40, 000 * 2 = 80, 000。

             代入公式即 \frac{864000}{3.5} = 247000 英里,这就是古希腊学者计算的地球距离,与今天计算的 239, 000 英里相差也不大。

             后来,法国学者运用三角函数(另三角学方法)也解出来,因为三角函数本就源于天文学......


    恒星距离

           计算恒星距离非常方便,因为只需要眼睛、鼻子、手指,电影里面水手也经常会用视差法。

                   p.s.  只适合度量 300 光年以内的恒星距离。

    做实验

           如果把右手食指(竖起来)紧贴着鼻子的中间,现在俩只眼睛看手指,这时的食指是处于左右眼间。

           如果闭上左眼看食指,食指会在右边一点;如果闭上右眼看食指,食指会在左边一点。

           实验? ......

           食指与俩只眼睛?之间的夹角,称为视差;

           俩只眼睛?之间的距离,称为基线;

           我们再一般化视差、基线这俩个概念,等下好用于计算恒星距离。

           基线:有一定距离的俩个点(?) 之间的距离。

           视差:从有一定距离的俩个点(?) 上同时观察一个目标(☝️) 产生的方向差异。

           视差角:从目标看俩个点之间的夹角。

           安利小知识:知道视差角和基线就可以计算出目标和点之间的距离。

           推理上面小知识的连环画:

    1:  黑色的俩个点是眼睛,绿色是鼻子或食指

     

    2: d是基线,西塔是视差角

     

    3: h是点到目标到距离

          我们现在需要求出 h ,要怎么搞 ??

          有点抱歉,三角函数的 tan 函数我还没讲,那简单介绍一下吧。

              tan(\theta) = \frac{a}{b}\theta 是角度这个不用解释, a 是 \theta 的对边, b 是 \theta 的邻边。

          举一个现成的例子,以上图的 \frac{\theta}{2} 以为例。

              tan(\frac{\theta}{2}) = \frac{\frac{d}{2}}{h},结合图片和定义看看,会等的......

           推一下公式,变成求 h 的:

               tan(\frac{\theta}{2}) = \frac{\frac{d}{2}}{h}

                h = \frac{\frac{d}{2}}{tan(\frac{\theta}{2})}

            好,这样就求出目标(食指)到点(眼睛)的距离。   

            看着这图(新图),目标就是恒星,点就是地球和 6 个月后的地球。

            恒星与太阳的距离就是 点到目标的距离(d) ,求出 d 只需要知道 P 这个角度是多少 !

            至于地球和 6 个月后的地球的距离也就是基线,是地球椭圆轨道长轴的一半记为 a。

                   tan(p) = \frac{a}{d} 

                   d = \frac{a}{tan(p)}

            p 需要计算得出,a 是以知,这样就可得出 d,恒星的距离就计算出来啦。

    •                          半长轴就是椭圆中离中心最远的点。
    •                          对于地球公转轨道来说,就是地球的远日点距离。
    •                          地球在远日点时,与太阳的距离是152,097,701.0千米,或是约1.521亿千米。

    太阳地球间的距离

    上弦月

              这张图,就是我们突破计算的关键,普及一点 太阳、地球、月亮 的关系。 

              每年每月的农历初一,月球正在太阳和地球中间(上图中,月球会在 斜线S 上),这时候的月亮无法看到因为地球看到的月球是没有光的背面。

              随着月球的运动,月球逐渐挪开了,这时候从地球(西方才能看到)看到的月球是弯弯的勾月......          

              在农历初八时,从地球(东方可见前半夜)看的月亮是明亮的半面,如上面这样、几何图形是上上图那样 -- 直角三角形。

             到农历十五、十六时,月亮已经运动到与太阳呈 180º。这时候从地球看到的月亮是完全的因为看到的是月球受光的一面。

             这 4 个阶段,分别被称为 "新月"、"峨眉月"、"上弦"、"满月",如此反复 满中逝,逝中满......

             日中则移,水满则溢,月盈则亏,这是自然界的铁律。

             求的太阳与地球的距离,也就是斜线 S,而 L (地月距离)古希腊学者已经计算出来,所以以知。

                    S * cos(\varphi) = L

             我们现在只需要知道 \varphi 这个角度是多少即可求出 S ~

             阿里(阿里斯塔克斯) 虽然不知道 "上弦" 月出现的正确时间,依然计算出  \varphi = 87º (实际是 89.853º)。

                   S = cos(\varphi)*L

             阿里的得出一个不确定结果 S: 地月距离的 20 倍。

             实际上:地月距离的 390 倍,大概是 15 亿公里......           


    计算机新闻分类

              现在浏览器上的新闻,都是计算机自动分类的。

              计算机分类的原理是三角函数的余弦定理 + 向量。

              余弦,我们已经知道一点点,更多的知识需要您自己学习,而向量是多维空间中有方向和特定长度的量。

              原理 : 余弦定理可以只靠俩个三角形的俩个边的向量,计算出这俩个边的夹角。 

              一篇新闻里会有很多词,像 “之乎者也的” 这种虚词,对判断新闻的分类没有太大的意义。而像 “股票”、“利息” 这种实词,是判断新闻分类的重点词。科学家精选了一个词汇表,这里面收录着 64000 个词,每个词都对应一个编号。他们先把大量文字数据输入计算机,算出每个词出现的次数。   

             一般出现次数越少的词越有搜索价值,比如 “爱因斯坦”、“数学之美”;而出现次数越多的词,越没有搜索价值,比如“一个”、“这里” 等等。根据这个标准,把词汇表里的64000个词都算出各自的权重,越特殊的词权重越大。然后,再往计算机里输入要分类的新闻,计算出这64000个词在这篇新闻里的分布,如果某些词没有在这篇新闻里出现,对应的值就是零,如果出现,对应的值就是这个词的权重。这样,这64000个数,就构成了一个64000维的向量,我们就用这个向量来代表这篇新闻,把ta叫做这篇新闻的特征向量。


               不同类型的新闻,用词上有不同的特点,比如金融类新闻就经常出现 “股票”、“银行” 这些词,所以不难判断,同类新闻的特征向量会有相似性。

               只要算出不同新闻特征向量之间夹角的大小,就可以判断出是不是同一类新闻。这时就要用到余弦定理,来把两则新闻的特征向量之间的夹角算出来。科学家可以人工设定一个值,只要两个向量之间的夹角小于这个值,这两则新闻就可以判定成同一类新闻。    

    余弦定理:对于任意三角形ABC,已知两条边的边长分别为a和b,两边的夹角为C,则第三边的边长满足下列等式:
                              c^{2} = a^{2} + b^{2} - 2ab *cos(C)

           在向量中公式转换为:

           把公式翻译为代码:

    double CosSimilarity(double *va, double *vb, int vn)
    {
        double cossu = 0.0;
        double cossda = 0.0;
        double cossdb = 0.0;
    
        for (int i = 0; i < vn; i++)
        {
            cossu += va[i] * vb[i];
            cossda += va[i] * va[i];
            cossdb += vb[i] * vb[i];
        }
    
        return cossu / (sqrt(cossda) * sqrt(cossdb));
    }

           vn 是多少维,也就是词典中有多少个词。 

           完整代码:

    #include <stdio.h>
    #include <math.h>
    
    double CosSimilarity(double *va, double *vb, int vn)
    {
        double cossu = 0.0;
        double cossda = 0.0;
        double cossdb = 0.0;
    
        for (int i = 0; i < vn; i++)
        {
            cossu += va[i] * vb[i];
            cossda += va[i] * va[i];
            cossdb += vb[i] * vb[i];
        }
    
        return cossu / (sqrt(cossda) * sqrt(cossdb));
    }
    
    // 建立的词典
    const int VN = 11;      // 11 个词即 11维
    const char *base_words[] = 
    {
        "进攻", "炮弹", "射程", "榴弹炮", "发射", "口径", "迫击炮", "瞄准", "后坐力", "弹道", "目标"
    };
    
    /* 原文 */
    //第一行: 口径为155毫米的榴弹炮,炮弹的射程超过40公里,炮弹发射后击中目标的弹道是一条抛物线
    //第二行: 大口径榴弹炮射程很远且弹道弯曲,炮弹通常都不是直接对着目标瞄准,而是计算好抛物线弹道,以一定的仰角和方向发射炮弹
    //第三行: 我们必须统一口径,抵挡敌人发射的糖衣炮弹的进攻
    
    int main()
    {
    	// v1代表原文第一行的 11 个关键字出现的权重(一一对应, 出现n次权重为n)
        double v1[] = { 0, 2, 1, 1, 1, 1, 0, 0, 0, 1, 1 };
        double v2[] = { 0, 2, 1, 1, 1, 1, 0, 1, 0, 2, 1 };
        double v3[] = { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0 };
    
        /* 检查相似度 */
        printf("第一行 和 第二行 的相似度: %.2lf\n", CosSimilarity(v1, v2, VN));
        printf("第一行 和 第三行 的相似度: %.2lf\n", CosSimilarity(v1, v3, VN));
        printf("第二行 和 第三行 的相似度: %.2lf\n", CosSimilarity(v2, v3, VN));
        
        return 0;
    }

               代码还可补充,当相似度大于设定值时,归为一类新闻...... 


    IT起源学说:e = 2.71828... 

               自然常数 e , 是一个无限不循环的小数,也是最能体现自然界特征的数。

                                                   p.s. 极限的定义:当 n --> (1+\frac{1}{n})^{n} 的极限。

               e 的出现,连接起三角函数与指数函数。

               如果 e 不精确的等于 2.71828... ,绝大多的积分变化就会失效。

               计算机的信息技术基础便是源于傅里叶、拉普拉斯、希尔伯特等变化开始的,IT产业的起源所在。

               举个例子:理解 e

    •      您在银行存了 1 块钱,银行给您非常高的利息,年利率是100%,这样过一年存款就变成了 2¥。
    •      但银行非常慷慨,可以半年付一次利息,那肯定比一年付一次赚得更多。
    •      那到底半年付一次利息能赚多少钱呢,是 2.25¥。
    •      您就觉得非常划算了,就要求银行按季度来付利息,这样算出来是 2.37¥。
    •      如果您要求更密集一些,按月来付利息,每月付年利息的 \frac{1}{12} ,那么年底能拿到 2.61¥。
    •      发现只要支付利息的间隔越短,收益就越高。
    •      那现在按天来支付利息,算出来就是2.714567¥。
    •      我们推到极致,按秒来付利息,那这个收益会大到什么程度呢 ?
    •      无限切分,这样最终的收益不是无限大的,而是无限趋近于一个数值,自然常数 e,收益就是 2.71828¥。

         大约 2.718 倍的收益率,背后的实质是增长的极限,ta还可以出现在任何有裂变式增长的情境下。如微生物繁殖 ......

         这是一个宇宙通用数:如果存在外星文明,那么ta们的数学也会有一个描述宇宙自然规律的数,类似我们的 e = 2.71828...

         因为文明是贴切于生活的,工具的发明是针对问题的,数学也可以理解为人类文明持续发展的工具之一,

    •      为计算数字,发明了算盘;
    •      为测量绝对的数值,发明了尺子、时钟、天平、称;
    •      为测量化学反应的当量,发明了有刻度的量器;
    •      为让计算机快速完成判断真假、比较大小、排序、挑选最值,发明了二叉树。

             而 e ,比ta们都重要,ta是宇宙本身,谁都比不上 e,如果 e 不等于 2.71828... , 也许就不会有宇宙,更不会有我们了 。 


    复数

             从最基本的概念出发,推导出复数这个东东。

             首先,对这个东东我也是不了解,数学啥时候出来一个复数,没听说过。

             诶,想数学最早起源于计数吧,著名的:结绳计数。

             于是有了 1、2、3、4、5、6、7、9···,之后有了【加法】,为了分别计算又冒出一个分别参与运算的 0,自此【自然数】渐渐被整个人类所接受。

             有了加法后,又想到加法的逆运算【减法】,自然数并不完备,慢慢又推导出了【负数】,自此由自然数变成了【整数】。

             为了加速计算加法,【乘法】便诞生了,不过俩个整数相乘还是整数......

             有了乘法的概念,乘法的逆运算【除法】又自然而然的诞生,因为有时候除出来的商不是整数,因此出现了【有理数】。

             有了乘法,冒出了 "平方" 的概念(自己乘自己),后来又想到了 平方的逆运算 【开方】。

             对 2 开方是什么东西,于是在有理数的基础上扩充为【无理数】,现在整个数系叫【实数】......

             开方对正数来说,数系是完备的,但对 -1 开方又是什么东西,没有一个实数平方等于 -1 ,于是数系添了【虚数】......

             让新定义【虚数】的平方等于 -1,这就是 i,即 i * i = i^{2} = -1

             所以,整个数系,由是实数和虚数组成,叫复数,有了复数,加减乘除、平方开方,都完备。

             复数的基础虽然在自然界没有对应的事物,但建立在不存在的基础上的工具解决了许许多多的现实问题,如电磁波。

    用数学研究数学 >> 在几何上表示复数...

             实数轴:是一种特定几何图形;原点、正方向、单位长度称数轴的三要素,这三者缺一不可。

           虚数轴: 对应平面上的纵轴,与对应平面上横轴的实数同样真实。

             复平面: 虚数轴和实数轴构成的平面,复平面上每一点对应着一个复数。


    陌生的指数

         指数,我还没接受过来。

                    10^{3} = 10 * 10 * 10

         也许,常年的解题经验告诉您 :指数是多少,就是多少个 10 相乘。

         的确是的,不过只在指数是自然数时。指数的法则才是上面那样,如果指数是这样的呢 ?

                    e^{i\pi}= -1

         是不是 i\pi 个 e 相乘呢 ?

         不、不是,绝对不是。

         当指数不是自然数时,不用 "乘以的个数" 来思考指数,而是用数学公式来定义。

         定义思维,是研究数学最珍贵的。具体的介绍可以参见:集合论

         定义的 10^{x} 要满足 3 条指数法则:

                     10^{1} = 10

                     10^{a} * 10^{b} = 10^{a+b}

                     (10^{a})^{b} = 10^{ab}

         这种 "无矛盾性" 的定义才是数学的基石,举个例子,也许您不知道 10^{0} = 1  ?

         研究一下式子,

          10^{5} = 100000

          10^{4} = 10000

          10^{3} = 1000

          10^{2} = 100

          10^{1} = 10

          10^{0} = 1

          10^{-1} = \frac{1}{10}

          发现指数每减 1 ,结果减缩小了 \frac{1}{10} 。所以,10^{0} 也是这样定义出来的 ?

          自然数的确可以这样推,不过这还不是正确的定义。

           10^{a} * 10^{b} = 10^{a+b }

           10^{1} * 10^{0} = 10^{1+0}

           10^{1} * 10^{0} = 10

           10*10^{0} = 10

           10^{0} = 1

    发现对于指数法则的前 2 条都对应了,我带进了第 3 条,结果。

    啊哈,没毛病。


    最美的数学公式

              e^{i\pi}=-1:单位圆上,幅角为 \pi 的复数等于 -1。

             为了理解欧拉的公式,从 e^{x} 的微分方程来表达指数函数。

    •                   e^{0} = 1   
    •                  (e^{x})' = e^{x}   

              求微分是从函数创造函数的方法,可能不明所以,任何函数都可以转换为幂级数的形式表达包括指数函数。

                             e^{x} = a_{0} + a_{1}x^{1} + a_{2}x^{2} + a_{3}x^{3}+\cdots 

               a_{0} 是 x 的 0 次方项,系数为 a_{0};

               a_{1}x 是 x 的 1 次方项,系数为 a_{1};

               a_{2}x^{2} 是 x 的 2 次方项,系数为 a_{2};

               把这些项相加,得到的式子称为 幂级数,再把 指数函数的幂级数 表达为微分的形式。    

        ' 符号涉及微分,需要考虑俩条法则:

    1.  常数的微分结果等于 0,(a)' = 0;
    2.   n 次方项的微分结果等于 nx^{n-1}(x^{k})' = kx^{k-1};

         指数函数的幂级数:  e^{x} = a_{0} + a_{1}x^{1} + a_{2}x^{2} + a_{3}x^{3}+\cdots

         以上面的形式求微分:(e^{x})' = (a_{0}+a_{1}x+a_{2}x^{2}+a_{3}x^{3}+\cdots )'

         分解右边的式子: (e^{x})' = 0 + 1*a_{1}+2*a_{2}x+3*a_{3}x^{2} + \cdots

         因为微分是从函数中创造函数,这俩个函数其实是相等只是表达的形式不同。

                 e^{x}=(e^{x})'

          分别展开:

                e^{x} = a_{0}+a_{1}x+a_{2}x^{2}+a_{3}x^{3}+\cdots     

               (e^{x})' = 0 + 1*a_{1}+2*a_{2}x+3*a_{3}x^{2} + \cdots

                a_{0}+a_{1}x+a_{2}x^{2}+a_{3}x^{3}+\cdots  =  1*a_{1}+2*a_{2}x+3*a_{3}x^{2} + \cdots 

           比较等式俩边 x 的各项的系数:

    •            x^{0}:  a_{0} = 1 * a_{1} 
    •            x^{1}:  a_{1} = 2*a_{2}
    •            x^{2}:  a_{2} = 3 * a_{3}   
    •            x^{3}: a_{3} = 4*a_{4}
    •                       ······
    •            x^{k}: a^{k} = (k+1) * a_{k}      

             感觉规律还不明显,那把公式变成分数形式:

    •            a_{1} = \frac{a_{0}}{1}
    •            a_{2} = \frac{a_{1}}{2}
    •            a_{3} = \frac{a_{2}}{3}
    •            a_{4} = \frac{a_{3}}{4}   
    •               ······
    •           a_{k} = \frac{a_{k-1}}{k} 

             这样使之成为了一个数列,只需要知道 a_{0} 就可得到整个数列的值。

             现在想想 a_{0} 是多少 ?

              回顾关于 e^{x} 有关的式子,

                           e^{0} = 1, e^{x} =   a_{0}+a_{1}x+a_{2}x^{2}+a_{3}x^{3}+\cdots

              当 x = 0 时, e^{0} = 1。把  x = 0 代入到   a_{0}+a_{1}x+a_{2}x^{2}+a_{3}x^{3}+\cdots 

                           e^{0} = a_{0} + a_{1}*0^{2} + 0\cdots    

                           e^{0} = a_{0} + 0 + \cdots

                           e^{0} = a_{0}

                           \because e^{0} = 1 ,\therefore a_{0} = 1     

                知道 a_{0} 就可以得到之前的数列了。                 

    •             a_{0} = 1           
    •             a_{1} = \frac{a_{0}}{1} = \frac{1}{1}
    •             a_{2} = \frac{a_{1}}{2} = \frac{1}{2}
    •             a_{3} = \frac{a_{2}}{3} = \frac{1}{2} * \frac{1}{3} = \frac{1}{6}
    •             a_{4} = \frac{a_{3}}{4} = \frac{1}{6} * \frac{1}{4} = \frac{1}{24}
    •                      ·····
    •             a_{k} = \frac{a_{k-1}}{k} = \frac{1}{a_{k-1}} * \frac{1}{k} = \frac{1}{k*a_{(k-1)}}
    •            看了一会,发现一个规律 a_{k} = \frac{1}{k!}, 第 k 项等于 1 除以 k项的阶乘 (k * (k-1) * ··· * 3 * 2 * 1)。

                 e^{x} = a_{0}+a_{1}x+a_{2}x^{2}+a_{3}x^{3}+\cdots

                 e^{x} = \frac{x^{0}}{0!} + \frac{x^{1}}{1!}+\frac{x^{2}}{2!}+\frac{x^{3}}{3!}+\cdots

                 这个式子是泰勒展开,专业名字叫,

                         指数函数 e^{x} 的泰勒展开: e^{x} = \frac{x^{0}}{0!} + \frac{x^{1}}{1!}+\frac{x^{2}}{2!}+\frac{x^{3}}{3!}+\cdots         

                        而学习的式子,TA的指数是 i \pi,把TA们代入 指数函数 e^{x} 的泰勒展开试一试:

                                                                   e^{x} = \frac{x^{0}}{0!} + \frac{x^{1}}{1!}+\frac{x^{2}}{2!}+\frac{x^{3}}{3!}+\cdots

                                                                  e^{i \pi} = \frac{(i \pi)^{0}}{0!} + \frac{(i \pi)^{1}}{1!}+\frac{(i \pi)^{2}}{2!}+\frac{(i \pi)^{3}}{3!}+\cdots

                        复数的知识上面有记录,i^{2} = -1

                                                                  e^{i \pi} = \frac{(i \pi)^{0}}{0!} + \frac{(i \pi)^{1}}{1!}-\frac{( \pi)^{2}}{2!}+\frac{(i \pi)^{3}}{3!}-\frac{( \pi)^{4}}{4!}+\cdots

                                                                   e^{i \pi} =1 + \frac{(i \pi)^{1}}{1!}-\frac{( \pi)^{2}}{2!}-\frac{(i \pi)^{3}}{3!}+\frac{( \pi)^{4}}{4!}+\cdots

                         根据虚数 i 的性质,式子变化的规律:

                得说一件事情,e^{i\pi}=-1 是欧拉推来出的。

                那么欧拉推过来之前的 e 的指数是什么 ?

                实际只是一个希腊字母 \theta,表示任意角度。

                e^{i \theta} 才是原来的样子。

                所以,e^{i \theta} 的泰勒展开式:e^{i \theta} = \frac{(i \theta)^{0}}{0!} + \frac{(i \theta)^{1}}{1!}+\frac{(i \theta)^{2}}{2!}+\frac{(i \theta)^{3}}{3!}+\cdots

                                                          e^{i \theta} = \frac{(i \theta)^{0}}{0!} + \frac{(i \theta)^{1}}{1!}-\frac{( \theta)^{2}}{2!}-\frac{(i \theta)^{3}}{3!}+\cdots

                各位知不知道 sin(\theta) 和 cos(\theta) 的泰勒展开 ?

                                                          sin(\theta) = \frac{\theta^{1}}{1!}-\frac{\theta^{3}}{3!}+\frac{\theta^{5}}{5!}-\frac{\theta^{7}}{7!}\cdots

                                                          cos(\theta) = \frac{\theta^{0}}{0!}- \frac{\theta^{2}}{2!}+\frac{\theta^{4}}{4!}- \frac{\theta^{6}}{6!}\cdots

                泰勒展开资料:https://en.wikipedia.org/wiki/Taylor_series ,需要VPN翻墙没有可以找我。

                把 e^{i \theta} 的泰勒展开以奇次项和偶数项分开,发现偶数项对应的是 cos(\theta) 的泰勒展开,奇次项对应的 sin(\theta) 的泰勒展开。

                哦哦,感觉好神奇!

                诶,不对奇次项还少乘一个 i,我们补上 i 再写成等式。

                                                           e^{i \theta} = \frac{i \theta^{0}}{0!} + \frac{i \theta^{1}}{1!}-\frac{ \theta^{2}}{2!}-\frac{i \theta^{3}}{3!}+\frac{\theta^{4}}{4!}+\frac{i\theta^{5}}{5!}-\cdots

                                                                 =cos(\theta) + i*sin(\theta)  

                接着代入 \pi,  e^{i \pi} 的泰勒展开:

                                                            e^{i \pi} = cos(\pi) + i * sin(\pi)

                三角函数的博客,记录了cos和sin的求值方法这里不在复述。

                                                            e^{i \pi} = -1 + i * 0

                                                             e^{i \pi} = -1                

                                           


    傅里叶变换(FT)

              十九世纪法国数学家 傅里叶 发现任何周期性的函数(信号)都等同一些三角函数的线性组合。

              简单的来说,傅里叶变换是把一个复杂的事物拆解为一堆标准化的简单事物的方法。

              如,跳舞这个复杂的动作由腿部、手部、肩部、腰部等单一的动作组成。

              举一个相关的例子,傅里叶运用于声音中。

              声音是空气的震动,手指轻轻地弹一下碗,我们会听到 悦耳的声音。

              声音由 音调 和 音量(响度) 组成,音调是震动的频率,音量是震动的幅度。

               上图的正弦曲线,也是一个简单的声音。

               这个声音呈完美周期性的变换、频率是固定的。

               而一个复杂的声音,就是由这样简单的声音组成。

              因此,傅里叶变换在声音的领域中即:

              由一系列简单的波动如搭积木一般组成一个复杂的波动,看下图。

             图中俩条红色的曲线,都是由那些蓝色的波形叠加而出。

             傅里叶变换最核心的是可以告诉我们,图中红色曲线是由多少组成比例的蓝色曲线构成。

             红色曲线 = 频率是 100 的蓝色曲线 × 0.5 + 频率是 200 的蓝色曲线 × 0.2 + 频率是 300 的蓝色曲线 × 0.1 + 频率是 400 的蓝色曲线 × 0.08 + ……

             取出蓝色曲线的数值成分:红色曲线 = (0.5, 0.2, 0.1, 0.08, ......)。

             写一篇文章,会参考许多资料;那这篇文章,就可以拆分为 《XX》*0.1 + 《XX》*0.2 + ......

             所以,现在大部分原创经常是已知的、简单的事物的排列组合。

            这里说的是,傅里叶变换的思想原理,而其中更加有趣的地方,您可以看看:


              另外推荐:

              快速傅里叶变换(FFT),在算法竞赛中多用于求 "卷积"(多项式乘法),朴素的卷积各系数相乘的时间复杂度是 O(n^{2}),通过 FFT 后减为 O(n~ log n)

     

    展开全文
  • 一直都没有好好学动画,因为懒...最开始学三角函数的时候就是从勾三股四弦五开始,勾股定理描述的是对于直角三角形,直角两条边的平方和等于斜边的平方 a^2+b^2=h^2 常用三角函数 sinθ = a/h conθ = b/h ta...

    原文链接:https://mp.weixin.qq.com/s/qNRL_bx3NJcUP2mkm38Kbw

    一直都没有好好学动画,因为懒于计算,借此机会补补课

    三角函数

    勾股定理

    最开始学三角函数的时候就是从勾三股四弦五开始,勾股定理描述的是对于直角三角形,直角两条边的平方和等于斜边的平方

    a^2+b^2=h^2

    常用三角函数

    sinθ = a/h
    conθ = b/h
    tanθ = a/b

     极坐标系和单位圆

    在笛卡尔直角坐标系中,任一点(x,y)都可以转化成极坐标表示(r,θ),其中

    r = Math.sqrt(x^2 +y^2)
    θ = Math.atan2(x,y)

    单位圆的定义是半径为单位长度的圆,圆上任意一点的横坐标就是对应角度的余弦值,任一点的纵坐标就是对应角度的正弦值。 

          简单的图像变换  以正弦曲线为例,对函数进行简单的变换,得到不一样的结果

     

    正弦曲线公式:  y = A sin(Bx + C )+ D 

    A 控制振幅,A值越大,波峰和波谷越大,A值越小,波峰和波谷越小;

    B值影响周期,B值越大,周期越短,B值越小,周期越长。

    C值影响图像左右移动,C值为正数,图像右移,C值为负数,图像左移

    D值控制上下移动

     常见的应用场景

    图像应用

    最直观的应用是使用三角函数来绘制Wave曲线

    for(let x = 0;x < width; x++){
        const y = Math.sin(x * a) * amplitude
    }

    再结合三角函数偏移让左右成为波谷,中间成为波峰,就能得到曼妙的波纹

    for(let x = 0;x <width; x++){
       const radians = x/width * Math.PI * 2
       const scale = (Math.sin(radians - Math.PI * 0.5) + 1) * 0.5
       const y = Math.sin(x * 0.02 +xSpeed) * amplitude * scale
    }

     

    之前掘金上很火的一篇文章,也是同样的道理,使用两层正弦函数绘制曲线。fill之后加上stagger动画,就能得到非常酷炫的效果

    如果再结合 鼠标位置 + lerp 动画,就能实现坚果首页同款的动画

    SlowInSlowOut

    正余弦曲线有很自然地缓入缓出的特性, 并且在一个周期里面从 -1 到 1 再回到 -1,非常适合用来模拟一些物理效果。因为真实世界里面,汽车都是缓慢启动,加速,减速,再缓慢减速直到速度变为 0 的,突变会让人很难受。左边的摆球是线性匀速摆动,右边是用了三角函数优化的结果。显然左边的效果设计师会打人。

    只需要使用 sin 或cos 乘以最大角度,就可以得到在摆动最大角度之间的SlowInSlowOut

    ctx.rotate(Math.cos(t / 180 * Math.PI) * Math.PI *0.25)

    角度控制

    在开发过程中,我们常常需要跟角度打交道,比如在头像左上角(45deg)显示Notification红点,用鼠标控制rotation等

    前端JS里面Math.atan2(y,x)可以用来计算(x,y)和x 轴正方向的夹角弧度值

    function getCurrentDegree(){
       const deltaX = mouse.x - window.innerWidth * 0.5
       const deltaY = mouse.y - window.innerHeight * 0.5
       return Math.atan2(deltaY,deltaX) * 180/Math.PI
    }

    三角函数相关的动画并不一定需要用js来写,比如下面DEMO,使用compass依赖,同样可以做到灵活控制在特定角度的动画

    @import "compass";
    
    .checkbox:checked {
       ~ button {
          $per: 180/4;
          @for $i from 1 through 6{
              &:nth-of-type(#{$i}){
                  $angle:$per * ($i-1) * 1deg +180deg;
                  $x: cos($angle) * $d;
                  $y: sin($angle) * $d;
    
                  transform:translate($x,$y) rotate(0deg);
              }
          }
       }
    }

    Case Study 

    前两天在 Codepen 首页看到热门推荐,作者用存 css 动画来实现一个行走的动画,挺新颖的,然而仔细一看,脚步的动画真心觉得别扭,于是想用三角函数优化一下。

    绘制头部:

    drawHead(t){
       ctx.save()
       ctx.beginPath()
       ctx.translate(0,Math.sin(t) * 4)
       ctx.arc(80, -35, 35, 0, 2 * Math.PI)
       ctx.fill()
       ctx.closePath()
       ctx.restore()
    }

     我会给每个方法传入周期参数 t, t 从 0 到 2 PI , 这样能保证所有的周期运动时间同步。

    身体和阴影的绘制都差不多,直接跳过看脚步动画。

    脚有两只,按道理应该是抬脚到落脚的动作完成时,其他部位都完成了一个完整的周期,所以在绘制脚的时候,t 需要除以 2。然后第一只脚和第二只脚相差半个脚自身的周期,可以直接将 t 替换成 t + Math.PI 就是第二脚的动画。

    drawFeet(t){
       t = t / 2
       ctx.translate(Math.cos(t) * -50,0)
       
       //另一只脚
       ctx.translate(Math.cos(t + Math.PI) * -50,0)
    }

     

     脚步动画自身周期的一半是在地面上的,可以通过判断一下 sin 值,小于 0 则不做 y 纵轴方向上的变化。

    ctx.translate(Math.cos(t) * -50, Math.sin(t) > 0 ? Math.sin(t) * -35 : 0)

     为了让脚更加逼真,同样在前半个周期做一下 rotate 。

    if(t < Math.PI){
       ctx.rotate(Math.sin(t) * Math.PI / 180 * -5)
    }

    源码(https://codepen.io/HelKyle/pen/Mqgpvb)

    展开全文
  • 摘要:正弦模型(Sinusoidal Modeling)指的是用一系列振幅、...相比于非常成熟的线性预测模型(Linear Prediction),中文技术社区对于正弦模型的介绍并不足够。本文阐述这一模型的思想和实现思路,解释其中的技术细节。
  • 原标题:三角函数在前端动画中的应用我是个很懒的人,开发过程中经常有意无意地刻意避开数学相关的知识,你也知道解数学题非常枯燥无趣。平时写动画也尽量使用 css3 来实现,timer-function 随意选用,最多也就调...
  • 文件包含了线性调频信号,巴克码,P1,P2,P3,P4码,Frank码等的自相关函数和周期自相关函数
  • 相关函数的理解

    万次阅读 多人点赞 2016-12-13 14:42:08
    每个小x(t)函数(样本函数)就是实际发生的一个表达式确定的函数,对每个小x(t)的处理,都是与之前确定函数的处理方法相同的,但是由于我们没法确定某次究竟发生哪个确定表达式的小x(t),所以我们只能研究发生...
  • 时间序列相关函数

    千次阅读 2015-08-25 17:16:13
    abs,sqrt:绝对值,平方根 log, log10, log2 , exp:对数与指数函数 sin,cos,tan,asin,acos,atan,atan2:三角函数 sinh,cosh,tanh,asinh,acosh,atanh:双曲函数  简单统计量 sum, mean, var, sd,...
  • Matlab 矩阵相关函数

    千次阅读 2014-04-11 16:05:55
    函数 diag 格式 X = diag(v,k) %以向量v的元素作为矩阵X的第k条对角线元素,当k=0时,v为X的主对角线;当k>0时,v为上方第k条对角线;当k X = diag(v) %以v为主对角线元素,其余元素为0构成X。 v ...
  • Less相关函数说明

    2014-09-03 10:26:58
    使用大写的占位符可以将特殊字符按照UTF-8进行转义,函数将会对所有的特殊字符进行转义,除了 (  /  )  /  '  / ~  / ! 。空格会被转义为 % 20 。小写的占位符将原样保持特殊字符,不进行转义。 占位符...
  • Numpy入门之数学函数和逻辑函数Numpy入门之数学函数和逻辑函数数学函数基础的算术运算幂运算三角函数指数与对数数组内部元素加法等相关运算逻辑函数数组对比数组内容 Numpy入门之数学函数和逻辑函数 数学函数 在数组...
  • 闭式解也被称为解析解,知是通过严格的公式所求得的解,即包含分式、三角函数、指数、对数甚至无限级数等基本函数的解的形式。通过给出解的具体函数形式,从解的表达式中就可以算出任何对应值。 2、正则化 P.S:推荐...
  • matlab常用函数大全

    2010-06-20 10:28:18
    5.1 三角函数 5.2 指数函数 5.3 复数函数 5.4 取整和求余函数 6、坐标变换、向量运算等特殊函数 7、矩阵函数和数值线性代数 7.1 矩阵分析 7.2 线性方程 7.3 特性值与奇异值 7.4 矩阵函数 7.5 ...
  • 施瓦茨不等式三角不等式平行四边形恒等式克罗内克乘积(Kronecker Product)和矩阵的拼接(stack)例子例子线性变换和矩阵规范化定义单射(injective)线性群$GL(n)$和$SL(n)$示例群的...
  • OGL绘制相关函数总结1

    千次阅读 2016-06-14 10:53:29
    绘制相关函数 1)glClear** glClearColor,glClearDepth, glClearIndex,glClearStencil,glClearAccum 目的是颜色后台缓存,深度缓存等设置为一个状态,不用每次绘制屏幕的时候都指定颜色。也就是上面的函数只...
  • 1 D3D扩展函数实现求交 这种方法很简单也很好用,对于应用来说应尽力是用这种方式来实现,毕竟效率比自己写得要高得多。 实际上其实没什么好讲的,大概讲一下函数D3DXIntersect吧 D3D SDK该函数声明如下 HRESULT...
  • 机器学习:核函数的一个小题目

    千次阅读 2016-03-27 11:50:30
    题目:给一百万个三角形,再给一个点,判断在不在某个三角形内。 解法1:RTree 解法2:核函数映射。使得二维空间线性不可分的情况变为三维或四维空间线性可分的。 ------------------------------------------------...
  • 在大学数学学科中,线性代数是最为抽象的一门课,从初等数学到线性代数的思维跨度比微积分和概率统计要大得多。很多人学过以后一直停留在知其然不知其所以然的阶段,若干年之后接触图形编程或机器学习等领域才发现...
  • Excel 函数大全

    2020-05-06 10:17:25
    (一) 数学和三角函数 1.ABS 用途: 返回某一参数的绝对值。 语法: ABS(number) 参数: number 是需要计算其绝对值的一个实数。 实例: 如果 A1=-16, 则公式“=ABS(A1)” 返回 16。 2.ACOS 用途: 返回以弧度表示...
  • EXCEL函数大全

    千次阅读 2018-12-15 10:01:49
    函数 用途 语法 参数 1 一.数据库函数 2 1.DAVERAGE 用途:返回数据库或数据清单中满足指定条件的列中数值的平均值。 语法:DAVERAGE(database,field,criteria) 参数:...
  • matlab常用函数

    千次阅读 2019-09-07 16:33:57
    一、软件操作函数 1)命令窗口函数: clc:清空命令窗口,使用向上箭头翻看命令。 open:打开文件,文本文件(*.doc),可执行文件(*.exe),图形文件(*.fig),超文本文件(*.html,*.htm),MATLAB数据库文件(*....
  • 线性代数全记录

    2019-10-09 09:54:05
    学习线性代数慕课(北航 李尚志)课程的记录 文章目录线性代数概览 线性代数概览 数学的重要主题:方程和函数...线性代数:一次方程组+一次函数组。 简。次数只有一次。 少。运算只有两种 矩阵变换和矩阵相乘。 ...
  • R语言--矩阵相关函数

    2014-09-17 15:04:00
     矩阵求逆可用函数solve(),应用solve(a, b)运算结果是解线性方程组ax = b,若b缺省,则系统默认为单位矩阵,因此可用其进行矩阵求逆 6、矩阵的特殊计算  行列求和和平均值rowSums(),colSums(), rowMeans()  行列...
  • #R#时间序列相关函数

    千次阅读 2014-01-29 15:41:50
    abs,sqrt:绝对值,平方根 log, log10, log2 , exp:对数与指数函数 sin,cos,tan,asin,acos,atan,atan2:三角函数 sinh,cosh,tanh,asinh,acosh,atanh:双曲函数  简单统计量 sum, mean, var, sd,...
  • 宋浩线性代数笔记

    万次阅读 多人点赞 2020-04-05 02:00:16
    bilibili 宋浩老师 “惊叹号” 系列 《线性代数》网课 笔记及时间点目录 Github项目地址:https://github.com/cy69855522/Miao-A-SongHao-Linear-Algebra-Notes ???? 前言 我发现吧,线代没记笔记真不行。 浩浩学习...
  • PHP 函数大全

    千次阅读 2018-03-02 18:48:48
    a函数 说明abs 绝对值acos 反余弦acosh 反双曲余弦addcslashes 以 C 语言风格使用反斜线转义字符串中的字符addslashes 使用反斜线引用字符串apache_child_terminate 在本次请求结束后终止 apache 子进程...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,044
精华内容 3,217
关键字:

判断三个函数线性相关