[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Orekit Users] orekit and Jython
- To: orekit-users@orekit.org
- Subject: Re: [Orekit Users] orekit and Jython
- From: beowulf zhang <beowulf.zhang@gmail.com>
- Date: Tue, 17 May 2011 21:28:49 +0800
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:in-reply-to:references:date :message-id:subject:from:to:content-type:content-transfer-encoding; bh=4+ueBI3j7mKuVLss8mTkRop45PWq0or0PkeSNGzQf/c=; b=pKNRwBdXNZTZT8PKLOosWm7rF+vAkLfhp9VkbhGPWEvMiuhWLAt1RvDR3Y/GFTxREY XAMqxr7HS2zIKHue1iBLlZzcdVfFMcDr3qCsIZyHHZD4fW4bdKgsfoFZuOK+G6yT0hj2 PwtYmQFynCfcO85opTJVY8XSrzQPTb4Z5SA8o=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=r4xaVPzXdoy5/9z+9N0FRfDTiGWqnRsyKlcVAx71AjFUyJOX+vW6bR1ppviYLz0CdX iM9kxFWaqbTTPRUQmDoVqY733s7igTyuHyCezceNu+/jI/+c2ivm/OvFf7LXc4eZwp6u rlfDGLvh3+JZeusgl4ogzN6mJSrYDGWHenjKk=
- In-reply-to: <FECF5338-38C5-44B9-9206-182300A2CEAC@gmail.com>
- References: <FECF5338-38C5-44B9-9206-182300A2CEAC@gmail.com>
Very good! Thank you...
I konw the m language of Matlab support java programming now, but I
was failure to test the orekit examples. I want to know whether anyone
are interesting testing the orekit examples in Matlab or not.
2011/5/17, Petrus Hyvönen <petrus.hyvonen@gmail.com>:
> Hi all,
>
> I was playing around with the idea of using Python for mission design, and
> found Jython and the orekit library. As new to both Python and Java, I had
> some initial troubles of getting things to work, primary the access to
> orekit-data, what was current dir and javapaths etc. I am now using Eclipse
> with pydev extension, and can add the orekit jars and orekit-data to the
> eclipse project.
>
> As an exercise I took the liberty to translate a few of the orekit examples
> from java to jython, and copy them below as it could be of interest for
> others. I have been exploring scipy before (based on regular python) and it
> contains very good plotting and array routines, which is not available in
> jython. So next step would be to find a suitable java plotting and arrays
> library to be able to represent the results.
>
> Regards
> /Petrus
>
> First, a jython translation of the SlaveMode.java:
> __________________________________________
>
> # -*- coding: utf-8 -*-
> '''
> /* Copyright 2002-2010 CS Communication & Systèmes
> * Licensed to CS Communication & Systèmes (CS) under one or more
> * contributor license agreements. See the NOTICE file distributed with
> * this work for additional information regarding copyright ownership.
> * CS licenses this file to You under the Apache License, Version 2.0
> * (the "License"); you may not use this file except in compliance with
> * the License. You may obtain a copy of the License at
> *
> * http://www.apache.org/licenses/LICENSE-2.0
> *
> * Unless required by applicable law or agreed to in writing, software
> * distributed under the License is distributed on an "AS IS" BASIS,
> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> * See the License for the specific language governing permissions and
> * limitations under the License.
> */
>
> Translated from SlaveMode.java to jython by Petrus Hyvönen 2011-05-04
> '''
>
> # orekit.jar,orekit-data.zip and commons-maths in CLASSPATH through eclipse
> project
> import java, os
>
> from org.orekit.errors import OrekitException
> from org.orekit.frames import Frame
> from org.orekit.frames import FramesFactory
> from org.orekit.orbits import KeplerianOrbit
> from org.orekit.orbits import Orbit
> from org.orekit.propagation import SpacecraftState
> from org.orekit.propagation.analytical import KeplerianPropagator
> from org.orekit.data import DataProvidersManager
> from org.orekit.data import ZipJarCrawler
> from org.orekit.time import AbsoluteDate
> from org.orekit.time import TimeScalesFactory
>
> from math import radians
>
> # Configure Orekit. The file orekit-data.zip must be in current dir
> DM = DataProvidersManager.getInstance()
> crawler=ZipJarCrawler("orekit-data.zip")
> DM.clearProviders()
> DM.addProvider(crawler)
>
> #Initial orbit parameters
> a = 24396159 # semi major axis in meters
> e = 0.72831215 # eccentricity
> i = radians(7.0)# inclination
> omega = radians(180) # perigee argument
> raan = radians(261) #right ascension of ascending node
> lM = 0.0 # mean anomaly
>
> #Inertial frame
> inertialFrame = FramesFactory.getEME2000()
>
> #Initial date in UTC time scale
> utc = TimeScalesFactory.getUTC();
> initialDate = AbsoluteDate(2004, 01, 01, 23, 30, 00.000, utc)
>
> #gravitation coefficient
> mu = 3.986004415e+14
>
> #Orbit construction as Keplerian
> initialOrbit = KeplerianOrbit(a, e, i, omega, raan, lM,
> KeplerianOrbit.MEAN_ANOMALY,
> inertialFrame, initialDate, mu)
>
> #Simple extrapolation with Keplerian motion
> kepler = KeplerianPropagator(initialOrbit)
>
> #Set the propagator to slave mode (could be omitted as it is the default
> mode)
> kepler.setSlaveMode()
>
> #Overall duration in seconds for extrapolation
> duration = 90*60.0
>
> #Stop date
> finalDate = AbsoluteDate(initialDate, duration, utc)
>
> #Step duration in seconds
> stepT = 30.0
>
> #Extrapolation loop
> cpt = 1
> extrapDate = initialDate
> while extrapDate.compareTo(finalDate) <= 0:
> currentState = kepler.propagate(extrapDate)
> print "step %d: time %s %s" % (cpt, currentState.getDate(),
> currentState.getOrbit())
> extrapDate = AbsoluteDate(extrapDate, stepT, utc)
> cpt=cpt+1
>
>
> ____________________________
>
> An interesting example of jython inheritance of java class:
> _____________________________
>
>
> # -*- coding: utf-8 -*-
> '''
> /* Copyright 2002-2010 CS Communication & Syst?mes
> * Licensed to CS Communication & Syst?mes (CS) under one or more
> * contributor license agreements. See the NOTICE file distributed with
> * this work for additional information regarding copyright ownership.
> * CS licenses this file to You under the Apache License, Version 2.0
> * (the "License"); you may not use this file except in compliance with
> * the License. You may obtain a copy of the License at
> *
> * http://www.apache.org/licenses/LICENSE-2.0
> *
> * Unless required by applicable law or agreed to in writing, software
> * distributed under the License is distributed on an "AS IS" BASIS,
> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> * See the License for the specific language governing permissions and
> * limitations under the License.
> */
>
> Translated from SlaveMode.java to jython by Petrus Hyv?nen 2011-05-04
> '''
> # orekit and common maths in CLASSPATH through eclipse project
> import java, os
>
> from org.orekit.data import DataProvidersManager
> from org.orekit.data import ZipJarCrawler
> from org.apache.commons.math.geometry import Vector3D
> from org.orekit.bodies import BodyShape
> from org.orekit.bodies import GeodeticPoint
> from org.orekit.bodies import OneAxisEllipsoid
> from org.orekit.errors import OrekitException;
> from org.orekit.frames import Frame
> from org.orekit.frames import FramesFactory
> from org.orekit.frames import TopocentricFrame
> from org.orekit.orbits import KeplerianOrbit
> from org.orekit.orbits import Orbit
> from org.orekit.propagation import Propagator
> from org.orekit.propagation import SpacecraftState
> from org.orekit.propagation.analytical import KeplerianPropagator
> from org.orekit.propagation.events import ElevationDetector
> from org.orekit.propagation.events import EventDetector
> from org.orekit.time import AbsoluteDate
> from org.orekit.time import TimeScalesFactory
> from org.orekit.utils import PVCoordinates
>
> from math import degrees, radians, pi
>
> # Configure Orekit
> DM = DataProvidersManager.getInstance()
> crawler=ZipJarCrawler("orekit-data.zip")
> DM.clearProviders()
> DM.addProvider(crawler)
>
> # Initial state definition: date, orbit
> initialDate = AbsoluteDate(2004, 01, 01, 23, 30, 00.000,
> TimeScalesFactory.getUTC())
> mu = 3.986004415e+14
> inertialFrame = FramesFactory.getEME2000() # inertial frame for orbit
> definition
> position = Vector3D(-6142438.668, 3492467.560, -25767.25680)
> velocity = Vector3D(505.8479685, 942.7809215, 7435.922231)
> pvCoordinates = PVCoordinates(position, velocity)
> initialOrbit = KeplerianOrbit(pvCoordinates, inertialFrame, initialDate, mu)
>
> # Propagator : consider a simple keplerian motion (could be more elaborate)
> kepler = KeplerianPropagator(initialOrbit)
>
> #Earth and frame
> ae = 6378137.0 # // equatorial radius in meter
> f = 1.0 / 298.257223563 #; // flattening
> ITRF2005 = FramesFactory.getITRF2005() #; // terrestrial frame at an
> arbitrary date
> earth = OneAxisEllipsoid(ae, f, ITRF2005)
>
> # Station
> longitude = radians(45.0)
> latitude = radians(25.0)
> altitude = 0.0
> station1 = GeodeticPoint(latitude, longitude, altitude)
> sta1Frame = TopocentricFrame(earth, station1, "station1")
>
> # Event definition
> maxcheck = 1.0
> elevation = radians(5.0)
>
>
> class VisibilityDetector(ElevationDetector):
> # Class for handling the eventOccured java. Example of subclassing
> # a java class in jython
> def __init__(self, maxCheck, elevation, topo):
> ElevationDetector.__init__(self,maxCheck, elevation, topo)
>
> def eventOccurred(self, s, increasing):
> if (increasing):
> print "Visibility on", self.topocentricFrame.getName(),"begins
> at" , s.getDate()
> else:
> print "Visibility on", self.topocentricFrame.getName(), "ends
> at" , s.getDate()
> return self.CONTINUE
>
> sta1Visi = VisibilityDetector(maxcheck, elevation, sta1Frame)
>
> #Add event to be detected
> kepler.addEventDetector(sta1Visi)
>
> #Propagate from the initial date to the first raising or for the fixed
> duration
> finalState = kepler.propagate(initialDate.shiftedBy(1500.0))
>
> print "Final state : " , finalState.getDate().durationFrom(initialDate)
>
> _________________________________
>
>
>