微积分学习笔记(2):用Go语言画函数图像

news/2025/2/23 15:49:43

使用的Go库

  • gonum.org/v1/plot
  • image/color

待绘图函数

直接使用三角函 s i n sin sin:

func f(x float64) float64 {
	return math.Sin(x)
}

绘图过程

1 创建一个绘图

	p := plot.New()
	assert.NotNil(t, p)
	p.Title.Text = "Function Image"
	p.X.Label.Text = "X"
	p.Y.Label.Text = "Y"

2 生成一些函数的点

	points := make(plotter.XYZs, 100, 100)
	for i := range points {
		x := float64(i) / 10.0
		y := f(x)
		points[i].X = x
		points[i].Y = y
	}

3 将这些点连成线条


	line, err := plotter.NewLine(points)
	assert.Nil(t, err)
	line.Color = color.RGBA{R: 255}
	p.Add(line)

4 将绘图保存到图片


	err = p.Save(4*vg.Inch, 4*vg.Inch, "func_image.png")
	assert.Nil(t, err)

5 绘图效果

在这里插入图片描述

完整源码

函数定义

package funcimage

import "math"

func f(x float64) float64 {
	return math.Sin(x)
}

画图像

package funcimage

import (
	"github.com/stretchr/testify/assert"
	"gonum.org/v1/plot"
	"gonum.org/v1/plot/plotter"
	"gonum.org/v1/plot/vg"
	"image/color"
	"testing"
)

func Test_func_image(t *testing.T) {
	p := plot.New()
	assert.NotNil(t, p)
	p.Title.Text = "Function Image"
	p.X.Label.Text = "X"
	p.Y.Label.Text = "Y"

	points := make(plotter.XYZs, 100, 100)
	for i := range points {
		x := float64(i) / 10.0
		y := f(x)
		points[i].X = x
		points[i].Y = y
	}

	line, err := plotter.NewLine(points)
	assert.Nil(t, err)
	line.Color = color.RGBA{R: 255}
	p.Add(line)

	err = p.Save(4*vg.Inch, 4*vg.Inch, "func_image.png")
	assert.Nil(t, err)
}


http://www.niftyadmin.cn/n/5048054.html

相关文章

JavaScript入门——(2)基础语法(上)

一、JavaScript介绍 1.1 JavaScript是什么 1.1.1 JavaScript是什么? JavaScript是一种运行在客户端(浏览器)的编程语言,实现人机交互效果。 注意:HTML和CSS是标记语言。 1.1.2 作用(做什么&#xff1f…

Tomcat的安装与使用

目录 一、Tomcat是什么 二、Tomcat下载与安装 2.1 Tomcat端口被占用问题 三、Tomcat的使用 一、Tomcat是什么 Tomcat 是一个 HTTP 服务器。前面我们已经学习了 HTTP 协议,知道了 HTTP 协议就是 HTTP 客户端和 HTTP 服务器之间的交互数据的格式。同时也通过 ajax 和…

【云原生】聊聊为什么需要docker以及其基础架构

为什么需要docker 在没有docker之前,我们开发、测试、生产其实是根据不同的服务器进行配置的,很可能因为软件配置不同而导致的生产事故,那么如果能较好的解决软件和配置等封装成一个可运行的软件,无需关注配置,那么是…

http的get与post

get方法: 这个网址可以获取配置信息(我把部分位置字符改了,现在打不开了,不然会被追责) http://softapi.s103.cn/addons/Kmdsoft/Index/config?productwxdk&partner_id111122&osWindows&os_version11&am…

php 打印分页 一组数据不分页问题解决

出现的问题是 打印数据的时候 数据是分组的 可能刚好在页尾 这页放不下 这就导致一组数据分了两页 需求是 如果当前页放不下这组数据 那就直接开下一页 思路 看打印页面一页能够显示多少行,然后以数据的分组为单位循环,判断当前页已有多少行,将要插入的的这组数据有多少行,如…

uni-app:实现元素中实现竖直居中

效果展示 前&#xff1a; 后&#xff1a; 未实现前代码 <template><view class"container"><view class"centered-element">我是要被居中的元素</view></view> </template><script>export default {data() {r…

什么是Service Worker?它在PWA中的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Service Worker的作用是什么&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前…

牛客网解题之矩形覆盖

10.2 矩形覆盖 题目链接 牛客网 题目描述 我们可以用 2*1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2*1 的小矩形无重叠地覆盖一个 2*n 的大矩形&#xff0c;总共有多少种方法&#xff1f; 解题思路 当 n 为 1 时&#xff0c;只有一种覆盖方法&#xff1a; 当 …