summaryrefslogtreecommitdiffstats
path: root/daylight.txi
blob: fa24afc62f8b8f55f5d712d60840afee0f8f9e09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
@code{(require 'daylight)}
@ftindex daylight
@ftindex sunlight
@ftindex sun
@ftindex sky

@noindent
This package calculates the colors of sky as detailed in:@*
@uref{http://www.cs.utah.edu/vissim/papers/sunsky/sunsky.pdf}@*
@cite{A Practical Analytic Model for Daylight}@*
A. J. Preetham, Peter Shirley, Brian Smits


@defun solar-hour julian-day hour


Returns the solar-time in hours given the integer @var{julian-day} in the range 1 to
366, and the local time in hours.

To be meticulous, subtract 4 minutes for each degree of longitude west
of the standard meridian of your time zone.
@end defun

@defun solar-declination julian-day

@end defun

@defun solar-polar declination latitude solar-hour
Returns a list of @var{theta_s}, the solar angle from the
zenith, and @var{phi_s}, the solar azimuth.  0 <= @var{theta_s}
measured in degrees.  @var{phi_s} is measured in degrees from due
south; west of south being positive.
@end defun
@noindent
In the following procedures, the number 0 <= @var{theta_s} <= 90 is
the solar angle from the zenith in degrees.

@cindex turbidity
@noindent
Turbidity is a measure of the fraction of scattering due to haze as
opposed to molecules.  This is a convenient quantity because it can be
estimated based on visibility of distant objects.  This model fails
for turbidity values less than 1.3.

@example
@group
    _______________________________________________________________
512|-:                                                             |
   | * pure-air                                                    |
256|-:**                                                           |
   | : ** exceptionally-clear                                      |
128|-:   *                                                         |
   | :    **                                                       |
 64|-:      *                                                      |
   | :       ** very-clear                                         |
 32|-:         **                                                  |
   | :           **                                                |
 16|-:             *** clear                                       |
   | :               ****                                          |
  8|-:                  ****                                       |
   | :                     **** light-haze                         |
  4|-:                         ****                                |
   | :                             ******                          |
  2|-:                                  ******** haze         thin-|
   | :                                          ***********    fog |
  1|-:----------------------------------------------------*******--|
   |_:____.____:____.____:____.____:____.____:____.____:____.____:_|
     1         2         4         8        16        32        64
              Meterorological range (km) versus Turbidity
@end group
@end example


@defun sunlight-spectrum turbidity theta_s
Returns a vector of 41 values, the spectrum of sunlight from
380.nm to 790.nm for a given @var{turbidity} and @var{theta_s}.
@end defun

@defun sunlight-xyz turbidity theta_s
Returns (unnormalized) XYZ values for color of sunlight for a
given @var{turbidity} and @var{theta_s}.
@end defun

@defun sunlight-ciexyz turbidity theta_s
Given @var{turbidity} and @var{theta_s}, @code{sunlight-ciexyz} returns the CIEXYZ triple for color of
sunlight scaled to be just inside the RGB709 gamut.
@end defun

@defun zenith-xyy turbidity theta_s
Returns the xyY (chromaticity and luminance) at the zenith.  The
Luminance has units kcd/m^2.
@end defun

@defun overcast-sky-color-xyy turbidity theta_s
@var{turbidity} is a positive real number expressing the amount of light
scattering.  The real number @var{theta_s} is the solar angle from the zenith in
degrees.

@code{overcast-sky-color-xyy} returns a function of one angle @var{theta}, the angle from the
zenith of the viewing direction (in degrees); and returning the xyY
value for light coming from that elevation of the sky.
@end defun

@defun clear-sky-color-xyy turbidity theta_s phi_s
@defunx sky-color-xyy turbidity theta_s phi_s
@var{turbidity} is a positive real number expressing the amount of light
scattering.  The real number @var{theta_s} is the solar angle from the zenith in
degrees.  The real number @var{phi_s} is the solar angle from south.

@code{clear-sky-color-xyy} returns a function of two angles, @var{theta} and @var{phi} which
specify the angles from the zenith and south meridian of the viewing
direction (in degrees); returning the xyY value for light coming from
that direction of the sky.

@code{sky-color-xyY} calls @code{overcast-sky-color-xyY} for
@var{turbidity} <= 20; otherwise the @code{clear-sky-color-xyy} function.
@end defun