package astro import ( "b612.me/astro/star" "b612.me/astro/tools" "fmt" "time" ) func BasicStar(date time.Time, name string, format uint8) { fmt.Printf("时间: %s\n", date.Format("2006-01-02 15:04:05")) s, err := star.StarDataByName(name) if err != nil { fmt.Println(err) return } ra, dec := s.RaDecByDate(date) fmt.Printf("%s %s 星等:%.2f\n", s.ChineseName, s.Name, s.Mag) fmt.Println("------------------------") switch format { case 0: fmt.Printf("视赤经: %f\n", ra) fmt.Printf("视赤纬: %f\n", dec) case 1: fra := tools.Format(ra/15, 1) fdec := tools.Format(dec, 0) fmt.Printf("视赤经: %s\n", fra) fmt.Printf("视赤纬: %s\n", fdec) } cst := star.Constellation(ra, dec, date) fmt.Printf("星座: %s\n", cst) } func StarDetail(date time.Time, name string, lon, lat, height float64, format uint8) { s, err := star.StarDataByName(name) if err != nil { fmt.Println(err) return } ra, dec := s.RaDecByDate(date) alt := star.Zenith(date, ra, dec, lon, lat) ta := star.HourAngle(date, ra, lon) zt := star.CulminationTime(date, ra, lon) az := star.Azimuth(date, ra, dec, lon, lat) var rise, set time.Time var duration time.Duration for { nk := date.Add(duration) rise, err = star.RiseTime(nk, ra, dec, lon, lat, height, true) if err != nil { fmt.Println(err) } if alt > 0 && rise.After(nk) { rise, err = star.RiseTime(nk.Add(time.Hour*-24), ra, dec, lon, lat, height, true) if err != nil { fmt.Println(err) } } else if alt < 0 && rise.Before(nk) { rise, err = star.RiseTime(nk.Add(time.Hour*24), ra, dec, lon, lat, height, true) if err != nil { fmt.Println(err) } } set, err = star.DownTime(nk, ra, dec, lon, lat, height, true) if err != nil { fmt.Println(err) } if set.Before(rise) { set, err = star.DownTime(nk.Add(time.Hour*24), ra, dec, lon, lat, height, true) if err != nil { fmt.Println(err) } } if set.Before(date) { duration += time.Hour * 24 continue } if zt.Before(rise) { zt = star.CulminationTime(nk.Add(time.Hour*24), ra, lon) } break } fmt.Printf("升起: %s\n", rise.Format("2006-01-02 15:04:05")) fmt.Printf("中天: %s\n", zt.Format("2006-01-02 15:04:05")) fmt.Printf("落下: %s\n", set.Format("2006-01-02 15:04:05")) switch format { case 0: fmt.Printf("方位角: %f\n", az) fmt.Printf("高度角: %f\n", alt) fmt.Printf("时角: %f\n", ta) case 1: faz := tools.Format(az, 0) falt := tools.Format(alt, 0) fta := tools.Format(ta/15, 1) fmt.Printf("方位角: %s\n", faz) fmt.Printf("高度角: %s\n", falt) fmt.Printf("时角: %s\n", fta) } }