7806| 6
|
[入门教程] 【数学之美】玫瑰曲线&正弦波 |
本帖最后由 rzyzzxw 于 2018-10-3 20:32 编辑 数学美有别与其它的美,它没有鲜艳的色彩,没有美妙的声音,没有动感的画面,它却是一种独特的美。 当python与数学相遇,在esp32+12864OLED屏上刻画出眩目的美。 特别声明,程序由向金老师和祝良友老师合作完成。 我不生产程序,只负责显摆。 祝老师的视频效果晒在圈子里,惊艳了我们。 赶紧厚脸皮讨要程序来玩。 在掌控上运行一下。 【相关资料】 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。 好吧,上面复制资料完毕,分享程序。 程序由向老师和祝老师授权,感谢两位大师。 [mw_shl_code=python,true]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()[/mw_shl_code] 程序自己悟哈,不要问我,除了字母都认识,我也不懂。 |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed