2011/05/21

Construccion de reloj de sol. Programa en Basic



cls


'                         CONSTANTES
pi#=4*atn(1) '3.141594


' Angulo de la ecliptica=23§ 27'
g=23
m=27
s=0
eclip.seg=g*60*60+m*60
eclip.dec=g+m/60
eclip.rad=eclip.dec*2*pi#/360
' -------------------------------------


'                           VARIABLES




l=1  ' Altura del campo del cuadrante (vertical)=distancia del polo del reloj
     ' al pie de la linea de las XII
     ' Ancho del cuadrante (horizontal) = dimension en la longitud Norte-Sur


' latitud del cuadrante=37§ 36' 18"
g=37
m=36
s=18
la.c.s=g*60*60+m*60+s
la.c.d=g+m/60+s/(60*60)
la.c.r=la.c.d*2*pi#/360


' longitud del cuadrante y difrencia horaria oficial
g=1                           'hora de adelanto respecto a inglaterra
m=0
s=59
lo.c.s=g*60*60+60+m*60+s
lo.c.d=g+m/60+s/(60*60)
lo.c.r=la.c.d*2*pi#/360




' Declinacion del cuadrante (Relojes verticales)
'g=20
'm=2
's=2
'd.c.s=g*60*60+m*60+s        ' en segundos
'd.c.d=g+m/60+s/(60*60)      ' en grados
'd.c.r=d.c.d*2*pi#/360       ' en radianes
' --------------------------------------------




'                           CALCULOS




' Relojes Ecuatoriales
' calculo de las lineas horarias limites.
' definidas por los angulos orto y ocaso


d1$=" \                            \  #######,.###  \           \"
print using d1$;"Angulo de la ecliptica";eclip.seg;"segundos"
print using d1$;"";eclip.dec;"grados"
print using d1$;"";eclip.rad;"radianes"
print
print using d1$;"Latitud del cuadrante ";la.c.s;"segundos"
print using d1$;"";la.c.d;"grados"
print using d1$;"";la.c.r;"radianes"
print
cosu=tan(eclip.rad)*tan(la.c.r)
tanu=(sqr(1-cosu^2))/cosu
orto.rad=atn(tanu)
orto.dec=orto.rad*360/(2*pi#)


print using d1$;"tangente de la ecliptica";tan(eclip.rad);"..."
'print using d1$;"tangente de la latitud";tan(la.c.r);"..."
print using d1$;"Coseno del angulo orto";cosu;"..."
print using d1$;"Angulo orto ";orto.rad;"radianes"
print using d1$;"";orto.dec;"grados"
print using d1$;"Se deben eliminar del dibujo";int(orto.dec/15);"horas"
call seguir






print "RELOJES HORIZONTALES"
PRINT "--------------------"
g=l/(sin(la.c.r)+(cos(la.c.r))*tan(la.c.r+eclip.rad))
print using d1$;"Ancho del cuadrante";l;"metros"
print using d1$;"Longitud del gnomon";g;"metros"
print using d1$;"Angulo con la horizontal :";la.c.d;"Latitud"
s.l=sin(la.c.r)
'PRINT using d1$;"Seno de la latitud ";s.l
print "Angulos de cada linea horaria con las XII"
  d2$=" \          \   ###,.###   #########,.###"
print "      Hora      Angulo           tangente"
print "-----------------------------------------"
for n=1 to 12
t=tan(n*15*2*pi#/360)
print using d2$;"Hora "+str$(n);(360/(2*pi#))*atn(s.l*t);t
next n


call seguir
' CALCULO DE LA DECLINACION DEL CUADRANTE
'La declinacion del cuadrante es el angulo que forman su perpendicular con
'la direccion de la meridiana.Esta es la sombra de una varilla vertical
'en el momento de maxima elevacion del sol.


'Calculo de la perpendidular al cuadrante
'Datos f=angulo horizontal con dos puntos de la fachada del cuadrante
'      l1=longitud del taquimetro al primer punto
'      l2=longitud del taquimetro al segundo punto
g=56
m=36
s=20
l1=7.58
l2=7.46
f.seg=g*60*60+m*60   'angulo que forma el taquimetro con los puntos 1 y 2
f.dec=g+m/60+a/(60*60)
f.rad=f.dec*2*pi#/360
b=l2*cos(f.rad)      'calculo auxiliar
a=l1-b               ' idem
h=l2*sin(f.rad)      ' idem
d=l1*cos(atn(h/a))   'distancia del punto 1 a la perpendicular desde el
                     'taquimetro a la pared.
d1$=" \                                                 \  #######,.###  "
print using d1$;"Distancia del punto 1 al punto perpendicular de la fachada";d




'hora1  =024523
'angulo1=555800


' hora de la observacion
h=14
m=45
s=23
ho.ob.s=h*60*60+m*60+s
ho.ob.d=h+m/60+s/(60*60)
'ho.ob.r=ho.ob.d*2*pi#/360


' angulo observado
g=55
m=58
s=0
an.ob.s=g*60*60+m*60+s
an.ob.d=g+m/60+s/(60*60)
an.ob.r=ho.ob.d*2*pi#/360




' hora del paso del sol por el meridiano
dia=19
h=11
m=57.3
s=0
pgm1.s=h*60*60+m*60+s
pgm1.d=h+m/60+s/(60*60)
'correccion de la longitud
pgm1.d=pgm1.d+lo.c.d/15   ' se suma la correccion por estar al oeste
pgm1.r=pgm1.d*2*pi#/360


'declinacion solar del dia que se efectua la observacion
g=-23
m=25.5
s=0
dec1.s=g*60*60+m*60+s
dec1.d=g+m/60+s/(60*60)
dec1.r=dec1.d*2*pi#/360


'angulo horario
an.ho.d=pgm1.d-ho.ob.d
an.ho.grados=an.ho.d*15
an.ho.r=an.ho.grados*2*pi#/360


'angulo que forma la sombra arrojada de la plomada con el norte verdadero.
beta.r=atn(sin(an.ho.r)/(sin(la.c.r)*cos(an.ho.r)-cos(la.c.r)*tan(pgm1.r)))
beta.d=beta.r*360/(2*pi#)




print using d1$;"Hora de paso del sol en radianes";pgm1.r
print using d1$;"Angulo horario en radianes";an.ho.r
print using d1$;"Angulo sombra-norte en radianes";beta.r
print using d1$;"Angulo de la sombra con el norte verdadero";beta.d
print using d1$;"Angulo de la sombra con la perpendicular del cuadrante";an.ob.d
print using d1$;"Angulo de la perpendicular con el norte verdadero";beta.d+an.ob.d
primera=beta.d+an.ob.d




'call seguir


'hora2  =034912
'angulo2=692300
' hora de la observacion
h=15
m=49
s=12
ho.ob.s=h*60*60+m*60+s
ho.ob.d=h+m/60+s/(60*60)
'ho.ob.r=ho.ob.d*2*pi#/360


' angulo observado
g=69
m=23
s=0
an.ob.s=g*60*60+m*60+s
an.ob.d=g+m/60+s/(60*60)
an.ob.r=ho.ob.d*2*pi#/360




'angulo horario
an.ho.d=pgm1.d-ho.ob.d
an.ho.grados=an.ho.d*15
an.ho.r=an.ho.grados*2*pi#/360


'angulo que forma la sombra arrojada de la plomada con el norte verdadero.
beta.r=atn(sin(an.ho.r)/(sin(la.c.r)*cos(an.ho.r)-cos(la.c.r)*tan(pgm1.r)))
beta.d=beta.r*360/(2*pi#)


print "-------------------"
print "Segunda observacion"
print using d1$;"Angulo horario en radianes";an.ho.r
print using d1$;"Angulo sombra-norte en radianes";beta.r
print using d1$;"Angulo de la sombra con el norte verdadero";beta.d
print using d1$;"Angulo de la sombra con la perpendicular del cuadrante";an.ob.d
segunda=beta.d+an.ob.d
print using d1$;"Angulo de la perpendicular con el norte verdadero";segunda
d.c.d=(primera+segunda)/2
d.c.d=30   ' declinacion del cuadrante en forma decimal
d.c.r=d.c.d*(2*pi#)/360
print "+++++++++++++++++++++++++++++++++++++++++++++"
print using d1$;"Declinacion del cuadrante";d.c.d


call seguir


print "RELOJES VERTICALES"
PRINT "------------------"
g=l/(cos(la.c.r)/tan(la.c.r-eclip.rad)+sin(la.c.r))
print using d1$;"Altura del cuadrante";l
print using d1$;"Longitud del gnomon";g
print "               Angulo horario      tangente"
print "               ----------------------------"
for n=1 to 24
t=tan(n*15*2*pi#/360)
coti=(cos(d.c.r)/((cos(la.c.r))*t))-(sin(d.c.r))*tan(la.c.r)
print using d2$;"Hora "+str$(n);(360/(2*pi#))*atn(1/coti);1/coti
if n=12 then call seguir
next n
call seguir


print "CALCULO DEL GNOM0N"
PRINT "------------------"
senu=cos(la.c.r)*cos(d.c.r)
cosu=sqr(1-senu^2)
a.es.r=atn(senu/cosu)   ' angulo estilar que forma el gnomon con la subestilar
a.es.d=a.es.r*360/(2*pi#)
print using d1$;"Angulo estilar (gnomon con subestilar)";a.es.d
' lados del gnomon
l.par=g*cos(a.es.r)
l.per=g*sin(a.es.r)


a.su.r=atn(sin(d.c.r)/tan(la.c.r))
a.su.d=a.su.r*360/(2*pi#)
print using d1$;"Angulo de la subestilar con la vertical";a.su.d
' en el sentido de las agujas del reloj desde la vertical inferior
print using d1$;"Angulo de la subestilar con la horizontal";270+a.su.d
' en sentido contrario de las agujas del reloj desde la horizontal derecha
print using d1$;"Longitud sobre el reloj del gnomon ";l.par
print using d1$;"Longitud perpendicular al reloj del gnomon ";l.per


print "....................................."
print "DISE¥O del CALENDARIO"
print "---------------------"


data -23,-27,-20,-10,-11,-20,0,0
data 0,0,11,20,20,10,23,27
for n=1 to 8
read gr(n),mi(n)
c.sig.d(n)=gr(n)+mi(n)/60  'declinacion del sol en el cambio del signo zodiacal
c(n)=c.sig.d(n)*2*pi#/360
a(n)=g*((1/sin(a.es.r-c(n)))-(1/sin(a.es.r+c(n))))*cos(c(n))
oc(n)=0.5*g*((1/sin(a.es.r-c(n)))+(1/sin(a.es.r+c(n))))*cos(c(n))
' angulo que forman las asintotas con la subestilar
coss(n)=sin(c(n)*(1/sin(a.es.r)))
sens(n)=sqr(1-coss(n)^2)
if coss(n)><0 then x(n)=atn(sens(n)/coss(n))     'angulo de las asintotas
x.d(n)=x(n)*360/(2*pi#)
if coss(n)><0 then b(n)=a(n)*(sens(n)/coss(n))   ' eje mayor
next n
print "(1)=distancia del polo del cuadrante al centro de la hiperbola"
print "(2)=angulo que forman las asintotas con la subestilar"


print "semieje     (1)     (2)  eje mayor             coordenadas"
print "----------------------------------  0.1   0.2   0.3   0.4   0.5   0.6 "
  d2$="###,.##  ###,.##  ###,.##  ###,.##  #.### #.### #.### #.### #.### #.###"
for n=1 to 8
x1=0:x2=0:x3=0:x4=0:x5=0:x6=0
if b(n)<>0 then
    x1=sqr(a(n)^2*(1+(0.1^2)/(b(n)^2)))
    x2=sqr(a(n)^2*(1+(0.2^2)/(b(n)^2)))
    x3=sqr(a(n)^2*(1+(0.3^2)/(b(n)^2)))
    x4=sqr(a(n)^2*(1+(0.4^2)/(b(n)^2)))
    x5=sqr(a(n)^2*(1+(0.5^2)/(b(n)^2)))
    x6=sqr(a(n)^2*(1+(0.6^2)/(b(n)^2)))
 end if
  print using d2$;a(n);oc(n);x.d(n);b(n);x1;x2;x3;x4;x5;x6
next n










'h=11
'm=57.8
'pgm2.s=h*60*60+m*60+s
'pgm2.d=h+m/60+s/(60*60)
'pgm2.r=la.c.d*2*pi#/360
'
'g.dec2=-23
'm.dec2=26.3


end




sub seguir
locate 23,20
print "Para seguir pulsar una tecla"
While inkey$="":wend
cls
end sub

Fecha de pentecostes. Programa en Basic


'fecha de pentecostes
cls
'pentecos.bas


an#=2008
x#=an#/19
a#=an#-int(x#)*19


x#=an#/100
b#=int(x#)
c#=an#-b#*100


x#=b#/4
d#=int(x#)
e#=b#-int(x#)*4


f#=int((b#+8)/25)


g#=int((b#-f#+1)/3)


y#=19*a#+b#-d#-g#+15
x#=y#/30
h#=y#-int(x#)*30


y#=c#/4
i#=int(y#)
k#=c#-int(y#)*4


y#=32+2*e#+2*i#-h#-k#
x#=y#/7
l#=y#-int(x#)*7


y#=a#+11*h#+22*l#
x#=y#/451
m#=int(x#)


y#=h#+l#-7*m#+114
x#=y#/31
n#=int(x#)
p#=y#-int(x#)*31


d1$="##   ##  ####"


print "dia  mes  a¤o"
print using d1$;p#+1;n#;an#

end

Transformacion de coordenadas. Programa en Basic


cls
A=0:h=0:d=0:Ho=0
pri:
on error goto  pri


pi=4*atn(1)


r=2*pi/360   'grados a radianes
g=1/r        'radianes a grados


locate  8,10:print "(hs) Hora sideral"
locate  9,10:print "(o ) Latitud del observador"
locate 10,10:print "COORDENADAS HORIZONTALES"
locate 11,10:print "(A ) Acimut.........."
locate 12,10:print "(h ) Altura.........."
locate 13,10:print "COORDENADAS ECUATORIALES HORARIAS"
locate 14,10:print "(Ho) Angulo horario.."
locate 15,10:print "(d ) Declinacion....."
locate 16,10:print "COORDENADAS ECUATORIALES ABSOLUTAS"
locate 17,10:print "(Ar) Ascension recta."
locate 18,10:print "(d ) Declinacion....."
locate 19,10:print "COORDENADAS ECLIPTICAS"
locate 20,10:print "(lo) Longitud........"
locate 21,10:print "(la) Latitud........."


color 2,8
locate  8,40:'input hs$:call co(hs$,hs)
hs$="012 13 02"
locate  9,40:'input o$
'o$="041 12 06"
o$="-042 13 14"
call co(o$,o):print o$
locate 11,40:'input A$
'A$="310 42 02"
A$="023 17 22"
call co(A$,A):print A$
locate 12,40:'input h$
'h$="-071 42 06"
h$="-015 20 00"
call co(h$,h):print h$
color 4,7


if A=0 and h=0 then
  locate 14,25:input Ho$:call co(Ho$,Ho)
  locate 15,25:input  d$:call co( d$,d )
end if
if A=0 and h=0 and Ho=0 and d=0 then goto pri
if A<>0 and h<>0 then  gosub eh.ho


if A=0 and h=0 then
  m=atn(tan(d)/cos(Ho))
  A=atn(tan(Ho)*cos(m)/sin(o-m)): locate 11,25:call gra(A*g):print gr;mi;se
  h=pi/2-atn(tan(o-m)/cos(A))
  locate 12,35:call gra(h*g):print gr;mi;se
end if


end


'--------------------------------------------
sub cuadrante(y,z)
  shared pi
  if y>0 and z<pi then y=y
  if y>0 and z>pi then y=y+pi
  if y<0 and z<pi then y=y+pi
  if y<0 and z>pi then y=y+2*pi
end sub
'-------------


eh.ho:
  m=atn(tan((pi/2)-h)*cos(A))
  Ho=atn(tan(A)*sin(m)/cos(o-m))
  call cuadrante(Ho,A)
  locate 14,35:call gra(Ho*g):print gr;mi;se
  d=atn(tan(o-m)*cos(Ho))
  locate 15,35:call gra(d*g) :print gr;mi;se
return
'----------------


sub s
while inkey$="":wend
end sub
'----------------
sub co(h$,h)
  shared r
  sig=1
  if left$(h$,1)="-" then sig=-1:h$=right$(h$,9)
  h=val(left$(h$,3))+(val(mid$(h$,5,2)))/60+(val(right$(h$,2)))/3600
  h=sig*r*h
  if sig=-1 then h$="-"+h$
end sub
'-----------------
sub gra(g1)
  shared gr,mi,se
  sig=1:if g1<0 then sig=-1
  gr=int(abs(g1))
  m1=60*(abs(g1)-gr):mi=int(m1)
  s1=60*(m1-mi):se=cint(s1)
  gr=sig*gr

2011/05/19

AÑOS BISIESTOS


Los años bisiestos son los que el mes de Febrero tiene 29 días en lugar de 28. Los últimos años bisiestos son los que indican abajo con una letra b delante:

  1911 b.1912   1913   1914   1915 
b.1916   1917   1918   1919 b.1920 
  1921   1922   1923 b.1924   1925 
  1926   1927 b.1928   1929   1930 
  1931 b.1932   1933   1934   1935 
b.1936   1937   1938   1939 b.1940 
  1941   1942   1943 b.1944   1945 
  1946   1947 b.1948   1949   1950 
  1951 b.1952   1953   1954   1955 
b.1956   1957   1958   1959 b.1960 
  1961   1962   1963 b.1964   1965 
  1966   1967 b.1968   1969   1970 
  1971 b.1972   1973   1974   1975 
b.1976   1977   1978   1979 b.1980 
  1981   1982   1983 b.1984   1985 
  1986   1987 b.1988   1989   1990 
  1991 b.1992   1993   1994   1995 
b.1996   1997   1998   1999 b.2000 
  2001   2002   2003 b.2004   2005 
  2006   2007 b.2008   2009   2010 
  2011 b.2012   2013   2014   2015 
b.2016   2017   2018   2019 b.2020 

Si deseas calcular si un año es  bisiesto se comprueba si las dos ultimas cifras son divisibles por 4 o son 00 y es divisible por 400, por ejemplo: 1988  tomaremos las 2 ultimas cifras y vemos que 88 es divisible por 4 pues se puede dividir por 4 y no deja resto: 88 / 4 = 22, así que 1988 es un año bisiesto.
El año 1900 no es bisiesto pues aunque acaba en 2 ceros no es divisible por 400, pero el año 2000 si es bisiesto pues es divisible por 400. ( 2000 / 400 = 5 y no deja resto alguno).