咨询电话
0512-111111225
联系我们
0512-
QQ:
111111225
地址:
湖南省邵阳市
行业新闻
用代码画画-详解三角函数

发布时间:2019-04-28

  用代码画画,必需要懂很多数学知识?如果数学基础没那么好,是否就无法肆意表达,领略其中的乐趣?

  希望通过下文,可以让你破除对数学的恐惧,从基础的概念入手,与三角函数“共舞”。

  如果要问哪个数学函数在图形创作上使用频率最高,那三角函数估计能排在前几位。

  三角函数,用简单的话来讲,是用来描述直角三角形边长和角度关系的函数。常用的三角函数有正弦函数(sin),余弦函数(cos),正切函数(tan)。

  用一张图来举例。假如有一个直角三角形 ABC,其中 a,b 是直角边,c 是斜边。

  那么 ∠B (角B)的正弦函数可以写作 sin(B),它的值就是 ∠B 的对边除以斜边,即b 除以 c。∠B 的余弦函数写作 cos(B),它的值则是 ∠B 的邻边除以斜边,即a 除以 c。而正切函数,可以写作 tan(B),它是 ∠B 的对边除以邻边,即b 除以 a。

  上面所谓的斜边,指的就是直角三角形最长的那条边。而对比和邻边的概念是相对的,对边是指某个角对面的那条直角边,邻边就是某个角相邻的直角边。

  我们在中学时期学习过三角函数,可能对“对比邻”,“邻比斜”,“对比斜”这几个词有印象,他们就是分别用来记忆 sin,cos,tan 的口诀。之后的程序中我们主要会重点介绍 sin 和 cos ,所以只要记住 sin 是“对比斜”,cos 是“邻比斜”即可。

  关于三角函数我们可以记住这样一个性质:直角三角形中,边与角的这种比例关系是固定的,所以无论是多大或多小的三角形,只要两个三角形比例相似,相对应两个角的 sin 值,总是恒定的,因为边长的比例固定。反过来,如果我们已知某三角形某个角的 sin,cos 或 tan 值,结合一定条件,也能反过来推算出角度值。

  为了更好地理解,这里再拿一个特殊的直角三角形来举例。假如一个直角三角形它的各个角分别为 30 度,60 度,90 度。那它的对边之比,就分别为 1:√3:2。

  现在,我们只要将各边对应的比例关系代入,就能手动计算出正弦函数和余弦函数的数值。比如 sin 30 度就为 1/2 ,即 0.5。cos 30 度就为 √3/2,约等于 0.866。

  这就是三角函数的数学定义。看到这里,相信你已经对它有了基本的了解,接下来我们可以学习在程序上的使用方法。

  假如我们现在需要用程序来直接获取 sin 30 度的值,可以在 Processing 中这么写。

  但为何这里写的是 PI/6,而不是 30?这是因为 Processing 中规定,sin 函数中传入的参数采取的是弧度制。

  假设单位圆的半径为 1。根据周长公式 l = 2 π r, 那圆的周长就是 2 π。而 2 π 的弧长(周长),就对应 360 度。同理,一个角的角度如果是 30 度。那它对应的弧长(图中红线部分),就为整个圆弧长十二分之一,即 2 * π / 12,为 PI / 6。

  当然,如果你更习惯用角度制来表示。程序中还可以这么写,只要使用函数 radians,它就能自动将角度值换算成弧度值,相当方便。

  前面铺垫完基础知识,下面就进入正题,开始在程序中作画。首先,我们需要把三角函数的函数曲线画出来

  例子中为了方便对比,同时绘制了 sin 和 cos 函数的图像。其中 PVector 代表向量,常用用于表示点坐标

  A ,B 两点的横坐标都不断递增,这个递增值作为自变量,传入到 sin 和 cos 函数中便获得输出值,接着把输出值的变化,赋值到 A,B 两点的纵坐标上

  从上图可以发现,sin 和 cos 的图形呈现周期变化。图形的大小比例完全相同的,只是在 x 轴方向的位置有所不同。

  对比原图,会发现图形被拉伸或是压缩。这是由于输入值的变化速度发生改变了。输入值变化越慢,输出值也会越慢,因而起伏越小。

  如果在绘制的时候,我们还想严格地控制“波峰”“波谷”的数量。那就需要注意输入值的变化范围。

  由于 sin 函数和 cos 函数,他们的周期都为 2 π。所以当输入值的范围恰好是 2 π 的整数倍时,就可以在屏幕上绘制出与倍数相同的“波峰”“波谷”,并且是可以首尾衔接的。

  因为屏幕宽为 700,所以恰好就能绘制出 7 段重复的波形,可以代入到例子中仔细思考其中的含义。

  在程序中使用三角函数,基本就是靠这个输出值来做文章。因为 sin 和 cos 函数是可以互相转换的,所以在具体应用时,使用 sin 还是 cos 并没有太大差别。

  从上面三个小实例可以看出,若想精确地控制图形元素,就要熟悉它的周期性,控制它的输入输出范围。位移的多少,角度的变化快慢,都与之息息相关。

  具体原理可以查看下图,它可以根据三角函数的定义推导得出。想象在圆周上有一个黑色圆点在运动,它构成的直角三角形的两个直角边,就对应它的坐标值。

  所以我们只要在 α 处,传入一个不断自增的参数。x,y 的坐标就会输出圆周运动。

  这里设定了两个做圆周运动的点,并对它们进行连线。由于两点的运动半径以及运动速度都不一致,所以就使得直线在交织时,产生深浅不一的效果

  在运行实例前,需要先寻找一张图片素材放到所在文件夹中,来作为程序的背景图片。绘制的笔触会吸取背后的图片颜色,与经过变暗处理的背景相组合,就会产生类似于发光的效果。推荐使用梵高的作品做测试,绚丽的色彩和奔放的笔触,会更相得益彰。

  三角函数还有其他用法吗?非常多。最后再截选一些之前的习作,它们都有用到三角函数。

  这节有关三角函数的介绍就到这里。希望接下来和它接触的日子里,你会和我一样爱不释手~

  时代,艺考类信息不断的流转在我们的生活中,小查很是幸运能给大家分享关于艺考的信息与资源,希望对大家能有所帮助,大家可以关注艺考查查,以便接收我们的最新推送!

  声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。