千家信息网

Python如何利用科赫曲线实现三维飘雪效果

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍了Python如何利用科赫曲线实现三维飘雪效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。随机雪花如果随机生成一些点
千家信息网最后更新 2026年10月31日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安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技 科技互联网企业 互联网科技工作委员会毛军 北京互联网科技 狮子座互联网科技 南京欣网互联网科技 汉立互联网科技有限公司联系电话 互联网科技实习生岗位职责 重庆威客帮互联网科技 金融科技与互联网金融相同和不同 互联网科技创新服务 阿大互联网科技有限公司 开一家科技互联网公司需要多少钱 畅思互联网科技 广州百诚互联网科技有限公司官网 风投北京互联网科技 下一代互联网重大应用科技园 互联网时代科技型公司的机会 第三届互联网大会安防黑科技 优雇互联网科技有限公司 互联网佳科技有限公司 金融科技 互联网金融 伴你行互联网科技有限公司 互联网科技大会案例 盛创互联网科技有限公司 互联网科技大赛获奖感言 厦门江牛科技互联网 互联网领先科技成果宣传视频 每日互联网科技新闻 互联网 科技节活动 微视频大赛
0