Reciprical extension for measurement angles (headings)

This commit is contained in:
Garth Vander Houwen 2024-12-22 09:49:56 -08:00
parent e2ce6bff07
commit e4ba47abc2
6 changed files with 15 additions and 9 deletions

View file

@ -297,6 +297,7 @@
}
},
"%@ hPa" : {
"extractionState" : "stale",
"localizations" : {
"sr" : {
"stringUnit" : {
@ -9252,9 +9253,6 @@
}
}
}
},
"Done" : {
},
"Double Tap as Button" : {
"localizations" : {
@ -29835,8 +29833,8 @@
}
}
},
"Trace route received directly by %@ with a SNR of %@ dB" : {
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {

View file

@ -8,6 +8,14 @@
import Foundation
import Charts
extension Measurement where UnitType == UnitAngle {
func reciprocal() -> Measurement {
var recip = self.converted(to: .degrees)
recip.value = (recip.value + 180).truncatingRemainder(dividingBy: 360)
return recip.converted(to: self.unit)
}
}
struct PlottableMeasurement<UnitType: Unit> {
var measurement: Measurement<UnitType>
}

View file

@ -143,7 +143,7 @@ struct PositionPopover: View {
/// Heading
let degrees = Angle.degrees(Double(position.heading))
Label {
let heading = Measurement(value: degrees.degrees, unit: UnitAngle.degrees)
let heading = Measurement(value: degrees.degrees, unit: UnitAngle.degrees).reciprocal()
Text("Heading: \(heading.formatted(.measurement(width: .narrow, numberFormatStyle: .number.precision(.fractionLength(0)))))")
} icon: {
Image(systemName: "location.north")

View file

@ -120,7 +120,7 @@ struct NodeListItem: View {
.symbolRenderingMode(.multicolor)
.clipShape(Circle())
.rotationEffect(headingDegrees)
let heading = Measurement(value: trueBearing, unit: UnitAngle.degrees)
let heading = Measurement(value: trueBearing, unit: UnitAngle.degrees).reciprocal()
Text("\(heading.formatted(.measurement(width: .narrow, numberFormatStyle: .number.precision(.fractionLength(0)))))")
.font(UIDevice.current.userInterfaceIdiom == .phone ? .callout : .caption)
.foregroundColor(.gray)

View file

@ -52,7 +52,7 @@ struct PositionLog: View {
}
TableColumn("Heading") { position in
let degrees = Angle.degrees(Double(position.heading))
let heading = Measurement(value: degrees.degrees, unit: UnitAngle.degrees)
let heading = Measurement(value: degrees.degrees, unit: UnitAngle.degrees).reciprocal()
Text(heading.formatted(.measurement(width: .narrow, numberFormatStyle: .number.precision(.fractionLength(0)))))
}
TableColumn("SNR") { position in

View file

@ -22,7 +22,7 @@ struct GPSStatus: View {
let altitiude = Measurement(value: newLocation.altitude, unit: UnitLength.meters)
let speed = Measurement(value: newLocation.speed, unit: UnitSpeed.kilometersPerHour)
let speedAccuracy = Measurement(value: newLocation.speedAccuracy, unit: UnitSpeed.metersPerSecond)
let courseAccuracy = Measurement(value: newLocation.courseAccuracy, unit: UnitAngle.degrees)
let courseAccuracy = Measurement(value: newLocation.courseAccuracy, unit: UnitAngle.degrees).reciprocal()
Label("Coordinate \(String(format: "%.5f", newLocation.coordinate.latitude)), \(String(format: "%.5f", newLocation.coordinate.longitude))", systemImage: "mappin")
.font(largeFont)
@ -45,7 +45,7 @@ struct GPSStatus: View {
HStack {
let degrees = Angle.degrees(newLocation.course)
Label {
let heading = Measurement(value: degrees.degrees, unit: UnitAngle.degrees)
let heading = Measurement(value: degrees.degrees, unit: UnitAngle.degrees).reciprocal()
Text("Heading: \(heading.formatted(.measurement(width: .narrow, numberFormatStyle: .number.precision(.fractionLength(0)))))")
} icon: {
Image(systemName: "location.north")