Python如何利用科赫曲线实现三维飘雪效果
发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,这篇文章主要介绍了Python如何利用科赫曲线实现三维飘雪效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。随机雪花如果随机生成一些点
千家信息网最后更新 2025年01月17日Python如何利用科赫曲线实现三维飘雪效果
这篇文章主要介绍了Python如何利用科赫曲线实现三维飘雪效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
随机雪花
如果随机生成一些点,然后为每个点绘制一些枝杈,则可以画出类似蒲公英这种结构,只是看上去不太好看而已
import numpy as npimport matplotlib.pyplot as pltfrom numpy.random import rand,randintM,N = 10,100x = rand(N)*100y = rand(N)*100plt.scatter(x,y,marker='.')for i in range(N): M = randint(5,15) r = rand()*3 for j in range(M): theta = np.pi*2/M*j plt.plot([x[i],x[i]+r*np.cos(theta)], [y[i],y[i]+r*np.sin(theta)])plt.axis('off')plt.show()
当然也可以画成三维图,果然还是很丑。
科赫雪花
所以,既然想飘雪,那就首先得有雪花。科赫曲线因为十分像雪花,所以又叫雪花曲线,生成方式十分简单,总共分两步
画一个正三角形将正三角形的每个边三等分,然后以中间的那份为边,再画出个三角形。重复第二步。
那么难点无非是三等分后如何新画一个三角形,更进一步,新三角形的那个新顶点在哪里?
从而得到
代码如下
import numpy as npimport matplotlib.pyplot as pltfrom numpy.random import rand,randint# n>=1,生成科赫雪花的方法def Koch(L,n=1): if n<1 : return newL = [] #(x,y)的列表 for i in range(len(L)-1): delta = (L[i+1]-L[i])/3 x = (L[i][0]+L[i+1][0])/2-np.sqrt(3)/2*delta[1] y = (L[i][1]+L[i+1][1])/2+np.sqrt(3)/2*delta[0] newL += [L[i],L[i]+delta,np.array([x,y]),L[i]+delta*2] newL.append(L[-1]) return newL if n==1 else Koch(newL,n-1)L0 = [ np.array([0,0]), np.array([0.5,np.sqrt(3)/2]), np.array([1,0]), np.array([0,0])]def plot_Koch(L): for i in range(len(L)-1): p = np.array(L[i:i+2]).T plt.plot(p[0],p[1],color='lightblue',lw = 1) plt.xlim(-0.25,1.25) plt.ylim(-0.5,1.25) plt.show()if __name__ == "__main__": plot_Koch(Koch(L0,3))
如果多画一些,那么就是这样
生成方法为
#n为雪花数量,low,high为最低和最高koch雪花阶数def RandKoch(n,low,high): randKochs = [] rMax = np.sqrt(1/n) for _ in range(n): cx,cy,t0 = rand(3) r = rand()*rMax L0 = [np.array([np.cos(t),np.sin(t)])*r+[cx,cy] for t in (t0-np.arange(4)*np.pi*2/3)] randKochs.append(Koch(L0,randint(low,high))) return randKochsdef plot_Kochs(Ls): for L in Ls: for i in range(len(L)-1): p = np.array(L[i:i+2]).T plt.plot(p[0],p[1],color='lightblue',lw = 1) plt.xlim(-0.2,1.2) plt.ylim(-0.2,1.2) plt.show()
当然,如果用plt.fill(x,y)
,则可画出实心的雪花
def plot_Kochs(Ls): for L in Ls: x,y = np.array(L).T plt.fill(x, y, color = 'lightblue') plt.xlim(-0.2,1.2) plt.ylim(-0.2,1.2) plt.show()
三维
我们想要的是那种飘雪的感觉,所以至少得有个3D的图,这很简单,只要加个三维的坐标就可以了。
#导入PolyCollection绘制实心的3D图形from mpl_toolkits.mplot3d.art3d import PolyCollectiondef plot_Kochs_fill3d(Ls): fig = plt.figure() ax = fig.gca(projection='3d') p3d = PolyCollection(Ls,facecolors=np.repeat('lightblue',len(Ls)),alpha=0.7) ax.add_collection3d(p3d,zs=rand(len(Ls)),zdir='y') ax.set_xlim3d(0,1) ax.set_ylim3d(0,1) ax.set_zlim3d(0,1) plt.show()
感谢你能够认真阅读完这篇文章,希望小编分享的"Python如何利用科赫曲线实现三维飘雪效果"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
雪花
科赫
三维
曲线
篇文章
生成
三角形
三角
效果
方法
正三角
正三角形
好看
最低
最高
更进一步
代码
以中
价值
兴趣
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全伴我行作文高中
无线网络安全风险
数据库查看语句
网络安全运维考试证书
ps5怎么登录ea服务器
信息技术与网络安全期刊
国内服务器安全知乎
网络技术组机考试题
扫黄打非网络安全工作
车载嵌入式软件开发
山丘之王服务器
软件开发需要跑业务吗
北京探索之星软件开发公司
宜昌启鸿互联网科技
会员管理软件开发培训机构
我的世界体验服好玩儿的服务器
硬盘检测数据库
学软件开发需要几年时间
新加坡网络技术交流会
软件开发简单合同模板
软件开发存在问题
北京国家网络安全产业园区
连接域名服务器和主机的设备
网络安全性不正确是什么意思
网关服务器 基本配置
陕西大专软件开发排名
wdcp恢复数据库
战地一服务器搜群号搜不到
网络安全是一门学科
电力网络安全存在的问题