1 /* Copyright 2022-2025 Romain Serra
2 * Licensed to CS GROUP (CS) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * CS licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.orekit.orbits;
18
19 /** This interface represent orbit-like trajectory whose definition is based on a so-called position angle.
20 *
21 * @see PositionAngleType
22 * @see KeplerianOrbit
23 * @see CircularOrbit
24 * @see EquinoctialOrbit
25 * @see FieldKeplerianOrbit
26 * @see FieldCircularOrbit
27 * @see FieldEquinoctialOrbit
28 * @author Romain Serra
29 * @since 12.0
30 */
31 public interface PositionAngleBased<T> {
32
33 /** Get the cached {@link PositionAngleType}.
34 * @return cached type of position angle
35 */
36 PositionAngleType getCachedPositionAngleType();
37
38 /** Tells whether the instance holds rates (first-order time derivatives) for dependent variables that are incompatible with Keplerian motion.
39 * @return true if and only if holding non-Keplerian rates
40 * @since 13.0
41 */
42 boolean hasNonKeplerianRates();
43
44 /** Creates a new instance such that {@link #hasNonKeplerianRates()} is false.
45 * @return new object without rates
46 * @since 13.0
47 */
48 T withKeplerianRates();
49
50 /**
51 * Creates a new instance with the provided type used for caching.
52 * @param positionAngleType position angle type to use for caching value
53 * @return new object
54 * @since 13.0
55 */
56 T withCachedPositionAngleType(PositionAngleType positionAngleType);
57 }