English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Questa guida analizza il metodo di calcolo della direzione di marcia dell'auto in C#. Condivido con voi per riferimento, come segue:
1. Scenario: Given two GPS coordinate points A (n1, e1), B (e) during the car's travel, calculate the direction of its travel.
2. Analysis: As shown in the figure above, knowing two points A, B, we can assume a point C, so that the three points form a right triangle. Now it is easy to find the GPS coordinates of points A, B, C, and calculate the lengths of the sides a, b, c of the three angles. According to the cosine rule, CosB = (a^2 + c^2 - b^2) / (2ac), the value of CosB can be calculated.
3. C# implementation code.
/// <summary> /// Calculate the distance between two GPS coordinates /// </summary> /// <param name="n1">Latitude coordinate of the first point</param> /// <param name="e1">Longitude coordinate of the first point</param> /// <param name="n2">Latitude coordinate of the second point</param> /// <param name="e2">Longitude coordinate of the second point</param> /// <returns></returns> public static double Distance(double n1, double e1, double n2, double e2) { double jl_jd = 102834.74258026089786013677476285; double jl_wd = 111712.69150641055729984301412873; double b = Math.Abs((e1 - e2) * jl_jd); double a = Math.Abs((n1 - n2) * jl_wd); return Math.Sqrt((a * a + b * b)); } /// <summary> /// Find the direction of the car's travel based on two known GPS points of the car /// </summary> /// <param name="n1">First GPS point latitude</param> /// <param name="e1">First GPS point longitude</param> /// <param name="n2">Second GPS point latitude</param> /// <param name="e2">Second GPS point longitude</param> /// <returns></returns> public static double GetBusDirection(double n1, double e1, double n2, double e2) { double e3 = 0; double n3 = 0; e3 = e1 + 0.005; n3 = n1; double a = 0; double b = 0; double c = 0; a = Distance(e1, n1, e3, n3); b = Distance(e3, n3, e2, n2); c = Distance(e1, n1, e2, n2); double cosB = 0; if ((a * c) != 0) { cosB = (a * a + c * c - b * b) / (2 * a * c); } double B = Math.Acos(cosB) * 180 / Math.PI; if(n2 < n1) { B = 180 + (180 - B); } return B; }
Per coloro che sono interessati a ulteriori contenuti relativi a C#, possono consultare le sezioni speciali di questo sito: 'Concetti di manipolazione delle stringhe in C#', 'Concetti di manipolazione degli array in C#', 'Concetti di manipolazione dei file XML in C#', 'Tutorial sui controlli comuni in C#', 'Concetti di utilizzo dei thread in C#', 'Concetti di manipolazione di Excel in C#', 'Concetti di utilizzo dei controlli WinForm', 'Tutorial sui dati e sulle strutture di algoritmi in C#', 'Tutorial di programmazione orientata agli oggetti in C# per principianti'
Spero che questo articolo possa essere utile per la progettazione di programmi C# di tutti.
Dichiarazione: il contenuto di questo articolo è stato prelevato da Internet, il copyright spetta ai rispettivi proprietari, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene il diritto di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, questo sito rimuoverà immediatamente il contenuto sospetto di violazione del copyright.