korba 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 82d326cac0ea342432bbb082f3abf220a6104073c070bc9c634bab9bb981c388
4
- data.tar.gz: 0254dd92e20901966e424acf29a1c1cdc4c44128499e2c85b3fac3cb10fe89f9
3
+ metadata.gz: e2c09e63837c73c4e90d0154d64f821f9ce483dff5658cc4260010ccdc34d867
4
+ data.tar.gz: a5cff68159d77759daa51b9ab3b6fe338bbe5f267273074b81f81da3c4abf6ee
5
5
  SHA512:
6
- metadata.gz: a8c434b74a17a64f5ad4367a41391ec85345021f1b1de5ad741b9632a49ae92d123eb8aac9dd22e262a01953012862862a396fe9e5b6429dd5a126412d813bc4
7
- data.tar.gz: f6e6c90bc931c98854823baa0089b6dff556b70def4a1a0d72f1544e633cc9745097506b00f422812ddbb4f598d640df53d18dfd6576145a2b19361cdc75270c
6
+ metadata.gz: 89c6ea54a2fc3e6499bc93b3cc6079269e3f8b31b3655339cd7d8ea9a82165bb46507fe8db71fbba2342559d466ff6df32a3afe435a679ab77631046674bb089
7
+ data.tar.gz: 750c1c7f2b926cc1b070550bfd6e4f18f359b0ea9658a92873a2ef3ade1ee30b63a20374490f22088d6fdf14d98fcf471cfb883900ed0476240f8a9ccfe96366
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## [0.9.1] - 2026-05-06
2
+
3
+ - FIX: TLE epoch handling: convert to datetime and adjust SGP4 propagation epoch
4
+ - feat: Implement Orbit Model
5
+
1
6
  ## [0.9.0] - 2026-05-04
2
7
 
3
8
  - Enable orbit propagation with Keplerian elements
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Korba
4
+ module Converter
5
+ def tle_to_cartesian(tle)
6
+ return nil if tle.nil?
7
+
8
+ tle.to_car
9
+ end
10
+
11
+ def tle_to_keplerian(tle)
12
+ return nil if tle.nil?
13
+
14
+ tle.to_kep
15
+ end
16
+
17
+ def keplerian_to_cartesian(keplerian)
18
+ return nil if keplerian.nil?
19
+
20
+ keplerian.to_car
21
+ end
22
+
23
+ def cartesian_to_keplerian(cartesian)
24
+ return nil if cartesian.nil?
25
+
26
+ cartesian.to_kep
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Korba
4
+ class Orbit
5
+ include Converter
6
+ attr_reader :epoch, :name, :tle
7
+
8
+ class << self
9
+ def from_tle(tle = nil, type: :string)
10
+ tle = Tle.new(tle, type:)
11
+ new(tle:, epoch: tle.epoch_datetime, name: tle.object_name)
12
+ end
13
+
14
+ def from_keplerian(keplerian)
15
+ new(keplerian:, epoch: keplerian.epoch, name: keplerian.object_name)
16
+ end
17
+
18
+ def from_cartesian(cartesian)
19
+ new(cartesian:, epoch: cartesian.epoch, name: cartesian.object_name)
20
+ end
21
+ end
22
+
23
+ def initialize(keplerian: nil, cartesian: nil, tle: nil, epoch: nil, name: nil)
24
+ @keplerian = keplerian
25
+ @cartesian = cartesian
26
+ @tle = tle
27
+ @epoch = epoch
28
+ @name = name
29
+ end
30
+
31
+ def cartesian
32
+ @cartesian ||= tle_to_cartesian(tle) || keplerian_to_cartesian(keplerian)
33
+ end
34
+
35
+ def keplerian
36
+ @keplerian ||= tle_to_keplerian(tle) || cartesian_to_keplerian(cartesian)
37
+ end
38
+
39
+ def propagate(type:, seconds_after_epoch:, disable_j2: false)
40
+ case type.to_sym
41
+ in :sgp4
42
+ propagated_cartesian = tle.propagate_to(seconds_after_epoch / 60.0)
43
+ return Orbit.from_cartesian(propagated_cartesian)
44
+ in :rk4
45
+ propagator = Propagator::Rk4.new(cartesian, disable_j2:)
46
+ propagated_cartesian = propagator.propagate(seconds_after_epoch)
47
+ return Orbit.from_cartesian(propagated_cartesian)
48
+ in :kepler
49
+ propagator = Propagator::Kepler.new(keplerian, disable_j2:)
50
+ propagated_keplerian = propagator.propagate(seconds_after_epoch)
51
+ return Orbit.from_keplerian(propagated_keplerian)
52
+ end
53
+ end
54
+ end
55
+ end
data/lib/korba/tle.rb CHANGED
@@ -25,7 +25,7 @@ module Korba
25
25
 
26
26
  def to_kep
27
27
  Kep.new(object_name:,
28
- epoch:,
28
+ epoch: epoch_datetime,
29
29
  semi_major_axis:,
30
30
  eccentricity:,
31
31
  inclination:,
@@ -47,7 +47,7 @@ module Korba
47
47
  @sgp4Error = @element_set_record.error
48
48
  r = r.map { _1 * 1000 }
49
49
  v = v.map { _1 * 1000 }
50
- Car.new(object_name:, epoch:, x: r[0], y: r[1], z: r[2], vx: v[0], vy: v[1], vz: v[2])
50
+ Car.new(object_name:, epoch: epoch_datetime + minutesAfterEpoch * 60.0, x: r[0], y: r[1], z: r[2], vx: v[0], vy: v[1], vz: v[2])
51
51
  end
52
52
 
53
53
  private
data/lib/korba/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Korba
4
- VERSION = "0.9.0"
4
+ VERSION = "0.9.1"
5
5
  end
data/lib/korba.rb CHANGED
@@ -6,6 +6,8 @@ require_relative "korba/tle"
6
6
  require_relative "korba/kep"
7
7
  require_relative "korba/car"
8
8
  require_relative "korba/orbit_utils"
9
+ require_relative "korba/converter"
10
+ require_relative "korba/orbit"
9
11
  require_relative "korba/keplers_equation"
10
12
  require_relative "korba/sgp4/elset_rec"
11
13
  require_relative "korba/propagator/sgp4"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: korba
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - kk0000-kk
@@ -23,8 +23,10 @@ files:
23
23
  - lib/korba.rb
24
24
  - lib/korba/car.rb
25
25
  - lib/korba/constant.rb
26
+ - lib/korba/converter.rb
26
27
  - lib/korba/kep.rb
27
28
  - lib/korba/keplers_equation.rb
29
+ - lib/korba/orbit.rb
28
30
  - lib/korba/orbit_utils.rb
29
31
  - lib/korba/propagator/kepler.rb
30
32
  - lib/korba/propagator/rk4.rb
@@ -35,7 +37,8 @@ files:
35
37
  - mise.toml
36
38
  - sig/korba.rbs
37
39
  homepage: https://github.com/kk0000-kk/korba
38
- licenses: []
40
+ licenses:
41
+ - MIT
39
42
  metadata:
40
43
  allowed_push_host: https://rubygems.org
41
44
  homepage_uri: https://github.com/kk0000-kk/korba