使用圣诞树示例生成图形的算法
导言
本例提出了一种使用随机点分布生成分形结构的算法,并使用圣诞树的示例进行可视化。
我们将附加必要的库。 我们使用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)
厘米。展览(圣诞树)
Out[0]:
结论
作为脚本执行的结果,出现了一个圣诞树的图像,装饰被雪花包围。 通过这种方式,您可以确保图形设计不仅可以使用专用软件完成,还可以通过在Engee中创建脚本来完成。
.png)