Calcular el área de la sombra que proyecta un modelo
Saludos. Tengo intención de hacer un programa que me calcule el área de la sombra que un edificio crea sobre el suelo a una determinada hora del día.
¿Pensáis que 3d Studio Max y alguna Api me podrían ayudará.
Tengo entendido que hay alguna aplicación que permite simular la luz en un determinado momento del día en cualquier parte del mundo.
¿Es cierto?
Calcular el área de la sombra que proyecta un modelo
Te pongo un sencillo script que calcula la posición del sol según fecha, hora, latitud y longitud. También te da el Vector dirección: s=(x y, z).
Para calcular el área, dependerá lo difícil es hallar el área de la proyección del edificio sobre el plano perpendicular a, y dividirla por el seno de altitude. Si no me equivoco.
#*********************.
# posicionamiento del sol respecto a la hora solar.
# -.
#*********************.
Latitude =
S_latitude = Latitude * pi/180.
Longitude =
S_longitude = longitude * pi/180.
Meridian = -2.
S_meridian = meridian * pi/180.
Tsolar = 1 (el +gmt).
Hour =.(0.23).
Month =. (1,2.12).
Day =.(1.31).
#-.
#/* Julián date (days into year) */.
#-.
Def jdate (month, day).
Mo_da = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334].
Return(mo_da[month-1] + day).
#-.
#/* solar time adjustment from Julián date */.
#-.
Def stadj(jd).
Return(0.170 * sin((4*pi/373) * (jd - 80)) - 0.129 * sin((2*pi/355) * (jd + 12 * (s_meridian - S_longitude) / pi).
#-.
#/* solar declination angle from Julián date */.
#-.
Def sdec(jd).
Return(0.4093 * sin((2*pi/36 * (jd - 81))).
#-.
#/* solar altitude from solar declination and solar time */.
#-.
Def salt(sd, st).
Return(así(sin(s_latitude) * sin(sd) - Cos(s_latitude) * cos(sd) * cos(st*(pi/12)))).
#-.
# /* solar azimuth from solar declination and solar time */.
#-.
Def sazi (sd, st).
Return(-atan2(cos(sd)*sin(st*(pi/12)), -cos(s_latitude)*sin(sd) - Sin(s_latitude)*cos(sd)*cos(st*(pi/12)))).
#-.
# main.
#-.
Jd = jdate (month, day).
Sd = sdec(jd).
If tsolar == 1:
St = hour.
Else:
St = hour + stadj(jd).
Altitude = salt(sd, st).
Azimuth = sazi (sd, st).
Print local solar time, st.
Print altitude, altitude*180/pi.
Print azimuth, azimuth*180/pi.
Print x,-sin(azimuth)*cos(altitude).
Print y,-cos(azimuth)*cos(altitude).
Print z, sin(altitude).
Calcular el área de la sombra que proyecta un modelo
Hola, chicos, eso lo hace el max desde la versión 4 creo. Tu le dices: España-Zaragoza a las 14:35 de la tarde y el tipo te coloca el sol clavado, eso eso? Saludos.
Calcular el área de la sombra que proyecta un modelo
Cita:
Te pongo un sencillo script que calcula la posición del sol según fecha, hora, latitud y longitud. También te da el Vector dirección: s=(x y, z).
Para calcular el área, dependerá lo difícil es hallar el área de la proyección del edificio sobre el plano perpendicular a, y dividirla por el seno de altitude. Si no me equivoco.
#*********************.
# posicionamiento del sol respecto a la hora solar.
# -.
#*********************.
Latitude =
S_latitude = Latitude * pi/180.
Longitude =
S_longitude = longitude * pi/180.
Meridian = -2.
S_meridian = meridian * pi/180.
Tsolar = 1 (el +gmt).
Hour =.(0.23).
Month =. (1,2.12).
Day =.(1.31).
#-.
#/* Julián date (days into year) */.
#-.
Def jdate (month, day).
Mo_da = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334].
Return(mo_da[month-1] + day).
#-.
#/* solar time adjustment from Julián date */.
#-.
Def stadj(jd).
Return(0.170 * sin((4*pi/373) * (jd - 80)) - 0.129 * sin((2*pi/355) * (jd + 12 * (s_meridian - S_longitude) / pi).
#-.
#/* solar declination angle from Julián date */.
#-.
Def sdec(jd).
Return(0.4093 * sin((2*pi/36 * (jd - 81))).
#-.
#/* solar altitude from solar declination and solar time */.
#-.
Def salt(sd, st).
Return(así(sin(s_latitude) * sin(sd) - Cos(s_latitude) * cos(sd) * cos(st*(pi/12)))).
#-.
# /* solar azimuth from solar declination and solar time */.
#-.
Def sazi (sd, st).
Return(-atan2(cos(sd)*sin(st*(pi/12)), -cos(s_latitude)*sin(sd) - Sin(s_latitude)*cos(sd)*cos(st*(pi/12)))).
#-.
# main.
#-.
Jd = jdate (month, day).
Sd = sdec(jd).
If tsolar == 1:
St = hour.
Else:
St = hour + stadj(jd).
Altitude = salt(sd, st).
Azimuth = sazi (sd, st).
Print local solar time, st.
Print altitude, altitude*180/pi.
Print azimuth, azimuth*180/pi.
Print x,-sin(azimuth)*cos(altitude).
Print y,-cos(azimuth)*cos(altitude).
Print z, sin(altitude).
Gracias Klópes, pero este script ¿para qué aplicación es?
Calcular el área de la sombra que proyecta un modelo
Editado porque soy así de chulo.
Calcular el área de la sombra que proyecta un modelo
Cita:
Gracias Klópes, pero este script ¿para qué aplicación es?
Así a bote pronto, para ninguna. Es Python, pero le he quitado las órdenes que, acceden a objetos para que quede casi como seudocódigo, para algo tan específico como lo que pides no te puedo ayudar más, lo siento. Simplemente tienes que traducirlo al lenguaje de tu programa y adaptarlo.
Como dice TBC3D, max ya tiene el cálculo solar implementado, sólo tienes que, acceder a la dirección del sol, ni siquiera necesitas ese script. La madre del cordero está en lo que te he dicho después, que no es poco trabajo, siento no poder ayudarte más, suerte.