4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Hora solar

Hora oficial

Verano

grados

minutos

Latitud

Longitud

grados

minutos

N

S

E

O

1 Ene

1 Feb

1 Mar

1 Abr

1 May

1 Jun

1 Jul

1 Ago

1 Sep

1 Oct

1 Nov

1 Dic

Fechas analema

N

S

E

O

NE

NO

SO

SE

Semieje mayor (cm)

Focos

F1

F2

Ene

Feb

Mar

Abr

May

Jun

Jul

Ago

Sep

Oct

Nov

Dic

altura Gnomon (cm)

2

4

6

8

10

12

14

16

18

20

22

24

Hora solar

Fechas analema

Hora oficial

Verano

Focos

Horas: {4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0}
Angulos = Sequence(15.0 * (18.0 - Element[Horas, n]), n, 1.0, 17.0)
u = 400 (slider from 0 to 500, step 25)
SolarX = Sequence(u * cos(Element[Angulos, n] * °), n, 1.0, 17.0)
ecTiempo: {-3.46, -7.43, -10.96, -13.58, -14.26, -13.78, -12.41, -10.35, -7.55, -3.94, -1.38, 1.03, 2.87, 3.59, 3.49, 2.21, 0.62, -1.5, -3.8, -5.33, -6.35, -6.35, -5.41, -3.46, -0.11, 2.89, 6.44, 10.22, 12.92, 15.17, 16.44, 16.14, 14.46, 11.06, 7.32, 2.54}
AnalemaX = Sequence(-1.0 * u * sin(Element[ecTiempo, n] / 4.0 * °), n, 1.0, 36.0)
declinacion: {-23.01, -21.97, -20.13, -17.12, -14.37, -10.94, -7.61, -4.13, -0.18, 4.52, 7.93, 11.5, 15.06, 17.61, 19.97, 22.93, 23.0, 23.43, 23.1, 22.23, 20.66, 18.02, 15.57, 12.45, 8.29, 4.95, 1.1, -3.18, -6.63, -10.33, -14.42, -17.13, -19.98, -21.8, -22.91, -23.43, -23.01}
v3 = 1 (slider from -1 to 1, step 2)
v2 = 33.5 (slider from 0 to 59.5, step 0.5)
v1 = 43 (slider from 0 to 89, step 1)
d2: v3 * (v1 + v2 / 60.0)
b5: u * sin(d2 * °)
SolarY = Sequence(b5 * sin(Element[Angulos, n] * °), n, 1.0, 17.0)
AnalemaY = Sequence(u * cos(d2 * °) * tan(Element[declinacion, n] * °), n, 1.0, 36.0)
fijaC = 0
C: (418.65, -1.0 * 1.0 * 1.0 * 1.0 * 252.44 + fijaC)
z2 = OrthogonalLine(C, xAxis)
fijaCentroAnuario = 0
CentroAnuario: (-1.0 * 1.0 * 1.0 * 1.0 * 123.33, -1.0 * 1.0 * 1.0 * 1.0 * 252.44 + fijaCentroAnuario)
CentroHorario = Mirror(CentroAnuario, yAxis)
Aux2: (x(CentroAnuario) + 400.0, y(CentroAnuario))
j = Ray(CentroAnuario, Aux2)
l: 1.0 * 1.0 * 1.0 * 1.0 y = y(CentroAnuario)
RadioAnuario = (-147.78418838526915, -190.5280516997166)
k = Circle(CentroAnuario, RadioAnuario)
mEne = Intersect(k, j, 1.0)
Hora06 = Mirror(mEne, yAxis)
Hora00 = Rotate(Hora06, 90.0°, CentroHorario)
Hora12 = Rotate(Hora06, 270.0°, CentroHorario)
m = Line(Hora12, l)
Zcenit = Intersect(z2, m)
r = Circle(C, Zcenit)
Zang0 = Intersect(r, l, 1.0)
Zang15 = Rotate(Zcenit, 75.00000000000001°, C)
s = CircleArc(C, Zcenit, Zang15)
Z = Point(s)
γ = Angle(Z, C, Zang0)
PhP = Sequence((Element[SolarX, s], Element[SolarY, s] * sin(γ)), s, 1.0, 17.0)
Ph20 = Element(PhP, 17.0)
Ph19 = Element(PhP, 16.0)
Ph18 = Element(PhP, 15.0)
Ph17 = Element(PhP, 14.0)
Ph16 = Element(PhP, 13.0)
Ph15 = Element(PhP, 12.0)
Ph03: (-1.0 * 1.0 * 1.0 * 1.0 * x(Ph15), -1.0 * 1.0 * 1.0 * 1.0 * y(Ph15))
Ph14 = Element(PhP, 11.0)
Ph02: (-1.0 * 1.0 * 1.0 * 1.0 * x(Ph14), -1.0 * 1.0 * 1.0 * 1.0 * y(Ph14))
Ph13 = Element(PhP, 10.0)
Ph01: (-1.0 * 1.0 * 1.0 * 1.0 * x(Ph13), -1.0 * 1.0 * 1.0 * 1.0 * y(Ph13))
Ph12 = Element(PhP, 9.0)
Ph00: (-1.0 * 1.0 * 1.0 * 1.0 * x(Ph12), -1.0 * 1.0 * 1.0 * 1.0 * y(Ph12))
Ph11 = Element(PhP, 8.0)
Ph23: (-1.0 * 1.0 * 1.0 * 1.0 * x(Ph11), -1.0 * 1.0 * 1.0 * 1.0 * y(Ph11))
Ph10 = Element(PhP, 7.0)
Ph22: (-1.0 * 1.0 * 1.0 * 1.0 * x(Ph10), -1.0 * 1.0 * 1.0 * 1.0 * y(Ph10))
Ph09 = Element(PhP, 6.0)
Ph21: (-1.0 * 1.0 * 1.0 * 1.0 * x(Ph09), -1.0 * 1.0 * 1.0 * 1.0 * y(Ph09))
Ph08 = Element(PhP, 5.0)
Ph07 = Element(PhP, 4.0)
Ph06 = Element(PhP, 3.0)
Ph05 = Element(PhP, 2.0)
Ph04 = Element(PhP, 1.0)
Reloj: {Ph00, Ph01, Ph02, Ph03, Ph04, Ph05, Ph06, Ph07, Ph08, Ph09, Ph10, Ph11, Ph12, Ph13, Ph14, Ph15, Ph16, Ph17, Ph18, Ph19, Ph20, Ph21, Ph22, Ph23, Ph00}
Analema = Sequence((Element[AnalemaX, n], Element[AnalemaY, n] * sin(γ)), n, 1.0, 36.0)
A = Point(k)
α = Angle(mEne, CentroAnuario, A)
t: 1.0 + floor(365.0 * α / (360.0 * °))
gMes = If(t > 334.0, 12.0, If[t > 304.0, 11.0, If[t > 273.0, 10.0, If[t > 243.0, 9.0, If[t > 212.0, 8.0, If[t > 181.0, 7.0, If[t > 151.0, 6.0, If[t > 120.0, 5.0, If[t > 90.0, 4.0, If[t > 59.0, 3.0, If[t > 31.0, 2.0, 1.0]]]]]]]]]])
gFinmes = If(gMes ≟ 4.0 ∨ gMes ≟ 6.0 ∨ gMes ≟ 9.0 ∨ gMes ≟ 11.0, 2.0, If[gMes ≟ 2.0, 0.0, 3.0])
gDia = If(t > 334.0, t - 334.0, If[t > 304.0, t - 304.0, If[t > 273.0, t - 273.0, If[t > 243.0, t - 243.0, If[t > 212.0, t - 212.0, If[t > 181.0, t - 181.0, If[t > 151.0, t - 151.0, If[t > 120.0, t - 120.0, If[t > 90.0, t - 90.0, If[t > 59.0, t - 59.0, If[t > 31.0, t - 31.0, t]]]]]]]]]])
gDias = If(gDia > 19.0, 9.0 + gFinmes, If[gDia > 9.0, 10.0, 9.0])
gDecena = If(gDia > 19.0, 2.0, If[gDia > 9.0, 1.0, 0.0])
gIndice: 3.0 * gMes + gDecena - 2.0
gPosicion = If(gDia > 19.0, gDia - 20.0, If[gDia > 9.0, gDia - 10.0, gDia - 1.0])
Gnomon = If(gIndice < 36.0, (1.0 - gPosicion / gDias) * Element[Analema, gIndice] + gPosicion / gDias * Element[Analema, gIndice + 1.0], (1.0 - gPosicion / gDias) * Element[Analema, gIndice] + gPosicion / gDias * Element[Analema, 1.0])
Gnomon0: (x(Gnomon), y(Gnomon) / sin(γ))
declinacionHoy: (gPosicion / gDias * Element[declinacion, gIndice + 1.0] + (1.0 - gPosicion / gDias) * Element[declinacion, gIndice]) * °
RadioHorario = Mirror(RadioAnuario, yAxis)
p = Circle(CentroHorario, RadioHorario)
B = Point(p)
β = Angle(B, CentroHorario, Hora00)
minuto2: β * 1440.0 / (360.0 * °)
hora: floor(minuto2 / 60.0)
minutos: minuto2 - hora * 60.0
angHorario: (180.0 - 15.0 * minuto2 / 60.0) * °
elevacion: asin(cos(angHorario) * cos(declinacionHoy) * cos(d2 * °) + sin(declinacionHoy) * sin(d2 * °)) * 180.0 * ° / 3.14
Sombra = If(elevacion > 180.0 * °, Gnomon, minutos / 60.0 * Element[Reloj, hora + 2.0] + (1.0 - minutos / 60.0) * Element[Reloj, hora + 1.0])
Sombra0: (x(Sombra), y(Sombra) / sin(γ))
gAltura = 200 (slider from 100 to 250, step 1)
vectorSombra0 = Vector(Gnomon0, Sombra0)
longitudSombra = If(elevacion > 180.0 * °, 0.0, gAltura / tan(elevacion))
vectorSombra = Vector(Gnomon, Sombra)
w3 = -1 (slider from -1 to 1, step 2)
w2 = 55.5 (slider from 0 to 59.5, step 0.5)
w1 = 5 (slider from 0 to 14, step 1)
d3: -1.0 * w3 * (w1 + w2 / 60.0)
AngulosOFI = Sequence(d3 + Element[Angulos, n], n, 1.0, 17.0)
OficialX = Sequence(u * cos(Element[AngulosOFI, n] * °), n, 1.0, 17.0)
OficialY = Sequence(b5 * sin(Element[AngulosOFI, n] * °), n, 1.0, 17.0)
PofiP = Sequence((Element[OficialX, s], Element[OficialY, s] * sin(γ)), s, 1.0, 17.0)
a: 1.0 * 1.0 * 1.0 * 1.0 y = 1.0 * 1.0 * 1.0 * 1.0 x * sin(γ)
b: 1.0 * 1.0 * 1.0 * 1.0 y = -1.0 * 1.0 * 1.0 * 1.0 * 1.0 * 1.0 * 1.0 * 1.0 x * sin(γ)
e: 1.0 * 1.0 * 1.0 * 1.0 y = 1.0 * 1.0 * 1.0 * 1.0 x * tan(22.5 * °) * sin(γ)
Pofi06 = Element(PofiP, 2.0)
Pofi07 = Element(PofiP, 3.0)
Pofi08 = Element(PofiP, 4.0)
Pofi09 = Element(PofiP, 5.0)
Pofi10 = Element(PofiP, 6.0)
Pofi11 = Element(PofiP, 7.0)
Pofi12 = Element(PofiP, 8.0)
Pofi13 = Element(PofiP, 9.0)
Pofi14 = Element(PofiP, 10.0)
Pofi15 = Element(PofiP, 11.0)
Pofi16 = Element(PofiP, 12.0)
Pofi17 = Element(PofiP, 13.0)
Pofi18 = Element(PofiP, 14.0)
Pofi19 = Element(PofiP, 15.0)
Pofi20 = Element(PofiP, 16.0)
Pofi21 = Element(PofiP, 17.0)
verSolar = true
verOficial = false
verVerano = false
AnalemaGrafo = Sequence(Segment[Element[Analema, n], Element[Analema, n + 1.0]], n, 1.0, 35.0)
AnalemaCierre = Segment(Element[Analema, 36.0], Element[Analema, 1.0])
elipse = Conic(Ph06, Ph09, Ph12, Ph15, Ph18)
Ana01 = Element(Analema, 1.0)
Ana02 = Element(Analema, 4.0)
Ana03 = Element(Analema, 7.0)
Ana04 = Element(Analema, 10.0)
Ana05 = Element(Analema, 13.0)
Ana06 = Element(Analema, 16.0)
Ana07 = Element(Analema, 19.0)
Ana08 = Element(Analema, 22.0)
Ana09 = Element(Analema, 25.0)
Ana10 = Element(Analema, 28.0)
Ana11 = Element(Analema, 31.0)
Ana12 = Element(Analema, 34.0)
verFechas = false
RosaE: (u + 50.0, -1.0 * 1.0 * 1.0 * 1.0 * 8.0 * sin(γ))
RosaNE: (u * cos(45.0 * °), (u * sin(45.0 * °) + 10.0) * sin(γ))
RosaN: (-1.0 * 1.0 * 1.0 * 1.0 * 8.0, (abs(b5) + 50.0) * sin(γ))
RosaNO: (-1.0 * 1.0 * 1.0 * 1.0 * x(RosaNE) - 30.0, y(RosaNE))
RosaO: (-1.0 * 1.0 * 1.0 * 1.0 * x(RosaE), y(RosaE))
RosaSO: (x(RosaNO), -1.0 * 1.0 * 1.0 * 1.0 * y(RosaNO) - 15.0)
RosaS: (x(RosaN), -1.0 * 1.0 * 1.0 * 1.0 * y(RosaN) - 20.0)
RosaSE: (x(RosaNE), y(RosaSO))
verFocos = false
Foco1: (-1.0 * 1.0 * 1.0 * 1.0 * sqrt(u^(2.0) - b5^(2.0)), 0.0)
Foco2: (sqrt(u^(2.0) - b5^(2.0)), 0.0)
Aux1: (x(CentroAnuario), y(CentroAnuario) + 400.0)
mFeb = Rotate(mEne, 30.575342465753423°, CentroAnuario)
mMar = Rotate(mEne, 58.1917808219178°, CentroAnuario)
mAbr = Rotate(mEne, 88.76712328767123°, CentroAnuario)
mMay = Rotate(mEne, 118.3561643835616°, CentroAnuario)
mJun = Rotate(mEne, 148.9315068493151°, CentroAnuario)
mJul = Rotate(mEne, 178.5205479452055°, CentroAnuario)
mAgo = Rotate(mEne, 209.09589041095893°, CentroAnuario)
mSep = Rotate(mEne, 239.6712328767123°, CentroAnuario)
mOct = Rotate(mEne, 269.2602739726028°, CentroAnuario)
mNov = Rotate(mEne, 299.8356164383562°, CentroAnuario)
mDic = Rotate(mEne, 329.4246575342466°, CentroAnuario)
fechaEnero: gDia + " de Enero"
fechaFebrero: gDia + " de Febrero"
fechaMarzo: gDia + " de Marzo"
fechaAbril: gDia + " de Abril"
fechaMayo: gDia + " de Mayo"
fechaJunio: gDia + " de Junio"
fechaJulio: gDia + " de Julio"
fechaAgosto: gDia + " de Agosto"
fechaSeptiembre: gDia + " de Septiembre"
fechaOctubre: gDia + " de Octubre"
fechaNoviembre: gDia + " de Noviembre"
fechaDiciembre: gDia + " de Diciembre"
mPos: mJul + (10.0, 0.0)
i = Segment(Gnomon, Sombra)
Hora04 = Rotate(Hora06, 29.999999999999996°, CentroHorario)
Hora02 = Rotate(Hora06, 59.99999999999999°, CentroHorario)
Hora22 = Rotate(Hora06, 119.99999999999999°, CentroHorario)
Hora20 = Rotate(Hora06, 150.00000000000003°, CentroHorario)
Hora18 = Rotate(Hora06, 180.0°, CentroHorario)
Hora16 = Rotate(Hora06, 210.0°, CentroHorario)
Hora14 = Rotate(Hora06, 239.99999999999997°, CentroHorario)
Hora10 = Rotate(Hora06, 300.0000000000001°, CentroHorario)
Hora08 = Rotate(Hora06, 329.9999999999999°, CentroHorario)
arco07 = CircleArc(CentroHorario, Hora16, Hora14)
arco08 = CircleArc(CentroHorario, Hora12, Hora10)
arco09 = CircleArc(CentroHorario, Hora08, Hora06)
arco10 = CircleArc(CentroHorario, Hora04, Hora02)
arco11 = CircleArc(CentroHorario, Hora00, Hora22)
arco12 = CircleArc(CentroHorario, Hora20, Hora18)
arco01 = CircleArc(CentroAnuario, mFeb, mMar)
arco02 = CircleArc(CentroAnuario, mAbr, mMay)
arco03 = CircleArc(CentroAnuario, mJun, mJul)
arco04 = CircleArc(CentroAnuario, mAgo, mSep)
arco05 = CircleArc(CentroAnuario, mOct, mNov)
arco06 = CircleArc(CentroAnuario, mDic, mEne)
tHora1: hora + " : " + (floor(minutos))
tHora2: hora + " : 0" + (floor(minutos))
Pofi05 = Element(PofiP, 1.0)
q = CircleSector(C, Zcenit, Zang0)
GnomonExtremo: (x(Gnomon), y(Gnomon) + gAltura * cos(γ))
segmentoGnomon = Segment(Gnomon, GnomonExtremo)
SombraExtremoPlano: Gnomon0 + UnitVector[vectorSombra0] * longitudSombra
SombraExtremo: (x(SombraExtremoPlano), y(SombraExtremoPlano) * sin(γ))
sombra = Segment(Gnomon, SombraExtremo)
poly1, gnomonextremo, sombraextremo, gnomon = Polygon(SombraExtremo, Gnomon, GnomonExtremo)
h: 1.0 * 1.0 * 1.0 * 1.0 y = 1.0 * 1.0 * 1.0 * 1.0 x * tan(67.5 * °) * sin(γ)
f: 1.0 * 1.0 * 1.0 * 1.0 y = -1.0 * 1.0 * 1.0 * 1.0 * 1.0 * 1.0 * 1.0 * 1.0 x * tan(22.5 * °) * sin(γ)
g: 1.0 * 1.0 * 1.0 * 1.0 y = -1.0 * 1.0 * 1.0 * 1.0 * 1.0 * 1.0 * 1.0 * 1.0 x * tan(67.5 * °) * sin(γ)
colorSombra = If(longitudSombra ≟ 0.0, 1.0, 226.0 / 255.0 * Max[0.0, 1.0 - 100.0 / longitudSombra])
texto1: "Longitud sombra: " + "
" + longitudSombra + " cm"