【数学之美】玫瑰曲线&正弦波
本帖最后由 rzyzzxw 于 2018-10-3 20:32 编辑数学美有别与其它的美,它没有鲜艳的色彩,没有美妙的声音,没有动感的画面,它却是一种独特的美。
当python与数学相遇,在esp32+12864OLED屏上刻画出眩目的美。
特别声明,程序由向金老师和祝良友老师合作完成。
我不生产程序,只负责显摆。{:5_146:}
祝老师的视频效果晒在圈子里,惊艳了我们。
http://v.youku.com/v_show/id_XMzg0ODE5OTUyNA==.html?spm=a2h3j.8428770.3416059.1
赶紧厚脸皮讨要程序来玩。
在掌控上运行一下。
http://v.youku.com/v_show/id_XMzg0ODE4ODExNg==.html?spm=a2h3j.8428770.3416059.1
【相关资料】
1、玫瑰曲线
平面内,围绕某一中心点平均分布整数个正弦花瓣的曲线.
在极坐标下可表示为ρ=a*sin(nθ),a为定长,n为整数.
在极坐标系中,以下方程表示的曲线称为玫瑰曲线:
r = sin ( k θ ) 或 r = cos ( k θ )
当 k 是奇数时,玫瑰曲线有 k 个花瓣;当 k 是偶数时,玫瑰曲线有 2k 个花瓣。执行效果如上图:
可以按 A-Z 和 a-z 调整参数,绘制不同的玫瑰曲线。例如,k = n / d = 2 / 1,就是四叶玫瑰曲线,k = n / d = 3 / 1,就是三叶玫瑰曲线。
2、正弦函数是数学领域的一个定义。正弦函数是三角函数的一种,在直角三角形ABC中,∠C=90°,AB是∠C的对边c,BC是∠A的对边a,AC是∠B的对边b,正弦函数就是sinA=a/c,即sinA=BC/AB。定义:对于任意一个实数x都对应着唯一的角(弧度制中等于这个实数),而这个角又对应着唯一确定的正弦值sin x,这样,对于任意一个实数x都有唯一确定的值sin x与它对应,按照这个对应法则所建立的函数,表示为f(x)=sin x,叫做正弦函数。正弦函数的定理:在一个三角形中,各边和它所对角的正弦的比相等,即a/sin A=b/sin B=c/sin C。
好吧,上面复制资料完毕,分享程序。
程序由向老师和祝老师授权,感谢两位大师。
from mpython import *
import time,math
def DrawRoseCurve(a,n):
for t in range(0,360):#循环次数,由于是画一圈,所以是360;可以自行设定
x = math.floor(math.cos(t)*a*math.sin(n*t))#计算x坐标的值,注意:这里需要取整
y = math.floor(math.sin(t)*a*math.sin(n*t))#计算y坐标的值,并且取整
display.pixel(x+64,y+45,1) #显示坐标像素点,为什么要+64、+32,哪是因为要把中心坐标(64,32)作为起点
display.show() #执行
def DrawSinCurve(a=25,n=1):#a表示正弦波的幅度,n表示几个波形
if a>25 :
a=25
if n>5:
n=5
for t in range(0,127):#画横坐标
y=25+14
x=t
display.pixel(x,y,1)
if t%10 ==0 :
display.show()
for t in range(1,4):#画横坐标箭头
display.pixel(127-t,39-t,1)
display.pixel(127-t,39+t,1)
display.show()
for t in range(0,63):#画纵坐标
y=63-t
x=63
display.pixel(x,y,1)
if t%10 ==0 :
display.show()
for t in range(1,4):#画纵坐标箭头
display.pixel(63-t,0+t,1)
display.pixel(63+t,0+t,1)
display.show()
for t in range(1,5):#画横坐标刻度线
display.pixel(63+t*12,38,1)
display.pixel(63-t*12,37,1)
display.pixel(63+t*12,36,1)
display.pixel(63-t*12,35,1)
display.show()
for t in range(0,5):#画纵坐标刻度线
display.pixel(63,63-12*t,1)
display.pixel(64,63-12*t,1)
display.pixel(65,63-12*t,1)
display.pixel(66,63-12*t,1)
display.show()
time.sleep(1)
for t in range(0,127):#画弦波图形
y=25-int(math.sin((3.14/180)*(t*120/127)*3*n)*a)
x=t
display.pixel(x,y+14,1)
display.show()
def main():
display.fill(0)
display.DispChar('玫瑰曲线',0, 0)
DrawRoseCurve(30,3)
display.fill(0)
display.DispChar('正弦波',68, 0)
DrawSinCurve(25,1)
main()
程序自己悟哈,不要问我,除了字母都认识,我也不懂。{:5_141:}
厉害厉害666 艺术之美 {:5_132:} 自然之美 显示语法错误:“NameError: name 'display' is not defined”,是什么原因呢?另外一个立方体程序也是报是相同的错误。 szjuliet 发表于 2019-4-16 15:49
显示语法错误:“NameError: name 'display' is not defined”,是什么原因呢?另外一个立方体程序也是报是 ...
知道了,应该是老版本,用display,新版本使用oled,把所有的display替换为oled就可以了 szjuliet 发表于 2019-4-16 21:36
知道了,应该是老版本,用display,新版本使用oled,把所有的display替换为oled就可以了 ...
对啊,新版固件有很多新内容。 程序自己悟,字母大家都懂的,这句666
页:
[1]