Engee 文档
Notebook

使用圣诞树示例生成图形的算法

导言

本例提出了一种使用随机点分布生成分形结构的算法,并使用圣诞树的示例进行可视化。

我们将附加必要的库。 我们使用CairoMakie库作为图形框架。

In [ ]:
# import Pkg
# Pkg.add(["Random" ,"LinearAlgebra", "Colors", "FreeTypeAbstraction", "CairoMakie"])
using Random, LinearAlgebra, Colors, FreeTypeAbstraction
import CairoMakie as CM

让我们定义形状参数。

In [ ]:
CM.set_theme!()
Random.seed!(123)
点数=6^5
修饰数=50
修饰的类型=rand(1:6,修饰的数量)
颜色索引=randperm(点数)[1:修饰数]

random_number()=rand(点的数量)
角度=random_number()。* 2π
高度=随机数()
半径=0.4* (1 .-高度)
密度=random_number()
坐标x=半径。*cos。()
坐标y=半径。*罪。()

color_adorning=[
    CM.RGBf(1, 0, 0),
    CM.RGBf(1, 1, 0),
    CM.RGBf(1, 0, 1),
    CM.RGBf(0, 0, 1),
    CM.RGBf(0.5, 0.5, 0.5),
    CM.RGBf(0, 1, 1)
]
点缀_标记=[:圆,:star5,:钻石,:utriangle,:六边形,:十字]

让我们以圣诞树的形式显示一个数字。

In [ ]:
圣诞树=厘米。图(backgroundcolor=CM。RGBf(0,0,0),大小=(500,500))
ось = CM.Axis3(ёлка[1, 1], aspect=:data, viewmode=:stretch, limits=(-0.6, 0.6, -0.6, 0.6, -0.15, 1.1), azimuth=0.0, elevation=0.0, title="")
厘米。藏起来了!()
厘米。隐藏的!()
white_colors=[厘米。RGBAf(0,density[i]*radii[i]^0.45,0,0.97)for i in1:点数]
厘米。散开!(轴,coords_x。*密度,y的坐标。*密度、高度,
    颜色=颜色,
    markersize=5,
    marker=:circle)

for i in 1:6
    索引=装饰的索引[装饰的类型。==]
    如果!isempty(索引)
        厘米。散开!(axis,x-coordinates[indexes],y-coordinates[indexes],heights[indexes],color=coloring color[i],markersize=15,marker=coloring markers[i],strokewidth=2,strokecolor=:white)
    end
end

厘米。散开!(轴心, [0], [0], [1.05], 颜色=厘米。RGBf(1,0,0),markersize=35,marker=:star5,strokewidth=3,strokecolor=CM。RGBf(1,1,0.5))

桶的点数=350
桶coords_x=Float64[]
枪管坐标y=Float64[]
桶coords_z=Float64[]

桶radius_=0.025
对于i in1:桶的点数
    z = -0.1 + rand() * 0.12
    θ = rand() * 2π
    r=桶radius_(0.7+0.6*rand())
    推!(桶坐标x,r*cos(θ))
    推!(筒座标,r*sin(θ))
    推!(桶coords_z,z)
end

厘米。散开!(轴,枪管坐标x,枪管坐标Y,枪管坐标z,
    color=CM.RGBf(0.4, 0.25, 0.1),
    markersize=10,
    marker=:circle)

雪花莲数=250
雪地坐标_x=Float64[]
雪花莲的坐标y=Float64[]
雪地坐标_z=Float64[]
雪花大小_=Float64[]

对于i in1:雪花莲的数量
    推!(雪花莲的坐标,-1.0+rand()*2.0
    推!(雪花莲的坐标,-1.0+rand()*2.0
    推!(snowdrop坐标z,-0.2+rand()*1.4)
    推!(雪花莲的大小,3+兰德()*8
end

雪花莲颜色=[厘米。RGBAf(1,1,1,0.8)for_in1:雪花莲的数量]
厘米。散开!(轴,雪花莲坐标x,雪花莲坐标Y,雪花莲坐标z,
    颜色=雪花莲的颜色,
    markersize=雪花莲的大小,
    marker=:circle)

厘米。展览(圣诞树)
No description has been provided for this image
Out[0]:
CairoMakie.Screen{IMAGE}

结论

作为脚本执行的结果,出现了一个圣诞树的图像,装饰被雪花包围。 通过这种方式,您可以确保图形设计不仅可以使用专用软件完成,还可以通过在Engee中创建脚本来完成。