Nothing
#' CIE sky model
#'
#' Written by Gaston Mauro Diaz based on Pascal code by Mait Lang.
#'
#' Angles should be provided in radians.
#'
#' @param AzP Numeric vector. Azimuth angle of a sky point.
#' @param Zp Numeric vector. Zenith Angle of a sky point.
#' @param AzS Numeric vector of length one. Azimuth angle of the sun.
#' @param Zs Numeric vector of length one. Zenith angle of the sun.
#' @param .a,.b,.c,.d,.e Numeric vector of length one. Sky model parameter.
#'
#' @noRd
#' @references http://dx.doi.org/10.1016/j.energy.2016.02.054
#'
#' @return Numeric vector of length equal to AzP length.
.cie_sky_model <- function(AzP, Zp, AzS, Zs, .a, .b, .c, .d, .e) {
# calculate angular distance between sky point and Sun
Chi <- .calc_angular_distance(Zp, AzP, Zs, AzS)
# Gradation function
Phi_Z <- 1 + .a * exp(.b / cos(Zp))
Phi_0 <- 1 + .a * exp(.b)
gradation <- Phi_Z / Phi_0
# Indicatrix function
F_Chi <- 1 + .c * (exp(.d * Chi) - exp(.d * pi/2)) + .e * cos(Chi)^2
F_Zs <- 1 + .c * (exp(.d * Zs) - exp(.d * pi/2)) + .e * cos(Zs)^2
indicatrix <- F_Chi / F_Zs
unname(gradation * indicatrix)
}
#' CIE sky model raster
#'
#' @inheritParams ootb_mblt
#' @param sun_coord Numeric vector of length two. The solar disk
#' center represented with zenith and azimuth angles in degrees.
#' @param sky_coef Numeric vector of length five. Parameters of the sky model.
#'
#' @family Sky Reconstruction Functions
#'
#' @export
#'
#' @examples
#' z <- zenith_image(50, lens())
#' a <- azimuth_image(z)
#' path <- system.file("external", package = "rcaiman")
#' skies <- read.csv(file.path(path, "15_CIE_standard_skies.csv"))
#' # parameters are from http://dx.doi.org/10.1016/j.energy.2016.02.054
#' sky_coef <- skies[4,1:5]
#' sun_coord <- c(45, 0)
#' plot(cie_sky_model_raster(z, a, sun_coord, sky_coef))
cie_sky_model_raster <- function(z, a, sun_coord, sky_coef) {
.is_single_layer_raster(z)
.is_single_layer_raster(a)
stopifnot(.get_max(z) <= 90)
stopifnot(.get_max(a) <= 360)
stopifnot(length(sun_coord) == 2)
stopifnot(length(sky_coef) == 5)
Zp <- .degree2radian(z[])
AzP <- .degree2radian(a[])
Zs <- .degree2radian(sun_coord[1])
AzS <- .degree2radian(sun_coord[2])
relative_luminance <- .cie_sky_model(AzP, Zp, AzS, Zs,
as.numeric(sky_coef[1]),
as.numeric(sky_coef[2]),
as.numeric(sky_coef[3]),
as.numeric(sky_coef[4]),
as.numeric(sky_coef[5]))
terra::values(z) <- relative_luminance
z[is.infinite(z)] <- 0
names(z) <- "Relative luminance"
z
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.