/ Forside/ Interesser / Videnskab / Fysik / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Fysik
#NavnPoint
pbp_et 5378
svendgive.. 2190
transor 1763
berpox 1458
rubion 1050
3773 930
sipelip 890
vagnr 815
SimonGjer 695
10  CLAN 630
Solopgang & solnedgang
Fra : fredag_d13
Vist : 6077 gange
40 point
Dato : 21-03-04 14:25

Er der nogen som kender en formel der giver tidpunktet for solopgang og solnedgang, hvor
en længdegrad og breddegrad er specificeret?

 
 
Kommentar
Fra : valde.


Dato : 21-03-04 14:59

Kan der opstilles en sådan formel? Greenwich er jo nulpunktet, ækvator må så være det andet punkt, i netop det punkt, hvor de to skærer hinanden, kunne man sagtens opstille en formel - - hvis man havde de evner - - men resten af jorden?
Nogen må jo kunne, man kan til hver en tid aflæse i kalenderen hvornår solen står op i morgen, det har jeg hidtil klaret mig med. Det er spændende at se om nogen kan finde et link der kan fortælle hvordan man udregner solens op og nedgang, hver dag på alle steder af jorden! Så vil jeg selv regne det ud, og slipper for at kigge i kalenderen! mvh. Valde.

Kommentar
Fra : ahtn


Dato : 21-03-04 15:48

hej
nu er jeg jo ikke den store fysiker/matematiker, eller hvad der skal til. men jeg synes jeg så noget der måske kunne bruges på denne side: www.windpower.org
gå i den danske udgave og skriv i søgefunktionen: skyggekast - og derefter klikker du ind på "vejledning til beregning...."
håber du kan bruge det
mvh ahtn

Kommentar
Fra : fredag_d13


Dato : 21-03-04 16:03

http://www.physics.rutgers.edu/~twatts/sunrise/sunrise.html
http://www.merrymeet.com/minow/sunsphere/SunSphereInfo.html#Computing

Jeg har fundet disse to sider, den første var måske lidt for teknisk til mig -
den anden algoritme giver desværre ikke det rigtige resultat :(





Kommentar
Fra : molokyle


Dato : 21-03-04 16:44
Kommentar
Fra : bigdane_dk


Dato : 21-03-04 17:13

Hejsa..

Ja selvfølgelig kan man beregne sol op og nedgang som funktion af længde og breddegrad.

Har du fundet din formel?

Hvis ikke.. vil jeg da gerne grave mig lidt ned i den formel vi bruger i vores udstyr.

Mvh
Bent

Kommentar
Fra : valde.


Dato : 21-03-04 18:03

Helt selvfølgelig er det ikke, hvis det skal gælde,
for hele kloden, er der mange andre funktioner, der skal indgå end længde og breddegrad.
mvh. Valde.

Kommentar
Fra : fredag_d13


Dato : 21-03-04 18:06

Til Bent_H, Jeg har endnu ikke fundet en passende formel - som vil meget gene se det kode du evt. har!

Kommentar
Fra : fredag_d13


Dato : 21-03-04 18:39

jeg har prøvet at implementere algoritmen på
http://www.merrymeet.com/minow/sunsphere/SunSphereInfo.html#Computing
med følgende kode (i Java), men resultatet bliver ikke helt som forventet, er der nogen som kan se hvad jeg evt. har gjort galt?

import java.util.*;

public class text {
   public static void main(String[] args) {
      double længdegrad = 10.27, breddegrad = 55.28;
      System.out.println("længdegrad = "+længdegrad);
      System.out.println("breddegrad = "+breddegrad);
      System.out.println("Beregning af solopgang: "+solopgang(længdegrad,breddegrad));
   }   
      
   public static double solopgang(double laengde, double bredde) {
      double UT = 0, UT0 = 12;
      double T,L,G,M,e,E,GHA,DEC,HA;
      double sinHorizon = sin(laengde);
      double sinLatitude = sin(bredde);
      double cosHorizon = cos(laengde);
      double cosLatitude = cos(bredde);
      double riseSet = 1;
      
      //JD = dage siden midnat November 17, 1858
      GregorianCalendar old = new GregorianCalendar(1858, Calendar.NOVEMBER, 17, 0, 0, 0);
      GregorianCalendar now = new GregorianCalendar();
      double JD = 0;
      while(old.before(now)) {
         old.add(Calendar.DATE, 1);
         JD++;
      }
      System.out.println("JD dage = "+JD);

      while(Math.abs(UT-UT0)>0.0008) {
         T = (JD + UT/24 - 2451545.0)/36525.0;
         L = 280.460 + 36000.770 * T;
         G = 357.528 + 35999.050 * T;
         M = L + 1.915 * sin(G) + 0.02 * sin(2*G);
         e = 23.4393 - 0.013 *T;
         E = -1.915*sin(G)
            -0.020*sin(2*G)
            +2.455*sin(2*M)
            -0.053*sin(4*M);
         GHA = 15*UT-180+E;
         DEC = asin(sin(e)*sin(M));
         HA = acos((sinHorizon - (sinLatitude * sin(DEC)) / (cosLatitude * cos(DEC))));
         HA = acos((sinHorizon - (sinLatitude * sin(DEC)) / (cosLatitude * cos(DEC))));
         
         UT0 = UT;
         UT = UT0 - (GHA + laengde + (riseSet * HA)) / 15.0;
         
      }
      
      return UT;      
   }
   
   private static double rad(double input) { return Math.toRadians(input);}
   private static double deg(double input) { return Math.toDegrees(input);}
   private static double cos(double degree) { return Math.cos(rad(degree)); }
   private static double sin(double degree) { return Math.sin(rad(degree)); }
   private static double acos(double num) { return deg(Math.acos(num)); }
   private static double asin(double num) { return deg(Math.asin(num)); }
}

Kommentar
Fra : fredag_d13


Dato : 21-03-04 19:55

Jeg fandt et php script som lavede det.
Her er en Java implementation hvis nogen ønsker at bruge det (skal gemmes i en fil ved navn Sol.java):

import java.util.*;

public class Sol {
   public static void main(String[] args) {
      double læng = 10.27, bred = 55.28; double GMT = 1;
      System.out.println("længdegrad = "+læng);
      System.out.println("breddegrad = "+bred);
      System.out.println("GMT = "+GMT);
      try {
         System.out.println("Solopgang = "+Sol.opgang(new GregorianCalendar(), bred, læng, GMT));
         System.out.println("Solnedgang = "+Sol.nedgang(new GregorianCalendar(), bred, læng, GMT));
      } catch (Sol.SolException sse) {
         System.out.println(sse);
      }
   }
   
   public static Calendar opgang(Calendar dag, double bredde, double laengde, double GMToffset) throws SolException {
      double værdi = calcSunsetORrise(dag, bredde, laengde, false, GMToffset);
      int hours = (int) floor(værdi);
      int minute = (int) floor(60*(værdi%1));
      Calendar ret = (Calendar) dag.clone();
      ret.set(Calendar.HOUR_OF_DAY, hours);
      ret.set(Calendar.MINUTE, minute);
      ret.set(Calendar.SECOND, 0);
      ret.set(Calendar.MILLISECOND, 0);
      return ret;
   }      
      
   public static Calendar nedgang(Calendar dag, double bredde, double laengde, double GMToffset) throws SolException {
      double værdi = calcSunsetORrise(dag, bredde, laengde, true, GMToffset);
      int hours = (int) floor(værdi);
      int minute = (int) floor(60*(værdi%1));
      Calendar ret = (Calendar) dag.clone();
      ret.set(Calendar.HOUR_OF_DAY, hours);
      ret.set(Calendar.MINUTE, minute);
      ret.set(Calendar.SECOND, 0);
      ret.set(Calendar.MILLISECOND, 0);
      return ret;
   }      
   
   public static class SolException extends Exception {
      public SolException(String name) {
         super(name);
      }
   }
      
   private static double floor(double arg) {
      return arg-arg%1;
   }
   
   private static double rad(double input) { return Math.toRadians(input);}
   private static double deg(double input) { return Math.toDegrees(input);}
   private static double cos(double degree) { return Math.cos(rad(degree)); }
   private static double sin(double degree) { return Math.sin(rad(degree)); }
   private static double tan(double degree) { return Math.tan(rad(degree)); }
   private static double acos(double num) { return deg(Math.acos(num)); }
   private static double asin(double num) { return deg(Math.asin(num)); }
   
   private static double calcSunsetORrise(Calendar date, double lat,
      double lon, boolean sunset, double GMToffset) throws SolException {
      
      double zenith = 90.83;
      int N = date.get(Calendar.DAY_OF_YEAR);
      double lonHour = lon/15;
      double t;
      if(sunset) t=N+((18-lonHour)/24);
      else t=N+((6-lonHour)/24);
         
      double M = (0.9856*t)-3.289;
      double sinM = sin(M);
      double sin2M = sin(2*M);
      double L=M +(1.916*sinM) + (0.02*sin2M) + 282.634;

      if(L>360) L-=360;
      if(L<0)   L+=360;
      
      double tanL = 0.91764 * tan(L);
      double RA = deg(Math.atan(tanL));
      
      if(RA>360) RA-=360;
      if(RA<0) RA+=360;
      
      double LQ = (floor(L/90))*90;
      double RAQ = (floor(RA/90))*90;
      RA = RA + (LQ - RAQ);
      RA /= 15;
      double sinDec = 0.39782 * sin(L);
      double cosDec = cos(asin(sinDec));
      double cosH = (cos(zenith) - (sinDec * sin(lat))) / (cosDec * cos(lat));
      //if cosH > 1 the sun never rises on this date at this location
      //if cosH < -1 the sun never sets on this date at this location
      if(cosH>1) throw new SolException("Solen står ikke op på denne dag, på denne breddegrad");
      if(cosH<-1) throw new SolException("Solen er oppe hele dagen, på denne breddegrad");
      
      
      double H;
      if(sunset) H = acos(cosH);
      else H = 360 - acos(cosH);
      H /= 15;
      
      double T = H + RA - (0.06571 * t) - 6.622;
      double UT = T - lonHour;
      if(UT>24) UT -= 24;
      if(UT<0) UT += 24;
      
      UT=UT+GMToffset;
      if(UT<0) UT+=24;
      
      return UT;
   }
}

Kommentar
Fra : fredag_d13


Dato : 21-03-04 19:57

Hvordan lukker jeg forresten dette spørgsmål?

Accepteret svar
Fra : valde.

Modtaget 40 point
Dato : 21-03-04 20:27

der skulle stå et accepter over komentarerne, så trykker du på det, over det svar du bedst kan lide,
Mvh Valde.

Godkendelse af svar
Fra : fredag_d13


Dato : 21-03-04 21:19

Tak for "svaret" valde..
håber at du kan bruge koden hvis du selv vil lege med solopgang og solnedgang

                        

Kommentar
Fra : valde.


Dato : 21-03-04 21:40

tak for poingene. jeg er bange for jeg ikke får glæde af koden, jeg vil kigge på tekst tv, det er hurtigere: mvh.Valde

Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste