⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 astroinformation.java

📁 GPS Track connects to a GPS and records the path that you travel. Tracks can be uploaded to a web s
💻 JAVA
字号:
// J2ME GPS Track
// Copyright (C) 2006 Dana Peters
// http://www.qcontinuum.org/gpstrack

package org.qcontinuum.gpstrack;

import henson.midp.Float;
import org.qcontinuum.astro.*;

public class AstroInformation implements Runnable {

    private HorizontalPosition mSunPosition = null;
    private HorizontalPosition mMoonPosition = null;
    private Float mMoonPhase = null;
    private EarthPosition mEarthPosition = null;
    private UtcDate mUtcDate = null;
    
    public AstroInformation() {
        new Thread(this).start();
    }

    public HorizontalPosition getSunPosition() {
        return mSunPosition;
    }
    
    public HorizontalPosition getMoonPosition() {
        return mMoonPosition;
    }
    
    public Float getMoonPhase() {
        return mMoonPhase;
    }
    
    public void run() {
        Thread thread = Thread.currentThread();
        try {
            while (true) {
                thread.sleep(mEarthPosition == null ? 5000 : 60000);
                Gps gps = GpsTrack.getGps();
                if (gps != null && gps.getFix()) {
                    EarthPosition earthPosition = gps.getEarthPosition();
                    UtcDate utcDate = gps.getUTCDate();
                    //*** need to recalculate if position too old!
                    if (mEarthPosition == null || !mEarthPosition.getDistance(earthPosition).Less(100000)) {
                        recalculate(earthPosition, utcDate);
                        mEarthPosition = earthPosition;
                        mUtcDate = utcDate;
                    }
                }
            }
        } catch (InterruptedException e) {
        }
    }

    public void recalculate(EarthPosition earthPosition, UtcDate utcDate) {
        Float mjd = utcDate.getMJD();

        EclipticPosition sunEcliptic = Astrometric.sunPosition(mjd);
        EquitorialPosition sunEquitorial = sunEcliptic.toEquitorialPosition();
        mSunPosition = sunEquitorial.toHorizontalPosition(earthPosition, mjd);

        EclipticPosition moonEcliptic = Astrometric.moonPosition(mjd);
        EquitorialPosition moonEquitorial = moonEcliptic.toEquitorialPosition();
        mMoonPosition = moonEquitorial.toHorizontalPosition(earthPosition, mjd);

        Float E = sunEcliptic.getLongitude().Sub(moonEcliptic.getLongitude());
        // moonPhase = (1 + cos(pi - E)) / 2;
        mMoonPhase = Float.cos(Float.PI.Sub(E)).Add(new Float(1)).Div(new Float(2));
    }
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -