Specular Canopy Scattering
Using packages:
using Plots, Distributions
using CanopyOptics
pyplot()
Plots.PyPlotBackend()
theme(:ggplot2)
Create a specular model with refractive index and "roughness" κ
specularMod = CanopyOptics.SpecularCanopyScattering(nᵣ=1.5, κ=0.2)
SpecularCanopyScattering{Float64}(1.5, 0.2, 20)
Use standard planophile leaf distribution:
LD = CanopyOptics.planophile_leaves2()
CanopyOptics.LeafDistribution{Float64}(Beta{Float64}(α=1.0, β=2.768), 0.6366197723675814)
Create some discretized angles: Azimuth (in radians)
ϕ = range(0.0, 2π, length=200);
Polar angle as cos(Θ)
μ,w = CanopyOptics.gauleg(180,0.0,1.0);
Create directional vectors:
dirs = [CanopyOptics.dirVector_μ(a,b) for a in μ, b in ϕ];
Compute specular reflectance:
R = CanopyOptics.compute_reflection.([specularMod], [dirs[50,1]], dirs, [LD]);
Polar plot of reflectance
contourf(ϕ, acos.(μ), R,proj=:polar, ylim=(0,π/2), alpha=0.8)
Animation over different Beta leaf distributions
steps = 0.1:0.1:5
α = [collect(steps); 5*ones(length(steps))]
β = [ 5*ones(length(steps)); reverse(collect(steps));]
x = 0:0.01:1
l = @layout [a b; c d; e f]
anim = @animate for i ∈ eachindex(α)
LD = CanopyOptics.LeafDistribution(Beta(α[i],β[i]), 2/π)
R = CanopyOptics.compute_reflection.([specularMod], [dirs[120,1]], dirs, [LD])
pZ = []
for m=0:3
Z⁺⁺, Z⁻⁺ = CanopyOptics.compute_Z_matrices(specularMod, μ, LD, m)
push!(pZ, contourf(μ, μ, Z⁻⁺, title="Z⁻⁺ Fourier moment $m", xlabel="μꜜ", aspect_ratio = :equal, ylabel="μꜛ"))
end
p0 = plot(rad2deg.(π * x/2), pdf.(LD.LD,x), legend=false, ylim=(0,3), title="Leaf angle distribution", xlabel="Θ (degrees)")
p1 = contourf(ϕ, acos.(μ), R, proj=:polar, ylim=(0,π/2), clims=(0,0.02), alpha=0.8,legend = :none, title="Polar plot R")
plot(p0, p1, pZ..., layout = l, margin=5Plots.mm)
plot!(size=(700,700))
end
gif(anim, "anim_fps10.gif", fps = 10)
This page was generated using Literate.jl.