tidssystem

This commit is contained in:
2026-11-01 16:52:32 +01:00
parent 9d44d14cc9
commit a7207086b2
24 changed files with 849 additions and 174 deletions

View File

@@ -47,13 +47,41 @@ Tryck **Q** för att flyga mjukt till den närmaste planeten från kamerans nuva
- `systems`: lägg till fler system med eget `id`, `name`, `sector`, `centerOffsetMeters`, `stars` och `planets`. Två kända system får inte ligga i samma cell.
- `stars`: `id`, `name`, `positionMeters`, `radiusMeters`, `luminositySolar`, linjär RGB-`color` och valfri `seed`. En eller två stjärnor stöds.
- `planets`: `id`, `name`, `description`, `hostStarId`, `radiusMeters`, `seed`, `axialTiltDegrees`, `rotationDegrees`, `orbit`, `surfaceType`, `surfaceColor`, valfri `surfaceTexture`, `terrain`, `atmosphere`, valfria `clouds`, `ocean`, `rings` och `moons`.
- `orbit`: `semiMajorAxisAu`, `eccentricity`, `phaseDegrees`, `inclinationDegrees`, `ascendingNodeDegrees`, `periapsisDegrees`. Banorna är statiska elliptiska ögonblicksbilder. En satellits bana är relativ till moderplanetens centrum.
- `orbit`: `semiMajorAxisAu`, `eccentricity`, `meanAnomalyDegrees`, `inclinationDegrees`, `ascendingNodeDegrees`, `periapsisDegrees`, valfri `periodDays`. Banorna beräknas analytiskt från systemets `epochUtc`. En satellits bana är relativ till den rörliga moderplanetens centrum. Äldre `phaseDegrees` stöds som sann anomali vid epoken om `meanAnomalyDegrees` saknas.
- `surfaceType`: `rocky`, `terrestrial`, `cloudCovered`, `gasGiant` eller `iceGiant`. Gas- och isjättarna har molnband, inte berg. `cloudBandFrequency` och `stormStrength` styr bandtäthet och en större storm.
- `atmosphere`: `heightMeters`, `density`, RGB-`color`, `composition`. Sammansättningen är beskrivande metadata; `density`, höjd och färg styr grafiken.
- `rings`: `innerRadiusMeters`, `outerRadiusMeters`, RGB-`color`, `opacity` samt valfria `gapInnerRadiusMeters` och `gapOuterRadiusMeters`. Ringarnas plan följer planetens axellutning och skuggar planeten.
Alla längder anges i **meter**, utom banornas halvstoraxel som anges i **AU**. Färger har tre komponenter i intervallet 0–1. `seed` är ett heltal; utelämnad seed härleds stabilt från id. Felaktiga id:n, saknade kartor, orimliga värden och objekt utanför sin gridcell ger ett tydligt startfel.
## Tid, banor och rotation
Varje system har `epochUtc` (standard `2000-01-01T12:00:00Z`). Banfaser och rotationsfaser är relativa till denna tidpunkt. `simulation.startUtc` och `simulation.timeScale` i projektets `config.json` väljer startdatum och tidsfaktor; standard är 1× verklig tid. Menyn **P → DEBUG ON** har ett tidsreglage 0–100×. Menyn och benchmarkrutterna pausar världstiden, och 0× pausar bara simulationen, så att kameran fortfarande kan användas.
| JSON-fält | Betydelse |
| --- | --- |
| Stjärnans `massKg` | Massa i kg; används för beräkning av omloppstid om perioden saknas. Standard en solmassa. |
| Planetens `massKg` | Massa i kg; används för tvåkroppsperiod och satellitbanor. Standard en jordmassa. |
| `orbit.semiMajorAxisAu` | Ellipsens halvstoraxel i AU. |
| `orbit.eccentricity` | Excentricitet från 0 till mindre än 1. |
| `orbit.periodDays` | Siderisk omloppstid i dygn om 86400 sekunder; om utelämnad används `2π √(a³ / G(M+m))`. |
| `orbit.meanAnomalyDegrees` | Medelanomali vid epoken. Har företräde framför äldre `phaseDegrees` (sann anomali). |
| `orbit.inclinationDegrees` | Banplanets lutning mot systemets XZ-plan. |
| `orbit.ascendingNodeDegrees` | Uppstigande nodens longitud. |
| `orbit.periapsisDegrees` | Periapsisargument relativt noden, inte periheliets absoluta longitud. |
| `rotationPeriodHours` | Siderisk axelrotation i timmar. Standard 24. Måste vara ändlig och skild från noll. |
| `axialTiltDegrees` | Axellutning mot systemets +Y-riktning, 0–180 grader. Värden över 90 ger retrograd rotation med positiv rotationsperiod. |
| `rotationDegrees` | Meridianens rotationsfas vid epoken. |
| `poleLongitudeDegrees` | Vridning av den lutade axelns riktning runt systemets Y-axel; standard 0. |
`rotationPeriodHours` anges som positivt belopp i vårt solsystem. Venus (177,4°) och Uranus (97,8°) har redan omvänd rotationsriktning genom axellutningen; en negativ period skulle vända dem en gång till. Negativa perioder stöds för andra konfigurationer som vill vända spinnen kring den angivna axeln. Jorden använder en siderisk dag på cirka 23 h 56 min, medan dess soldygn blir ungefär 24 timmar genom kombinationen av rotation och omlopp.
Solsystemets åtta planeter använder [JPL:s banelement vid J2000](https://ssd.jpl.nasa.gov/planets/approx_pos.html) och [sideriska perioder och massor](https://ssd.jpl.nasa.gov/planets/phys_par.html). Månen följer jorden med ungefär 27,32 dygns omlopps- och rotationstid. Proceduriella planeter får deterministiska rotationstider och omloppstider beräknade från avstånd och värdkroppens massa. Deras stjärnor har fasta lägen; dubbelstjärnornas inbördes banor integreras inte.
Modellen är en spelbar tvåkroppsapproximation med fasta banelement, inte JPL Horizons eller en fullständig N-kroppssimulering. Sekulära störningar, precession/nutation, tidvattenkrafter, relativitet och ljusets gångtid ingår inte. Jordbanan använder jord–måne-barycentrums element som approximation. UTC används direkt för epoken utan TT/TDB-korrigering. Axelfaser och polernas longituder är visuellt konfigurerade och inte IAU-kalibrerade; atmosfärens vind kan dessutom röra molnen relativt ytan. Detta gör att perioder och omloppshastigheter är astronomiskt grundade utan att ange exakta observerade lägen för ett datum.
Meshdata, terräng-LOD och material behåller planetens lokala koordinater. Rendering och kollision använder samma aktuella rotation utan att generera om terräng för varje rotationssteg. En markbunden spelare följer både omlopp och rotation, medan tangentbordsstyrning och hopp använder vanlig, oskalad bildrutetid. Fokusanimeringar följer rörliga planeter. `--simulation-report` genererar bilder av jordrotation, markvy och debugreglage i appens `graphics-report/`.
## Jordens heightmap och noise
Jordens inställningar kombinerar kartan med finare terräng:

View File

@@ -1,7 +1,7 @@
{
"schemaVersion": 1,
"source": "https://nssdc.gsfc.nasa.gov/planetary/factsheet/ ; https://solarsystem.nasa.gov/planet-compare/",
"notes": "Avrundade planetdata i SI-enheter och AU. Sfariska radier och statiska illustrativa banfaser, inte efemerider for dagens datum. Material och atmosfarer ar visuella modeller.",
"source": "https://ssd.jpl.nasa.gov/planets/approx_pos.html ; https://ssd.jpl.nasa.gov/planets/phys_par.html ; https://nssdc.gsfc.nasa.gov/planetary/factsheet/",
"notes": "Keplerbanor med JPL J2000-element och sideriska perioder. Epok 2000-01-01 12:00 UTC (approximation av J2000 TT). Fasta tvåkroppsbanor, utan sekulära störningar, precession eller N-kroppsintegration; jordens bana approximeras med Earth/Moon-barycentrum. Rotationstid anges positivt om den följer den lutade axelns riktning: Venus och Uranus får retrograd rotation genom axialTiltDegrees > 90, inte dubbelt negativ rotationstid. RotationDegrees och poleLongitudeDegrees är justerbara visuella epokfaser, inte IAU-kalibrerade meridianer. Gasjättars rotation avser en representativ siderisk period; väder har separat vind. Radier/material/atmosfärer behåller spelbara visuella modeller.",
"systems": [
{
"id": "sol",
@@ -50,7 +50,8 @@
"ghostStrength": 0.04,
"ghostSpacing": 0.42,
"chromaticAberration": 0.08
}
},
"massKg": 1.98847e+30
}
],
"planets": [
@@ -64,12 +65,13 @@
"axialTiltDegrees": 0.034,
"rotationDegrees": 15,
"orbit": {
"semiMajorAxisAu": 0.3871,
"eccentricity": 0.2056,
"phaseDegrees": 160,
"inclinationDegrees": 7.0,
"ascendingNodeDegrees": 48.3,
"periapsisDegrees": 29.1
"semiMajorAxisAu": 0.38709927,
"eccentricity": 0.20563593,
"inclinationDegrees": 7.00497902,
"ascendingNodeDegrees": 48.33076593,
"periapsisDegrees": 29.12703035,
"meanAnomalyDegrees": 174.79252722,
"periodDays": 87.96925717
},
"surfaceType": "rocky",
"surfaceColor": [
@@ -90,7 +92,10 @@
0
],
"composition": "Mycket tunn exosfär"
}
},
"rotationPeriodHours": 1407.5088,
"massKg": 3.30103e+23,
"poleLongitudeDegrees": 0
},
{
"id": "venus",
@@ -102,12 +107,13 @@
"axialTiltDegrees": 177.4,
"rotationDegrees": 20,
"orbit": {
"semiMajorAxisAu": 0.7233,
"eccentricity": 0.0068,
"phaseDegrees": 75,
"inclinationDegrees": 3.4,
"ascendingNodeDegrees": 76.7,
"periapsisDegrees": 54.9
"semiMajorAxisAu": 0.72333566,
"eccentricity": 0.00677672,
"inclinationDegrees": 3.39467605,
"ascendingNodeDegrees": 76.67984255,
"periapsisDegrees": 54.92262463,
"meanAnomalyDegrees": 50.37663232,
"periodDays": 224.70079921
},
"surfaceType": "cloudCovered",
"surfaceColor": [
@@ -128,7 +134,10 @@
0.22
],
"composition": "Koldioxid, kväve och svavelsyramoln"
}
},
"rotationPeriodHours": 5832.432,
"massKg": 4.86731e+24,
"poleLongitudeDegrees": 0
},
{
"id": "earth",
@@ -140,12 +149,13 @@
"axialTiltDegrees": 23.44,
"rotationDegrees": 135,
"orbit": {
"semiMajorAxisAu": 1.0,
"eccentricity": 0.0167,
"phaseDegrees": 0,
"inclinationDegrees": 0,
"semiMajorAxisAu": 1.00000261,
"eccentricity": 0.01671123,
"inclinationDegrees": -1.531e-05,
"ascendingNodeDegrees": 0,
"periapsisDegrees": 0
"periapsisDegrees": 102.93768193,
"meanAnomalyDegrees": -2.47311027,
"periodDays": 365.25635535
},
"surfaceType": "terrestrial",
"surfaceColor": [
@@ -153,68 +163,84 @@
0.39,
0.2
],
"surfaceTexture": "Textures/earth-color.jpg",
"materials": {
"enabled": true,
"flatMaterial": "leafy-grass",
"slopeMaterial": "rock-ground",
"scaleMeters": 8,
"fadeDistanceMeters": 2000,
"strength": 0.8
},
"clouds": {
"enabled": true,
"densityTexturePath": "Clouds/earth-clouds.png",
"densityTextureStrength": 1.0,
"baseAltitudeMeters": 2100,
"thicknessMeters": 4300,
"coverage": 0.40,
"density": 0.85,
"shapeScaleMeters": 18000,
"detailScaleMeters": 2400,
"erosion": 0.45,
"cloudType": 0.9,
"windSpeedMetersPerSecond": 18,
"windDirectionDegrees": 25,
"extinctionPerMeter": 0.0007,
"scatteringAlbedo": 0.96,
"anisotropy": 0.62,
"silverLiningStrength": 0.7,
"ambientStrength": 0.6,
"sunlightStrength": 1.0,
"sunsetStrength": 1.4,
"shadowStrength": 0.7,
"viewSteps": 48,
"lightSteps": 4,
"resolutionScale": 0.4,
"maxViewDistanceMeters": 220000
},
"ocean": {
"enabled": true,
"maskFromSurfaceTexture": true,
"seaLevelMeters": 0,
"depthMeters": 4000,
"waveAmplitudeMeters": 1.6,
"waveLengthMeters": 72,
"windDirectionDegrees": 35,
"waveSpeed": 1.0,
"choppiness": 0.65,
"roughness": 0.14,
"reflectionStrength": 1.0,
"refractionStrength": 0.018,
"foamStrength": 0.65,
"deepColor": [0.006, 0.045, 0.075],
"shallowColor": [0.025, 0.28, 0.24],
"absorption": [0.12, 0.045, 0.022]
},
"surfaceTexture": "Textures/earth-color.jpg",
"materials": {
"enabled": true,
"flatMaterial": "leafy-grass",
"slopeMaterial": "rock-ground",
"scaleMeters": 8,
"fadeDistanceMeters": 2000,
"strength": 0.8
},
"clouds": {
"enabled": true,
"densityTexturePath": "Clouds/earth-clouds.png",
"densityTextureStrength": 1.0,
"baseAltitudeMeters": 2100,
"thicknessMeters": 4300,
"coverage": 0.4,
"density": 0.85,
"shapeScaleMeters": 18000,
"detailScaleMeters": 2400,
"erosion": 0.45,
"cloudType": 0.9,
"windSpeedMetersPerSecond": 18,
"windDirectionDegrees": 25,
"extinctionPerMeter": 0.0007,
"scatteringAlbedo": 0.96,
"anisotropy": 0.62,
"silverLiningStrength": 0.7,
"ambientStrength": 0.6,
"sunlightStrength": 1.0,
"sunsetStrength": 1.4,
"shadowStrength": 0.7,
"viewSteps": 48,
"lightSteps": 4,
"resolutionScale": 0.4,
"maxViewDistanceMeters": 220000
},
"ocean": {
"enabled": true,
"maskFromSurfaceTexture": true,
"seaLevelMeters": 0,
"depthMeters": 4000,
"waveAmplitudeMeters": 1.6,
"waveLengthMeters": 72,
"windDirectionDegrees": 35,
"waveSpeed": 1.0,
"choppiness": 0.65,
"roughness": 0.14,
"reflectionStrength": 1.0,
"refractionStrength": 0.018,
"foamStrength": 0.65,
"deepColor": [
0.006,
0.045,
0.075
],
"shallowColor": [
0.025,
0.28,
0.24
],
"absorption": [
0.12,
0.045,
0.022
]
},
"terrain": {
"heightmap": "Textures/earth-height.jpg",
"regionalHeight": {
"file": "Heightdata/Copernicus/alps_n46_e007.f32",
"width": 3600, "height": 3600,
"westDegrees": 7, "southDegrees": 46,
"eastDegrees": 8, "northDegrees": 47, "fadeDegrees": 0.04
},
"heightmap": "Textures/earth-height.jpg",
"regionalHeight": {
"file": "Heightdata/Copernicus/alps_n46_e007.f32",
"width": 3600,
"height": 3600,
"westDegrees": 7,
"southDegrees": 46,
"eastDegrees": 8,
"northDegrees": 47,
"fadeDegrees": 0.04
},
"heightmapMinMeters": 0,
"heightmapMaxMeters": 10848,
"heightmapGamma": 1.0,
@@ -250,7 +276,8 @@
"phaseDegrees": 60,
"inclinationDegrees": 5.1,
"ascendingNodeDegrees": 0,
"periapsisDegrees": 0
"periapsisDegrees": 0,
"periodDays": 27.321661
},
"surfaceType": "rocky",
"surfaceColor": [
@@ -271,9 +298,14 @@
0
],
"composition": "Mycket tunn exosfär"
}
},
"rotationPeriodHours": 655.719864,
"massKg": 7.342e+22
}
]
],
"rotationPeriodHours": 23.93447232,
"massKg": 5.97217e+24,
"poleLongitudeDegrees": 0
},
{
"id": "mars",
@@ -285,12 +317,13 @@
"axialTiltDegrees": 25.2,
"rotationDegrees": 20,
"orbit": {
"semiMajorAxisAu": 1.5237,
"eccentricity": 0.0934,
"phaseDegrees": 140,
"inclinationDegrees": 1.8,
"ascendingNodeDegrees": 49.6,
"periapsisDegrees": 286.5
"semiMajorAxisAu": 1.52371034,
"eccentricity": 0.0933941,
"inclinationDegrees": 1.84969142,
"ascendingNodeDegrees": 49.55953891,
"periapsisDegrees": -73.5031685,
"meanAnomalyDegrees": 19.39019754,
"periodDays": 686.9795859
},
"surfaceType": "rocky",
"surfaceColor": [
@@ -311,7 +344,10 @@
0.36
],
"composition": "Tunn koldioxidatmosfär"
}
},
"rotationPeriodHours": 24.62296224,
"massKg": 6.41691e+23,
"poleLongitudeDegrees": 0
},
{
"id": "jupiter",
@@ -323,12 +359,13 @@
"axialTiltDegrees": 3.1,
"rotationDegrees": 20,
"orbit": {
"semiMajorAxisAu": 5.2034,
"eccentricity": 0.0489,
"phaseDegrees": 220,
"inclinationDegrees": 1.3,
"ascendingNodeDegrees": 100.5,
"periapsisDegrees": 273.9
"semiMajorAxisAu": 5.202887,
"eccentricity": 0.04838624,
"inclinationDegrees": 1.30439695,
"ascendingNodeDegrees": 100.47390909,
"periapsisDegrees": -85.74542926,
"meanAnomalyDegrees": 19.66796068,
"periodDays": 4332.82012875
},
"surfaceType": "gasGiant",
"surfaceColor": [
@@ -372,7 +409,10 @@
],
"fineBandContrast": 0.16,
"cloudTurbulence": 0.55
}
},
"rotationPeriodHours": 9.92496,
"massKg": 1.898125e+27,
"poleLongitudeDegrees": 0
},
{
"id": "saturn",
@@ -384,12 +424,13 @@
"axialTiltDegrees": 26.7,
"rotationDegrees": 0,
"orbit": {
"semiMajorAxisAu": 9.5371,
"eccentricity": 0.052,
"phaseDegrees": 290,
"inclinationDegrees": 2.5,
"ascendingNodeDegrees": 113.7,
"periapsisDegrees": 339.4
"semiMajorAxisAu": 9.53667594,
"eccentricity": 0.05386179,
"inclinationDegrees": 2.48599187,
"ascendingNodeDegrees": 113.66242448,
"periapsisDegrees": -21.06354617,
"meanAnomalyDegrees": -42.64463408,
"periodDays": 10755.6986445
},
"surfaceType": "gasGiant",
"surfaceColor": [
@@ -589,7 +630,10 @@
0.76,
0.69
]
}
},
"rotationPeriodHours": 10.65624,
"massKg": 5.68317e+26,
"poleLongitudeDegrees": 0
},
{
"id": "uranus",
@@ -601,12 +645,13 @@
"axialTiltDegrees": 97.8,
"rotationDegrees": 0,
"orbit": {
"semiMajorAxisAu": 19.1913,
"eccentricity": 0.0472,
"phaseDegrees": 45,
"inclinationDegrees": 0.8,
"ascendingNodeDegrees": 74.0,
"periapsisDegrees": 97.0
"semiMajorAxisAu": 19.18916464,
"eccentricity": 0.04725744,
"inclinationDegrees": 0.77263783,
"ascendingNodeDegrees": 74.01692503,
"periapsisDegrees": 96.93735127,
"meanAnomalyDegrees": 142.28382821,
"periodDays": 30687.1530015
},
"surfaceType": "iceGiant",
"surfaceColor": [
@@ -650,7 +695,10 @@
],
"fineBandContrast": 0.025,
"cloudTurbulence": 0.04
}
},
"rotationPeriodHours": 17.23992,
"massKg": 8.68099e+25,
"poleLongitudeDegrees": 0
},
{
"id": "neptune",
@@ -662,12 +710,13 @@
"axialTiltDegrees": 28.3,
"rotationDegrees": 0,
"orbit": {
"semiMajorAxisAu": 30.069,
"eccentricity": 0.0086,
"phaseDegrees": 105,
"inclinationDegrees": 1.8,
"ascendingNodeDegrees": 131.8,
"periapsisDegrees": 273.2
"semiMajorAxisAu": 30.06992276,
"eccentricity": 0.00859048,
"inclinationDegrees": 1.77004347,
"ascendingNodeDegrees": 131.78422574,
"periapsisDegrees": -86.81946347,
"meanAnomalyDegrees": -100.08479196,
"periodDays": 60190.02963
},
"surfaceType": "iceGiant",
"surfaceColor": [
@@ -711,9 +760,13 @@
],
"fineBandContrast": 0.05,
"cloudTurbulence": 0.18
}
},
"rotationPeriodHours": 16.11,
"massKg": 1.024092e+26,
"poleLongitudeDegrees": 0
}
]
],
"epochUtc": "2000-01-01T12:00:00Z"
}
]
}