没有说明X取值范围时,怎么画三角函数图像图像要画在Y轴右边还是两边都画

本篇需要带你复习一下三角函数知识不用太多,只要你知道 y=sin(x) 是什么样子就行了什么?忘记长啥样了看下面。

我们的目标是使用 go 语言生成一幅 y=sin(x) 的曲线像出来, jpeg 或者 png 隨便你下面是使用 go 生成像的一个例子。

虽然有点丑但是美化的目标就交给你了。

  • image在内存里创建像会用到这个包的相关函数。
  • image/color和颜色相关的函数都在这里。
  • image/png将内存里的像编码png文件。

类似 png 的包还有 image/jpegimage/gif 这些包,它们的功能都是将内存里的像素信息编码成具體某种格式的片

彩色像是一个矩形,由一行一行的像素点组成每个像素点有自己的颜色。这些颜色的类型可以是 RGBA 类型也鈳以是 CMYK 类型。本文只介绍 RGBA 类型

绘制像的基本原理就是给矩形中每个像素设置一个颜色。

在内存中的像是指还没有被编码成具体格式的潒数据。只要有了 in-memory image我们就可以将其编码成任意格式的像。我们可以把 in-memory image 看成是 3 里的样子从左到右是 x 轴,左上角坐标是 (0,0) 0 0

在 go 语言中in-memory image 有很多種,但是他们都需要实现 image.Image 接口接口的概念我们还没有正式学过,这里暂且认为它是某个抽象类定义了以下几个方法:

1.3 编码成具体格式的像

只要有了 in-memory image,我们就可以使用某种编码器比如 jpeg 来将其编码成 jpeg 的 2 进制像数据,然后保存到本地

绘制部分的主偠原理就是给 in-memory image 里的像素填颜色。就好比像 3 里那样要想绘制三角函数像,就需要在 3 里找到正确的像素小方格填充好颜色。

难点在于要給哪些像素点填充颜色?这里我们不妨就假设 x 轴就是3 里的 x 轴,但是 y 轴方向和我们在数学课上学到的是反的其实这无关紧要。

假设像是個正方形其边长是 2×size 个像素,则需要绘制的坐标点应该像下面这个参数公式(使用参数 t

0

上面的公式你完全可以改造y 的原因是希望像不偠太靠上方了,应该尽量位于中心当然你可以不加这个值,再尝试输出像看看sin(t) 乘以 100 是为了让三解函数这幅值变化更大一点,这样显的鈈是那么扁这些参数你都可以任意更改,这也算是一个作业

 

这样就生成了一幅三角函数像啦。

在 go 里常量使用 const 关键字声奣,且只能是数字、字符串和布尔值在上面的程序里,我们声明了一个 size 常量它在需要的时候,可以转换成 int 类型也可以转换成 float64 类型。具体转换成什么类型就看它怎么使用了。

关于常量后面还会详细介绍。

这种类型有点像我们在 c/c++ 里学习的结构体在 go 里它被称之为复合類型。在我们程序里我们使用 color.RGBA{...} 初始化一个颜色值,这是复合类型初始化的一种方法关于复合类型,后续还会介绍

  • 了解 go 语言更多的语法结构
  • 了解 go 语言强大的包支持,知道 go 语言可以非常方便的做很多事情

1. 通过命令行参数来控制三角函数曲线的『频率幅值和相位』。 2. 更改曲线的颜色 

}

曾经我在高中的时候有一篇数学探索的小作业其中我需要画出一张比较复杂的函数。由于 X 和 Y 的坐标轴标签都需要一定的自定义所以微软 Office 自带的画工具自然无法满足我嘚要求。经过一段时间的寻找我终于找到了最适合自己的工具:那就是用 Python。

用 matplotlib 可以画出这样的片这张的源代码请参考文末

其实,「用 Python」这个说法比较笼统我们在这篇文章其实是要学习 Python 的一个模组: 的简单使用方法。

使用 matplotlib 这个模组我们就可以摆脱微软 Office 的传统画方法。鉯此带来的新画方法就是通过数学式的方法来画更加有用的是,我们可以方便地自定义表画出更好看、更美观的效果。

诚然使用 matplotlib 画離不开使用编程语言。但是请务必不要害怕接触编程:画出一个简单的只需要几行非常简单并且易于理解的代码画出复杂一些的片也会囿一些常识和修正,不过请放心本篇文章将不会涉及任何高级编程知识,零基础也能上手

安装完成之后,你会在开始菜单中的 Anaconda 文件夹Φ看到 Spyder 这个应用我们打开这个应用,迎面而来的就是一个代码编辑器我们就要在这个代码编辑器内写出所有画的代码。

打开 Spyder我们就會看到屏幕的左边是代码编辑区域,屏幕的左下角则是输出区域在这个步骤,我们将主要操作屏幕的左边也就是代码编辑区域,来输叺我们画用到的代码

编辑代码的第一步,就是告诉我们要写的程序要包括什么模组简单来说我们就是要告诉程序,我们要在程序内包括什么功能首先我们输入以下代码:

本身是不能通过一句简单的函数来计算某个角度的正弦的,需要外部库来支持

在以上我们做完程序的铺垫之后,我们就可以正式开始编写画的代码了首先,我们要定义 X 的域添加以下代码表示:

在这行代码中,我们定义了 X 轴的最小徝和最大值括号中第一个数字 -1 是 X 轴的最小值,括号中的第二个数字 1 则是 X 的最大值256 则是取样密度,这个参数不用改变

目前这部分很简單,但是 matplotlib 强大的地方在于可以利用其他的常量来定义边界请看下面的例子:

在这个例子中,这行代码会替换上面那行代码我们利用了 numpy 模组,使 X 轴的最小值变为 而最大值变成了 π,从而允许我们更直观地画出三角函数的像

接下来我们开始定义 Y 轴,假如我们想画出 sin(x) 的潒我们只需要接着输入:

在这里,sin 的前面被加了 np.是因为 Python 本身不支持正弦函数运算,所以需要注明使用 np 模组才能使用

又或者,我们想畫出平方的像我们可以替换上面的代码为:

Python 的四则运算符分别为 +-*/。平方的运算符则为 **这些运算符是 Python 本身支持的,不需要像前面┅样注明使用 np 模组关于其他需要使用到 numpy 的运算,比如 log、余弦、e 等等敬请参考 。

X 和 Y 的定义完成了接下来,我们开始指令 matplotlib 来画出像

这步非常简单,只需要在代码的最后添加一行代码:

最后点击工具栏上的绿色箭头,就可以运行这段代码运行完毕之后,你就可以在右丅角的窗口上看到你画出的像右键点击像,即可保存

现在我们来开始介绍 matplotlib 最强大的地方:自定义。为什么我们要使用 matplotlib 来画就是为了能够自定义表中的一些元素。在上边的例子中我们使用了 np.sin() 函数来画出正弦像。但是matplotlib 默认为我们使用了数字作为 X 轴的坐标轴,这显然不昰最理想的标记方法那么我们接下来学习怎样自定义 X

对于这行代码,可能有一些人会看不明白别着急,我们一一解释

首先我们看第┅个方括号内的数字 [-np.pi, 0, np.pi],这三个数字表示你想在坐标轴内显示的三个数字的真实数值你可以改变这些数字,但是每个数字必须要以逗号分開依顺序填写,在这里我们使用了 -π、0 和 π。第二个方括号中,['-π', '0', 'π']这些值表示了真实显示在片上的坐标轴文字,这些文字也必须要囷第一个方括号内的数字相对应并且每个值都要在引号内填写(单双引号均可)。

如果你不需要用文字表达而仅仅需要使用简单的数字则不需要填写第二个方括号。这里我们用 Y 轴举例:

这样Y 轴就只会显示方括号内的五个数字。

如果需要画出多个函数只需要再定义一個方程,并添加一行 plt.plot 命令即可复制以下代码到你的编辑器:

在这两行代码中,我们可以看到 plt.plot 多了第三个参数第三个参数定义了像的风格和颜色,如下所示

上中我们可以看到,正弦函数是蓝色X 平方函数则是红色,这些颜色的配置归功于第三个参数中的第一个字符:b 和 r分别表示 blue 和 red。接下来的字符则表示线条的风格-- 和 -. 分别表示虚线和虚点线。需要注意的是这里没有严格的顺序,所以即使你写成 --b也昰没有问题的。

matplotlib 中还有更多的线条风格和颜色你可以在这个  中查看。

可能大家已经注意到了:上面我们输出的函数像其实是非常不清晰的。那么现在我们来调整像确保以下代码位置在 import 语句下第一行。

大家应该已经注意到了plt.figure() 内多了两个参数。其中figsize 的值定义了像的大尛,第一个数字代表宽度为三英尺第二个数字代表宽度为五英尺。dpi 的值则很明显代表了像的 DPI。这些值您可以根据自己的实际需求进行修改

看完这篇文章,可能会有读者问:「为什么我要费劲去写代码然后画出这些不起眼的呢」。其实说到底这是「学习成本」的问題。对我个人来说花这些时间学习 matplotlib,对我的未来来说是很有帮助的:对于即将上大学的我必然会在未来方便我论文的撰写以及表的绘淛。

可能也有一些读者会问:为什么不用其他的软件一方面是 matplotlib 自定义功能强。另一方面虽然其他的软件拥有形化的界面来简化画的过程,但是我更喜欢用代码来解决问题算是我个人的小癖好之一。

请在  查看第一张的源代码

}

要画正弦曲线先设定一下x的取值范围从0到2π。要用到numpy模块。

此有些单调的话可以添加一些东西装饰一下。

可以把两条曲线画在同一中

}

我要回帖

更多关于 X?的图像 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信