Ich versuche, eine Funktion zu erstellen, die mir zwei Argumente geben lassen, einen neuen Standort und eine Geschwindigkeit, mit zu reisen (in Meter/Sekunde)Wie kann ich mit einer festgelegten Geschwindigkeit zwischen 2 gps-Punkten wechseln?
Es sieht wie folgt aus:
func (l *Location) Move(newLoc *Location, speed float64) {
R := 6371.0 // Kilometers
lat1 := l.Latitude * math.Pi/180
lat2 := l.Longitude * math.Pi/180
diffLat := (newLoc.Latitude - l.Latitude) * math.Pi/180
diffLon := (newLoc.Longitude - l.Longitude) * math.Pi/180
a := math.Sin(diffLat/2)*math.Sin(diffLat/2) +
math.Cos(lat1)*math.Cos(lat2)*math.Sin(diffLon/2)*math.Sin(diffLon/2)
c := 2 * math.Atan2(math.Sqrt(a), math.Sqrt(1-a))
distanceToMove := R * c // Distance to travel in a straight line, in Kilometers
}
Die Das einzige Problem, mit dem ich Probleme habe, ist, an die Formel zu denken, um die Breite zu bestimmen, an der aktuellen Position zu beginnen und über eine bestimmte Zeit an ihrer neuen Position zu enden.
Also sagen Sie, die Person änderte den Breitengrad von 56.65
zu 58.12
und ich sagte ihm, um 1.3m/s
zu reisen, wie kann ich dies erreichen. Vielen Dank.
Was genau soll diese Methode tun? Was sind die gewünschten Ergebnisse/Nebenwirkungen der Funktion? – Nebril
@Nebril die Funktion soll im Grunde die GPS-Koordinaten inkrementell von der einen Stelle auf die andere zu bewegen, ob es in einer Schleife oder auf andere Weise tun muss Ich kann nicht herausfinden, die Formel oder Methode, um es zu erreichen – Datsik
sollten Sie wahrscheinlich einen dritten Parameter für Move angeben, der der Funktion den Zeitrahmen mitteilt, in dem die Position geändert wird. Auch der Rückgabewert sollte wahrscheinlich neue Location-Struktur sein, die den Ort enthält, an dem das Objekt, das von 'l' nach' newLoc' mit 'speed' wandert, nach der im neuen Funktionsargument angegebenen Zeit liegt. – Nebril