Hi everyone,
I’ve been working on a concept I call the NKTg Law of Variable Inertia, which was recently tested against NASA’s real-time planetary data (30–31 Dec 2024). The idea comes from astrophysics, but I think it has great potential for game physics simulations — particularly if you want motion that feels more alive and less rigid than standard Newtonian models.
📐 The NKTg Law
The NKTg Law describes how inertia can vary depending on three quantities:
NKTg = f(x, v, m)
- x = position (relative to a reference point)
- v = velocity
- m = mass
Two fundamental interaction terms are defined:
NKTg₁ = x × p NKTg₂ = (dm/dt) × p
where p = m × v is linear momentum.
👉 The signs of these terms define whether motion stabilizes, resists, or amplifies. This can be applied in orbital mechanics or game objects with changing mass (e.g., spaceships consuming fuel).
🔭 Experimental Verification with NASA Data
Using NASA JPL Horizons data for all 8 planets at the end of 2024, I interpolated their masses using:
m = NKTg₁ / (x × v)
When compared with NASA’s official planetary masses, the results matched with error < 0.0001%.
This shows that NKTg₁ is a conserved quantity across the Solar System.
💻 Code Example (C# style demo)
Here’s a simplified implementation for all 8 planets:
using System; using System.Collections.Generic; class NKTgSimulation { struct Planet { public string Name; public double X; // position (km) public double V; // velocity (km/s) public double NKTg1; public double NASA_Mass; } static double InterpolateMass(double x, double v, double NKTg1) { return NKTg1 / (x * v); } static void Main() { var planets = new List<Planet> { new Planet { Name="Mercury", X=6.981793e7, V=38.86, NKTg1=8.951e32, NASA_Mass=3.301e23 }, new Planet { Name="Venus", X=1.08939e8, V=35.02, NKTg1=1.858e34, NASA_Mass=4.867e24 }, new Planet { Name="Earth", X=1.471e8, V=29.29, NKTg1=2.571e34, NASA_Mass=5.972e24 }, new Planet { Name="Mars", X=2.4923e8, V=24.07, NKTg1=3.850e33, NASA_Mass=6.417e23 }, new Planet { Name="Jupiter", X=8.1662e8, V=13.06, NKTg1=2.024e37, NASA_Mass=1.898e27 }, new Planet { Name="Saturn", X=1.50653e9, V=9.69, NKTg1=8.303e36, NASA_Mass=5.683e26 }, new Planet { Name="Uranus", X=3.00139e9, V=6.8, NKTg1=1.772e36, NASA_Mass=8.681e25 }, new Planet { Name="Neptune", X=4.5589e9, V=5.43, NKTg1=2.534e36, NASA_Mass=1.024e26 } }; foreach (var p in planets) { double mInterp = InterpolateMass(p.X, p.V, p.NKTg1); double delta = p.NASA_Mass - mInterp; Console.WriteLine($"{p.Name}: NASA={p.N