rzyzzxw 发表于 2018-10-3 20:32:08

【数学之美】玫瑰曲线&正弦波

本帖最后由 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:}

俗人 发表于 2018-10-4 15:02:08

厉害厉害666

rzegkly 发表于 2018-10-4 17:13:47

艺术之美 {:5_132:} 自然之美

szjuliet 发表于 2019-4-16 15:49:34

显示语法错误:“NameError: name 'display' is not defined”,是什么原因呢?另外一个立方体程序也是报是相同的错误。

szjuliet 发表于 2019-4-16 21:36:58

szjuliet 发表于 2019-4-16 15:49
显示语法错误:“NameError: name 'display' is not defined”,是什么原因呢?另外一个立方体程序也是报是 ...

知道了,应该是老版本,用display,新版本使用oled,把所有的display替换为oled就可以了

rzyzzxw 发表于 2019-4-17 10:16:59

szjuliet 发表于 2019-4-16 21:36
知道了,应该是老版本,用display,新版本使用oled,把所有的display替换为oled就可以了 ...

对啊,新版固件有很多新内容。

xiaohe9527 发表于 2019-4-23 15:11:23

程序自己悟,字母大家都懂的,这句666 
页: [1]
查看完整版本: 【数学之美】玫瑰曲线&正弦波