Skip to content

Commit

Permalink
Remove low precision moon algorithm
Browse files Browse the repository at this point in the history
  • Loading branch information
DJBen committed Apr 10, 2018
1 parent 8058fdc commit 648bec6
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 55 deletions.
3 changes: 0 additions & 3 deletions Graviton/Common/Utils/Settings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@ struct Settings {
case showPlanetLabel
case showNorthPoleIndicator
case showSouthPoleIndicator
case useHighPrecisionMoonAlgorithm
case showMoonPhase
case showEarthshine
case showDirectionMarkers
Expand All @@ -109,8 +108,6 @@ struct Settings {
return showConstellationLabelDefault
case .showPlanetLabel:
return showPlanetLabelDefault
case .useHighPrecisionMoonAlgorithm:
return true
case .showMoonPhase:
return showMoonPhaseDefault
case .showEarthshine:
Expand Down
10 changes: 0 additions & 10 deletions Graviton/Observer/Resources/Settings/content_rendering_menu.plist
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,6 @@
<string>Moon</string>
<key>content</key>
<array>
<dict>
<key>type</key>
<string>toggle</string>
<key>text</key>
<string>High Precision Algorithm</string>
<key>image</key>
<string>row_icon_moon</string>
<key>binding</key>
<string>useHighPrecisionMoonAlgorithm</string>
</dict>
<dict>
<key>type</key>
<string>toggle</string>
Expand Down
59 changes: 17 additions & 42 deletions Graviton/Observer/Scenes/ObserverScene.swift
Original file line number Diff line number Diff line change
Expand Up @@ -453,48 +453,23 @@ class ObserverScene: SCNScene, CameraResponsive, FocusingSupport {
case let .moon(m):
if m == Naif.Moon.luna {
guard let moonNode = rootNode.childNode(withName: String(m.rawValue), recursively: false) else { break }
if Settings.default[.useHighPrecisionMoonAlgorithm] {
let moonEclipticCoord = LunaUtil.moonEclipticCoordinate(forJulianDay: ephemeris.timestamp!)
var moonEquatorialCoord = EquatorialCoordinate(EclipticCoordinate: moonEclipticCoord, julianDay: ephemeris.timestamp!)
moonEquatorialCoord = EquatorialCoordinate(rightAscension: moonEquatorialCoord.rightAscension, declination: moonEquatorialCoord.declination, distance: moonEquatorialCoord.distance * 1000)
let moonDisplaySize = body.radius * moonLayerRadius / moonEquatorialCoord.distance
let moonZoomRatio = moonDisplaySize / body.radius
(moonNode.geometry as! SCNSphere).radius = CGFloat(moonDisplaySize * dynamicMagnificationFactor)
let relativePos = Vector3.init(equatorialCoordinate: moonEquatorialCoord)
let moonPosition = relativePos * moonZoomRatio
precondition(moonPosition.length ~= moonLayerRadius)
annotateCelestialBody(body, position: SCNVector3(moonPosition), parent: cbLabelNode, class: .sunAndMoon)
moonNode.position = SCNVector3(moonPosition)
let hypotheticalSunPos = obliquedSunPos * moonZoomRatio / dynamicMagnificationFactor
moonLightingNode.position = SCNVector3(hypotheticalSunPos)
moonEarthshineNode.position = SCNVector3Zero
moonFullLightingNode.position = SCNVector3Zero
let cosAngle = hypotheticalSunPos.normalized().dot(-moonPosition.normalized())
moonEarthshineNode.light?.intensity = CGFloat(max(-cosAngle, 0) * 80)

let moonPositionVector = ephemeris.observedPosition(of: ephemeris[.moon(.luna)]!, fromObserver: earth).oblique(by: earth.obliquity)
let lowPrecisionCoordinate = EquatorialCoordinate(cartesian: moonPositionVector)
logger.verbose("High precision Moon ephemeris algorithm yields \(moonEquatorialCoord) while low precision yields \(lowPrecisionCoordinate)")
logger.verbose("Low precision moon algorithm error: \(moonEquatorialCoord.angularSeparation(from: lowPrecisionCoordinate))")
} else {
let relativePos = body.motion?.position ?? Vector3.zero
let moonDisplaySize = body.radius * moonLayerRadius / relativePos.length
let moonZoomRatio = moonDisplaySize / body.radius
(moonNode.geometry as! SCNSphere).radius = CGFloat(moonDisplaySize * dynamicMagnificationFactor)
let moonPosition = relativePos * moonZoomRatio
let obliquedMoonPos = moonPosition.oblique(by: earth.obliquity)
precondition(obliquedMoonPos.length ~= moonLayerRadius)
annotateCelestialBody(body, position: SCNVector3(obliquedMoonPos), parent: cbLabelNode, class: .sunAndMoon)
moonNode.position = SCNVector3(obliquedMoonPos)

let hypotheticalSunPos = obliquedSunPos * moonZoomRatio / dynamicMagnificationFactor
moonLightingNode.position = SCNVector3(hypotheticalSunPos)
moonEarthshineNode.position = SCNVector3Zero
moonFullLightingNode.position = SCNVector3Zero
let cosAngle = hypotheticalSunPos.normalized().dot(-obliquedMoonPos.normalized())
moonEarthshineNode.light?.intensity = CGFloat(max(-cosAngle, 0) * 80)
}

let moonEclipticCoord = LunaUtil.moonEclipticCoordinate(forJulianDay: ephemeris.timestamp!)
var moonEquatorialCoord = EquatorialCoordinate(EclipticCoordinate: moonEclipticCoord, julianDay: ephemeris.timestamp!)
moonEquatorialCoord = EquatorialCoordinate(rightAscension: moonEquatorialCoord.rightAscension, declination: moonEquatorialCoord.declination, distance: moonEquatorialCoord.distance * 1000)
let moonDisplaySize = body.radius * moonLayerRadius / moonEquatorialCoord.distance
let moonZoomRatio = moonDisplaySize / body.radius
(moonNode.geometry as! SCNSphere).radius = CGFloat(moonDisplaySize * dynamicMagnificationFactor)
let relativePos = Vector3.init(equatorialCoordinate: moonEquatorialCoord)
let moonPosition = relativePos * moonZoomRatio
precondition(moonPosition.length ~= moonLayerRadius)
annotateCelestialBody(body, position: SCNVector3(moonPosition), parent: cbLabelNode, class: .sunAndMoon)
moonNode.position = SCNVector3(moonPosition)
let hypotheticalSunPos = obliquedSunPos * moonZoomRatio / dynamicMagnificationFactor
moonLightingNode.position = SCNVector3(hypotheticalSunPos)
moonEarthshineNode.position = SCNVector3Zero
moonFullLightingNode.position = SCNVector3Zero
let cosAngle = hypotheticalSunPos.normalized().dot(-moonPosition.normalized())
moonEarthshineNode.light?.intensity = CGFloat(max(-cosAngle, 0) * 80)
updateMoonOrientation()
}
default:
Expand Down

0 comments on commit 648bec6

Please sign in to comment.