3. Calculation
function getSunPosition(date, lat, lon) {
var lw = rad*-lon,
phi = rad*lat,
M = getSolarMeanAnomaly(date),
C = getEquationOfCenter(M),
L = getEclipticLongitude(M, C),
D = getDeclination(L, 0),
A = getRightAscension(L, 0),
t = getSiderealTime(date, lw),
H = t-A;
return {
azimuth: getAzimuth(H, phi, D),
altitude: getAltitude(H, phi, D)
};
}
4. Integration
var sun = getSunPosition(date, lat, lon);
var shadowLen = 1/tan(sun.altitude);
var v = {
x: cos(sun.azimuth) * shadowLen,
y: sin(sun.azimuth) * shadowLen
};
function project(x, y, z) {
return {
x2: x + v.x * z,
y2: y + v.y * z
};
}