📜 Verità Perdute (www.veritaperdute.it)

📄 Eclittica1-code.txt
<!DOCTYPE html> <html lang="it"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Eclittica Sole e Luna</title> <style> *{margin:0;padding:0;box-sizing:border-box} body{background:#0f1923;color:#d0d8e0;font-family:'Segoe UI',Arial,sans-serif;font-size:15px;padding:10px;max-width:500px;margin:0 auto} h1{text-align:center;color:#ffd700;font-size:1.2em;margin:8px 0;letter-spacing:1px} .row{display:flex;gap:6px;margin:5px 0;flex-wrap:wrap} .row>div{flex:1;min-width:70px} .row label{display:block;font-size:0.72em;color:#7a8a9a;margin-bottom:2px} .row input{width:100%;padding:10px 4px;background:#162233;border:1px solid #1e3a5f;color:#fff;border-radius:6px;font-size:1em;text-align:center} .brow{display:flex;gap:8px;margin:6px 0} .bt{flex:1;padding:14px 4px;border:none;border-radius:8px;font-size:1em;font-weight:bold;cursor:pointer;color:#fff;-webkit-tap-highlight-color:transparent;min-height:48px;touch-action:manipulation} .bt:active{filter:brightness(1.5);transform:scale(0.96)} .bt-c{background:#1a5276;color:#ffd700;font-size:1.1em} .bt-n{background:#1e3a5f;color:#aac} .bt-step{background:#1e3450;color:#c0d8f0;font-size:1.05em;min-height:52px;border:1px solid #2a4a6a} .bt-step:active{background:#2a5a8a} canvas{width:100%;border-radius:8px;display:block;margin:4px 0;touch-action:none} .cvlabel{text-align:center;font-size:0.78em;color:#778899;margin:10px 0 2px;letter-spacing:0.5px} #calInfo{text-align:center;font-size:0.76em;color:#5a7a8a;margin:4px 0} .pn{background:#131d2a;border-radius:8px;padding:10px;margin:6px 0;border:1px solid #1a2a3a} .pn h2{color:#ffd700;font-size:0.92em;margin-bottom:6px;padding-bottom:4px;border-bottom:1px solid #1a2a3a} .dr{display:flex;justify-content:space-between;padding:3px 0;font-size:0.88em} .dr .l{color:#6a7a8a}.dr .v{color:#e0e8f0;font-weight:600} .eb{background:#131d2a;border-radius:8px;padding:10px;margin:6px 0;border-left:4px solid #333} .eb.r{border-left-color:#e74c3c;background:#1a1215} .eb.y{border-left-color:#f0ad1e;background:#1a1915} .eb.g{border-left-color:#27ae60} .eb h2{color:#ffd700;font-size:0.92em;margin-bottom:4px} .eb p{font-size:0.88em;line-height:1.45} .note{text-align:center;font-size:0.7em;color:#445566;margin:10px 0 4px;line-height:1.3} .seplabel{text-align:center;font-size:0.72em;color:#556677;margin:2px 0 0} </style> </head> <body> <h1>☀️ Eclittica Sole — Luna 🌙</h1> <div class="row"> <div><label>Lat °N</label><input id="lat" type="number" step="0.01" value="43.77"></div> <div><label>Lon °E</label><input id="lon" type="number" step="0.01" value="11.25"></div> </div> <div class="row"> <div><label>Anno</label><input id="yr" type="number" value="2025"></div> <div><label>Mese</label><input id="mo" type="number" min="1" max="12" value="1"></div> <div><label>Giorno</label><input id="dy" type="number" min="1" max="31" value="1"></div> <div><label>Ora UTC</label><input id="hr" type="number" min="0" max="23" value="12"></div> </div> <div id="calInfo"></div> <div class="brow"> <button class="bt bt-n" onclick="setNow()">📍 Adesso</button> <button class="bt bt-c" onclick="calc()">⚙️ CALCOLA</button> </div> <p class="seplabel">— indietro —</p> <div class="brow"> <button class="bt bt-step" onclick="step(-1)">◀ 1g</button> <button class="bt bt-step" onclick="step(-7)">◀ 7g</button> <button class="bt bt-step" onclick="step(-30)">◀ 30g</button> </div> <p class="seplabel">— avanti —</p> <div class="brow"> <button class="bt bt-step" onclick="step(1)">1g ▶</button> <button class="bt bt-step" onclick="step(7)">7g ▶</button> <button class="bt bt-step" onclick="step(30)">30g ▶</button> </div> <p class="cvlabel">🔭 VISTA POLARE — dal polo nord eclittico</p> <canvas id="cv"></canvas> <p class="cvlabel">📐 VISTA LATERALE — profilo eclittica (latitudine Luna)</p> <canvas id="cv2"></canvas> <div class="pn"> <h2>☀️ Sole</h2> <div class="dr"><span class="l">Long. eclittica</span><span class="v" id="sL">—</span></div> <div class="dr"><span class="l">Altezza sull'orizzonte</span><span class="v" id="sA">—</span></div> <div class="dr"><span class="l">Azimut</span><span class="v" id="sZ">—</span></div> <div class="dr"><span class="l">Declinazione</span><span class="v" id="sD">—</span></div> <div class="dr"><span class="l">Pannello ottimale</span><span class="v" id="sP">—</span></div> </div> <div class="pn"> <h2>🌙 Luna</h2> <div class="dr"><span class="l">Long. eclittica</span><span class="v" id="mL">—</span></div> <div class="dr"><span class="l">Lat. eclittica</span><span class="v" id="mB">—</span></div> <div class="dr"><span class="l">Elongazione dal Sole</span><span class="v" id="mE">—</span></div> <div class="dr"><span class="l">Fase</span><span class="v" id="mF">—</span></div> <div class="dr"><span class="l">Illuminazione</span><span class="v" id="mI">—</span></div> </div> <div class="pn"> <h2>☊ Nodi lunari</h2> <div class="dr"><span class="l">Nodo ascendente ☊</span><span class="v" id="nA">—</span></div> <div class="dr"><span class="l">Nodo discendente ☋</span><span class="v" id="nD">—</span></div> <div class="dr"><span class="l">Dist. Luna — nodo vicino</span><span class="v" id="nX">—</span></div> </div> <div class="eb" id="eB"> <h2>🔭 Probabilità eclisse</h2> <p id="eT">Premi CALCOLA</p> </div> <p class="note">Algoritmi Meeus semplificati — Sole ±0.01°, Luna ±1-2°<br> Calendario giuliano automatico prima del 15/10/1582<br> Per date a.e.v.: 607 a.e.v. = anno −606<br> Zona rossa nella vista laterale = fascia eclisse (±1.5° lat, ±18° lon dal nodo)</p> <script> var D2R=Math.PI/180; function nr(d){d%=360;return d<0?d+360:d} function sn(d){return Math.sin(d*D2R)} function cs(d){return Math.cos(d*D2R)} function asn(x){return Math.asin(Math.max(-1,Math.min(1,x)))/D2R} function at2(y,x){return Math.atan2(y,x)/D2R} /* Julian Day — giuliano/gregoriano automatico */ function jd(y0,m0,d,h){ var y=y0,m=m0; if(m<=2){y--;m+=12} var A=Math.floor(y/100),B=0; /* Gregoriano solo dal 15 ottobre 1582 */ if(y0>1582||(y0==1582&&m0>10)||(y0==1582&&m0==10&&d>=15)){ B=2-A+Math.floor(A/4); } return Math.floor(365.25*(y+4716))+Math.floor(30.6001*(m+1))+d+h/24+B-1524.5; } /* JD → calendario — giuliano/gregoriano automatico */ function jd2cal(J){ var z=Math.floor(J+0.5),f=J+0.5-z,A; if(z<2299161)A=z; else{var a=Math.floor((z-1867216.25)/36524.25);A=z+1+a-Math.floor(a/4)} var B=A+1524,C=Math.floor((B-122.1)/365.25),D=Math.floor(365.25*C),E=Math.floor((B-D)/30.6001); var day=B-D-Math.floor(30.6001*E)+f; var mon=E<14?E-1:E-13; var yr=mon>2?C-4716:C-4715; return{y:yr,m:mon,d:Math.floor(day)}; } function getSun(J){ var T=(J-2451545)/36525, L0=nr(280.46646+36000.76983*T+0.0003032*T*T), M=nr(357.52911+35999.05029*T-0.0001537*T*T), C=(1.914602-0.004817*T-0.000014*T*T)*sn(M)+(0.019993-0.000101*T)*sn(2*M)+0.000289*sn(3*M), sl=nr(L0+C), om=nr(125.04-1934.136*T), lam=nr(sl-0.00569-0.00478*sn(om)), eps=23.4393-0.013*T, dec=asn(sn(eps)*sn(lam)), ra=nr(at2(cs(eps)*sn(lam),cs(lam))); return{lon:lam,dec:dec,ra:ra}; } function getMoon(J){ var T=(J-2451545)/36525, Lp=nr(218.3165+481267.8813*T), D=nr(297.8502+445267.1115*T), M=nr(357.5291+35999.0503*T), Mp=nr(134.9634+477198.8676*T), F=nr(93.272+483202.0175*T), om=nr(125.04452-1934.13626*T); var dl=6.289*sn(Mp)+1.274*sn(2*D-Mp)+0.658*sn(2*D)+0.214*sn(2*Mp) -0.186*sn(M)-0.114*sn(2*F)+0.059*sn(2*D-2*Mp)+0.057*sn(2*D-M-Mp) +0.053*sn(2*D+Mp)+0.046*sn(2*D-M)-0.041*sn(M-Mp)-0.035*sn(D) -0.031*sn(M+Mp)+0.015*sn(2*D-2*F)+0.012*sn(Mp-2*F); var db=5.128*sn(F)+0.281*sn(Mp+F)+0.278*sn(Mp-F)+0.173*sn(2*D-F) +0.055*sn(2*D-Mp+F)+0.046*sn(2*D-Mp-F)+0.033*sn(2*D+F)+0.017*sn(2*Mp+F); return{lon:nr(Lp+dl),lat:db,asc:om,desc:nr(om+180)}; } function getAltAz(ra,dec,lat,lon,J){ var T=(J-2451545)/36525, GST=nr(280.46061837+360.98564736629*(J-2451545)+0.000387933*T*T), LST=nr(GST+lon),HA=nr(LST-ra); var alt=asn(sn(lat)*sn(dec)+cs(lat)*cs(dec)*cs(HA)); var az=nr(at2(-sn(HA)*cs(dec),sn(dec)*cs(lat)-cs(dec)*sn(lat)*cs(HA))); return{alt:alt,az:az}; } var ZS=['♈','♉','♊','♋','♌','♍','♎','♏','♐','♑','♒','♓']; var ZN=['Ari','Tau','Gem','Cnc','Leo','Vir','Lib','Sco','Sgr','Cap','Aqr','Psc']; function zod(l){var i=Math.floor(nr(l)/30)%12;return ZS[i]+' '+(nr(l)%30).toFixed(1)+'° '+ZN[i]} function phIco(e){ if(e<22.5)return'🌑';if(e<67.5)return'🌒';if(e<112.5)return'🌓'; if(e<157.5)return'🌔';if(e<202.5)return'🌕';if(e<247.5)return'🌖'; if(e<292.5)return'🌗';if(e<337.5)return'🌘';return'🌑'; } function phNm(e){ if(e<22.5)return'Nuova';if(e<67.5)return'Cresc.';if(e<112.5)return'Primo quarto'; if(e<157.5)return'Gibb. cresc.';if(e<202.5)return'Piena';if(e<247.5)return'Gibb. cal.'; if(e<292.5)return'Ult. quarto';if(e<337.5)return'Calante';return'Nuova'; } function azLabel(a){ var dirs=['N','NNE','NE','ENE','E','ESE','SE','SSE','S','SSO','SO','OSO','O','ONO','NO','NNO']; return dirs[Math.round(a/22.5)%16]; } function setNow(){ var n=new Date(); document.getElementById('yr').value=n.getFullYear(); document.getElementById('mo').value=n.getMonth()+1; document.getElementById('dy').value=n.getDate(); document.getElementById('hr').value=n.getUTCHours(); calc(); } function step(days){ var y=+document.getElementById('yr').value, m=+document.getElementById('mo').value, d=+document.getElementById('dy').value, h=+document.getElementById('hr').value; var J=jd(y,m,d,h)+days; var c=jd2cal(J); document.getElementById('yr').value=c.y; document.getElementById('mo').value=c.m; document.getElementById('dy').value=c.d; calc(); } /* ===== VISTA POLARE (dall'alto) ===== */ function drawPolar(s,m){ var cv=document.getElementById('cv'),dpr=window.devicePixelRatio||1; var w=cv.parentElement.clientWidth; cv.style.width=w+'px';cv.style.height=w+'px'; cv.width=w*dpr;cv.height=w*dpr; var c=cv.getContext('2d');c.scale(dpr,dpr); var cx=w/2,cy=w/2,R=w*0.35; c.fillStyle='#080e15';c.fillRect(0,0,w,w); for(var i=0;i<80;i++){ var sx2=(i*137.508+23.7)%w,sy2=(i*97.31+41.3)%w; c.fillStyle='rgba(180,200,230,'+(0.15+((i*73)%100)/200)+')'; c.beginPath();c.arc(sx2,sy2,0.4+((i*31)%10)/15,0,6.283);c.fill(); } c.strokeStyle='rgba(40,70,110,0.35)';c.lineWidth=10; c.beginPath();c.arc(cx,cy,R,0,6.283);c.stroke(); c.strokeStyle='#2a4060';c.lineWidth=2.5; c.beginPath();c.arc(cx,cy,R,0,6.283);c.stroke(); function l2xy(lon,off){ var a=-lon*D2R; return{x:cx+(R+(off||0))*Math.cos(a),y:cy+(R+(off||0))*Math.sin(a)}; } var fs=w>350?15:w>300?13:11; c.textAlign='center';c.textBaseline='middle'; for(var i=0;i<12;i++){ var a0=-i*30*D2R; c.strokeStyle='#1e3048';c.lineWidth=1; c.beginPath(); c.moveTo(cx+(R-7)*Math.cos(a0),cy+(R-7)*Math.sin(a0)); c.lineTo(cx+(R+7)*Math.cos(a0),cy+(R+7)*Math.sin(a0)); c.stroke(); var am=-(i*30+15)*D2R,lr=R+(w>350?24:19); c.fillStyle='#4a6878';c.font=fs+'px serif'; c.fillText(ZS[i],cx+lr*Math.cos(am),cy+lr*Math.sin(am)); } var nf=w>350?18:15;c.font=nf+'px serif'; var ap=l2xy(m.asc);c.fillStyle='#38b0d0';c.fillText('☊',ap.x,ap.y); var dp=l2xy(m.desc);c.fillStyle='#d06838';c.fillText('☋',dp.x,dp.y); c.strokeStyle='rgba(80,150,190,0.18)';c.setLineDash([3,4]);c.lineWidth=1; c.beginPath();c.moveTo(ap.x,ap.y);c.lineTo(dp.x,dp.y);c.stroke();c.setLineDash([]); c.font=(fs-3)+'px sans-serif'; c.fillStyle='#38b0d0';var anl=l2xy(m.asc,-20);c.fillText('☊'+m.asc.toFixed(0)+'°',anl.x,anl.y); c.fillStyle='#d06838';var dnl=l2xy(m.desc,-20);c.fillText('☋'+m.desc.toFixed(0)+'°',dnl.x,dnl.y); c.strokeStyle='rgba(160,180,210,0.2)';c.lineWidth=1.5;c.setLineDash([4,4]); c.beginPath(); for(var deg=0;deg<360;deg+=2){ var distFromAsc=nr(deg-m.asc); var moffD=-5.14*sn(distFromAsc)*(R*0.055); var pt=l2xy(deg,moffD); if(deg===0)c.moveTo(pt.x,pt.y);else c.lineTo(pt.x,pt.y); } c.closePath();c.stroke();c.setLineDash([]); var sp=l2xy(s.lon); var sg=c.createRadialGradient(sp.x,sp.y,4,sp.x,sp.y,28); sg.addColorStop(0,'rgba(255,220,40,0.8)');sg.addColorStop(0.5,'rgba(255,180,20,0.2)');sg.addColorStop(1,'rgba(255,180,20,0)'); c.fillStyle=sg;c.beginPath();c.arc(sp.x,sp.y,28,0,6.283);c.fill(); c.strokeStyle='rgba(255,210,50,0.3)';c.lineWidth=1.5; for(var i=0;i<8;i++){ var ra2=i*Math.PI/4; c.beginPath();c.moveTo(sp.x+14*Math.cos(ra2),sp.y+14*Math.sin(ra2)); c.lineTo(sp.x+22*Math.cos(ra2),sp.y+22*Math.sin(ra2));c.stroke(); } c.fillStyle='#ffdd33';c.beginPath();c.arc(sp.x,sp.y,12,0,6.283);c.fill(); c.fillStyle='#b09000';c.font='bold 11px sans-serif';c.fillText('☉',sp.x,sp.y+1); var moff=-m.lat*(R*0.055); var mp=l2xy(m.lon,moff); if(Math.abs(m.lat)>0.3){ var mp0=l2xy(m.lon,0); c.strokeStyle='rgba(160,190,220,0.35)';c.lineWidth=1;c.setLineDash([2,2]); c.beginPath();c.moveTo(mp0.x,mp0.y);c.lineTo(mp.x,mp.y);c.stroke();c.setLineDash([]); } var mg=c.createRadialGradient(mp.x,mp.y,3,mp.x,mp.y,18); mg.addColorStop(0,'rgba(200,215,245,0.55)');mg.addColorStop(1,'rgba(200,215,245,0)'); c.fillStyle=mg;c.beginPath();c.arc(mp.x,mp.y,18,0,6.283);c.fill(); c.fillStyle='#c0d0e0';c.beginPath();c.arc(mp.x,mp.y,10,0,6.283);c.fill(); var elong=nr(m.lon-s.lon); var phAngle=(elong+180)*D2R; c.fillStyle='rgba(20,30,50,0.45)';c.beginPath(); c.arc(mp.x,mp.y,10,phAngle-Math.PI/2,phAngle+Math.PI/2);c.fill(); c.fillStyle='#7788aa';c.font='9px sans-serif';c.fillText('☽',mp.x,mp.y+1); c.strokeStyle='rgba(255,200,80,0.25)';c.lineWidth=3;c.setLineDash([4,3]); var ea1=-s.lon*D2R,ea2=-m.lon*D2R; c.beginPath(); if(elong<=180){c.arc(cx,cy,R*0.55,ea1,ea2,true)} else{c.arc(cx,cy,R*0.55,ea1,ea2,false)} c.stroke();c.setLineDash([]); var lf=w>350?13:w>300?11:10; c.font='bold '+lf+'px sans-serif';c.textAlign='center'; c.fillStyle='#ffd633';c.fillText('☀ '+s.lon.toFixed(1)+'°',sp.x,sp.y-20); c.fillStyle='#a0b8d0'; var moonLabel='☽ '+m.lon.toFixed(1)+'°'; if(Math.abs(m.lat)>0.3)moonLabel+=' (β'+(m.lat>0?'+':'')+m.lat.toFixed(1)+'°)'; c.fillText(moonLabel,mp.x,mp.y+22); var emid=-(s.lon+elong/2)*D2R; var elx=cx+R*0.45*Math.cos(emid),ely=cy+R*0.45*Math.sin(emid); c.fillStyle='rgba(255,200,80,0.6)';c.font=(lf-1)+'px sans-serif'; c.fillText(elong.toFixed(1)+'°',elx,ely); var vp=l2xy(0,R*0.22); c.fillStyle='#558855';c.font=(lf-1)+'px sans-serif'; c.fillText('γ 0°',vp.x,vp.y); c.fillStyle='#2a3a4a';c.font=(lf-3)+'px sans-serif';c.textAlign='left'; c.fillText('Polo nord eclittico — long. crescente ⟲',8,w-8); } /* ===== VISTA LATERALE (edgewise) ===== */ function drawEdge(s,m){ var cv=document.getElementById('cv2'),dpr=window.devicePixelRatio||1; var w=cv.parentElement.clientWidth; var h=Math.round(Math.min(240,w*0.55)); cv.style.width=w+'px';cv.style.height=h+'px'; cv.width=w*dpr;cv.height=h*dpr; var c=cv.getContext('2d');c.scale(dpr,dpr); var P={l:30,r:8,t:16,b:24}; var pw=w-P.l-P.r,ph=h-P.t-P.b; var midY=P.t+ph/2; var LR=8; function lon2x(lon){return P.l+(nr(lon)/360)*pw} function lat2y(lat){return midY-(lat/LR)*(ph/2)} c.fillStyle='#080e15';c.fillRect(0,0,w,h); /* zone eclisse: ±1.5° lat, ±18° lon da ogni nodo */ function drawZone(nodeLon){ var x1=lon2x(nodeLon-18),x2=lon2x(nodeLon+18); var yt=lat2y(1.5),yb=lat2y(-1.5); c.fillStyle='rgba(180,40,40,0.12)'; if(x1>x2){ c.fillRect(x1,yt,P.l+pw-x1,yb-yt); c.fillRect(P.l,yt,x2-P.l,yb-yt); }else{ c.fillRect(x1,yt,x2-x1,yb-yt); } } drawZone(m.asc); drawZone(m.desc); /* griglia latitudine */ c.textAlign='right';c.textBaseline='middle'; c.font='9px sans-serif'; for(var lat=-6;lat<=6;lat+=2){ var yy=lat2y(lat); if(lat!==0){ c.strokeStyle='rgba(40,60,80,0.3)';c.lineWidth=0.5;c.setLineDash([2,3]); c.beginPath();c.moveTo(P.l,yy);c.lineTo(P.l+pw,yy);c.stroke();c.setLineDash([]); } c.fillStyle='#445566'; c.fillText((lat>0?'+':'')+lat+'°',P.l-4,yy); } /* eclittica (lat=0) */ c.strokeStyle='#2a5070';c.lineWidth=2; c.beginPath();c.moveTo(P.l,midY);c.lineTo(P.l+pw,midY);c.stroke(); c.fillStyle='#334455';c.textAlign='right';c.font='8px sans-serif';c.textBaseline='bottom'; c.fillText('eclittica',P.l+pw,midY-4); /* divisioni zodiacali */ c.textAlign='center';c.textBaseline='top'; var zf=w>380?11:w>320?10:9; c.font=zf+'px serif'; for(var i=0;i<12;i++){ var xd=lon2x(i*30); c.strokeStyle='rgba(40,60,80,0.25)';c.lineWidth=0.5; c.beginPath();c.moveTo(xd,P.t);c.lineTo(xd,P.t+ph);c.stroke(); var xm=lon2x(i*30+15); c.fillStyle='#3a5565'; c.fillText(ZS[i],xm,h-P.b+6); } /* sinusoide orbita lunare */ c.strokeStyle='rgba(150,175,210,0.4)';c.lineWidth=1.5;c.setLineDash([4,4]); c.beginPath(); for(var deg=0;deg<=360;deg++){ var distFromAsc=nr(deg-m.asc); var latAtDeg=5.14*sn(distFromAsc); var xx=P.l+(deg/360)*pw; var yy=lat2y(latAtDeg); if(deg===0)c.moveTo(xx,yy);else c.lineTo(xx,yy); } c.stroke();c.setLineDash([]); /* nodi */ var nf2=w>350?15:13;c.font=nf2+'px serif';c.textAlign='center';c.textBaseline='middle'; c.fillStyle='#38b0d0';c.fillText('☊',lon2x(m.asc),midY); c.fillStyle='#d06838';c.fillText('☋',lon2x(m.desc),midY); c.font='8px sans-serif';c.textBaseline='top'; c.fillStyle='#38b0d0';c.fillText(m.asc.toFixed(0)+'°',lon2x(m.asc),midY+10); c.fillStyle='#d06838';c.fillText(m.desc.toFixed(0)+'°',lon2x(m.desc),midY+10); /* Sole sull'eclittica */ var sx=lon2x(s.lon); var sg=c.createRadialGradient(sx,midY,3,sx,midY,16); sg.addColorStop(0,'rgba(255,220,40,0.9)');sg.addColorStop(1,'rgba(255,180,20,0)'); c.fillStyle=sg;c.beginPath();c.arc(sx,midY,16,0,6.283);c.fill(); c.fillStyle='#ffdd33';c.beginPath();c.arc(sx,midY,7,0,6.283);c.fill(); c.fillStyle='#b09000';c.font='bold 8px sans-serif';c.textAlign='center';c.textBaseline='middle'; c.fillText('☉',sx,midY+1); c.fillStyle='#ffd633';c.font='9px sans-serif';c.textBaseline='bottom'; c.fillText('☀'+s.lon.toFixed(0)+'°',sx,midY-10); /* Luna alla sua latitudine */ var mx=lon2x(m.lon),my=lat2y(m.lat); if(Math.abs(m.lat)>0.15){ c.strokeStyle='rgba(160,190,230,0.5)';c.lineWidth=1;c.setLineDash([2,2]); c.beginPath();c.moveTo(mx,midY);c.lineTo(mx,my);c.stroke();c.setLineDash([]); } c.fillStyle='#c0d0e0';c.beginPath();c.arc(mx,my,6,0,6.283);c.fill(); c.fillStyle='#556677';c.font='7px sans-serif';c.textAlign='center';c.textBaseline='middle'; c.fillText('☽',mx,my+1); c.fillStyle='#a0b8d0';c.font='bold 9px sans-serif'; c.textBaseline=m.lat>=0?'top':'bottom'; var mly=m.lat>=0?my-11:my+11; c.fillText('☽ β='+(m.lat>=0?'+':'')+m.lat.toFixed(2)+'°',mx,mly); /* titolo */ c.fillStyle='#445566';c.font='9px sans-serif';c.textAlign='left';c.textBaseline='top'; c.fillText('Profilo eclittica — zone rosse = fascia eclisse',P.l,2); } /* ===== CALCOLO PRINCIPALE ===== */ function calc(){ var lat=+document.getElementById('lat').value||43.77; var lon=+document.getElementById('lon').value||11.25; var y=+document.getElementById('yr').value||2025; var mo=+document.getElementById('mo').value||1; var dy=+document.getElementById('dy').value||1; var hr=+document.getElementById('hr').value||12; var J=jd(y,mo,dy,hr); var isGreg=y>1582||(y==1582&&mo>10)||(y==1582&&mo==10&&dy>=15); document.getElementById('calInfo').textContent=(isGreg?'📅 Gregoriano':'📅 Giuliano')+' — JD '+J.toFixed(1); var s=getSun(J),m=getMoon(J); var sa=getAltAz(s.ra,s.dec,lat,lon,J); var elong=nr(m.lon-s.lon); var illum=(1-cs(elong))/2*100; var dA=Math.abs(nr(m.lon-m.asc+180)-180); var dD=Math.abs(nr(m.lon-m.desc+180)-180); var nDist=Math.min(dA,dD); document.getElementById('sL').textContent=s.lon.toFixed(2)+'° '+zod(s.lon); document.getElementById('sA').textContent=sa.alt.toFixed(1)+'°'+(sa.alt<0?' (sotto orizzonte)':''); document.getElementById('sZ').textContent=sa.az.toFixed(1)+'° '+azLabel(sa.az); document.getElementById('sD').textContent=(s.dec>=0?'+':'')+s.dec.toFixed(2)+'°'; var tilt=Math.max(0,lat-s.dec); document.getElementById('sP').textContent=tilt.toFixed(1)+'° da oriz. → Sud'; document.getElementById('mL').textContent=m.lon.toFixed(2)+'° '+zod(m.lon); document.getElementById('mB').textContent=(m.lat>=0?'+':'')+m.lat.toFixed(2)+'°'; document.getElementById('mE').textContent=elong.toFixed(1)+'°'; document.getElementById('mF').textContent=phIco(elong)+' '+phNm(elong); document.getElementById('mI').textContent=illum.toFixed(1)+'%'; document.getElementById('nA').textContent=m.asc.toFixed(1)+'° '+zod(m.asc); document.getElementById('nD').textContent=m.desc.toFixed(1)+'° '+zod(m.desc); document.getElementById('nX').textContent=nDist.toFixed(1)+'°'+(nDist<18?' ⚡':''); var eb=document.getElementById('eB'),et=document.getElementById('eT'); var nNew=elong<20||elong>340,nFull=elong>160&&elong<200; var nNod=nDist<18,vNod=nDist<10,latLo=Math.abs(m.lat)<1.5; if(nNew&&vNod&&latLo){ eb.className='eb r'; et.innerHTML='⚠️ <b>ECLISSE SOLARE molto probabile!</b><br>Congiunzione (elong. '+elong.toFixed(1)+'°), nodo a '+nDist.toFixed(1)+'°.<br>Lat. lunare '+m.lat.toFixed(2)+'° — nella fascia rossa della vista laterale.'; }else if(nFull&&vNod&&latLo){ eb.className='eb r'; et.innerHTML='⚠️ <b>ECLISSE LUNARE molto probabile!</b><br>Opposizione (elong. '+elong.toFixed(1)+'°), nodo a '+nDist.toFixed(1)+'°.<br>Lat. lunare '+m.lat.toFixed(2)+'° — ombra terrestre sulla Luna.'; }else if(nNew&&vNod){ eb.className='eb r'; et.innerHTML='🔴 <b>Eclisse solare possibile</b><br>Congiunzione e nodo vicino ('+nDist.toFixed(1)+'°), lat. '+m.lat.toFixed(2)+'° — possibilmente parziale.'; }else if(nFull&&vNod){ eb.className='eb r'; et.innerHTML='🔴 <b>Eclisse lunare possibile</b><br>Opposizione e nodo vicino ('+nDist.toFixed(1)+'°), lat. '+m.lat.toFixed(2)+'° — penombrale o parziale.'; }else if((nNew||nFull)&&nNod){ eb.className='eb y'; et.innerHTML='🟡 <b>Prossimità eclisse</b><br>Luna '+(nNew?'quasi nuova':'quasi piena')+' e nodo a '+nDist.toFixed(1)+'°.<br>Lat. '+m.lat.toFixed(2)+'° — ai limiti.'; }else if(nNod){ eb.className='eb y'; et.innerHTML='🟡 Stagione eclissi attiva (nodo a '+nDist.toFixed(1)+'°), elong. '+elong.toFixed(1)+'° — fase non adatta ora.'; }else{ eb.className='eb g'; et.innerHTML='✅ <b>Nessuna eclisse</b><br>Nodo a '+nDist.toFixed(1)+'°, elong. '+elong.toFixed(1)+'° — lontano da qualsiasi condizione.'; } drawPolar(s,m); drawEdge(s,m); } setNow(); window.addEventListener('load',function(){setTimeout(calc,120)}); window.addEventListener('resize',function(){clearTimeout(window._rt);window._rt=setTimeout(calc,150)}); </script> </body> </html>
← Indietro ⬇ Scarica
® Ricerca indipendente di monseppe2