使用python绘制任意函数图像

使用python绘制任意函数图像
##原创文章不易,望点赞转发收藏三连

效果展示

![](https://img-blog.csdnimg.cn/940596c8285348ea956b3f9cc0fb74a5.png

y = (sinx)/x
在这里插入图片描述
y = x4+x3+x^2+1
![在这里插入图片描述](https://img-blog.csdnimg.cn/5a5223f08f62412e915e3ad048789134.png
在这里插入图片描述

y=-x^2

文末还会展示一些实例图片

引入需要的库

我们使用如下库

import turtle as t
import math 

这两个库的用法也是本项目的核心
其中基本语法不再赘述
大家可以网络搜索

核心算法

我们假设像素点为坐标点,通过goto(x,y)与y,x的函数关系进行找点
通过penup().pendown()连接个点,视觉上像素点的连线几乎为曲线
当然,可以通过仅仅画点保证准确度

绘画坐标系

坐标系的绘制不是难事,就是麻烦,我已经经过尝试,给出以下数据,方便大家使用

t.screensize(800,800,"white")
t.hideturtle()
t.speed(0)
t.pendown()
t.goto(0,0)
t.forward(800)
t.left(90)
t.goto(0,0)
t.forward(800)
t.left(90)
t.goto(0,0)
t.forward(800)
t.left(90)
t.goto(0,0)
t.forward(800)
t.left(90)
t.penup()
t.goto(-10,-15)
t.write("O")
t.goto(350,-15)
t.write("x")
t.goto(-15,337)
t.write("y")

基本设置

我们再画图像之前要初始化x的位置,避免画到画布外,否则会报错
之后处理y时,也要注意这一点
另外,可以设置曲线粗细和绘画速度
粗细1–>n变粗
速度1–>10->0变快

n = int(input(r"输入需要放大的倍数:"))
x = int((-350)/n)
t.pensize(1)
t.speed(10)
while pass:
    pass

处理函数关系

首先两个确定:
1.确定函数解析式,要符合python语法
2.确定定义域的补集合
然后避免两点:
1.避免x的取值超出定义域,出现MATHS ERROR
2.避免y超出范围,导致ERROE
再注意两个近似:
1.可以每个点向前画一个坐标,近似于点
2.pendown()下的goto()连接点,近似于曲线
还有两个选择:
1.penup()的注释取消后,将t.penup()加入代码,可以之画点不连线
2.math库可以丰富函数类型

while x <= int((350)/n):
    if x!=0:                  #定义域的反域
        y = m.sin(x)/x        #函数解析式
    if y>=-350 and y<=350:
        t.goto(n*x,y*n)
        t.pendown()
        t.forward(1)
        #t.penup()
    x+=1

如果实在不清楚定义域或者表示起来不方便
也可以采用try-except结构自动处理

while pass:
	try:
		y = math.sin(x)/x
	except:
		#break
		pass        ###根据需要选择,建议直接pass
	pass

最后别忘了title库结尾的title.done()

展示源代码

import turtle as t
import math as m 
t.screensize(800,800,"white")
t.hideturtle()
t.speed(0)
t.pendown()
t.goto(0,0)
t.forward(800)
t.left(90)
t.goto(0,0)
t.forward(800)
t.left(90)
t.goto(0,0)
t.forward(800)
t.left(90)
t.goto(0,0)
t.forward(800)
t.left(90)
t.penup()
t.goto(-10,-15)
t.write("O")
t.goto(350,-15)
t.write("x")
t.goto(-15,337)
t.write("y")

n = int(input(r"输入需要放大的倍数:"))
x = int((-350)/n)
t.pensize(1)
t.speed(10)
while x <= int((350)/n):
    if x!=0:                  #定义域的反域
        y = m.sin(x)/x        #函数解析式
    if y>=-350 and y<=350:
        t.goto(n*x,y*n)
        t.pendown()
        t.forward(1)
        #t.penup()
    x+=1
t.down()

图片展示

在这里插入图片描述

双曲正弦
在这里插入图片描述

双曲余弦
在这里插入图片描述

双曲正切(原点附近)
y=sin(x^-1)
正弦
在这里插入图片描述

余弦文章来源地址https://uudwc.com/A/oYdE

原文地址:https://blog.csdn.net/weixin_49890220/article/details/127823579

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年06月13日 08:55
im2col函数实现超级详细解释
下一篇 2023年06月13日 08:55