English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
本文实例分析了C#计算汽车行驶方向的方法。分享给大家供大家参考,具体如下:
1. 场景:已知汽车行驶过程中的2GPS 좌표 점A(n1,e1),B(e),计算它行驶的方向。
2. 분석:如图所示,知道了两个点A、B,可以假设一个C点,让三个点构成一个直角三角形。现在可以知道,A,B,C三点的GPS 좌표就很容易求出三个角的对边长度a,b,c。根据余弦定理CosB=(a2+c2-b2)/2.B의 값을 구할 수 있습니다.
3.C# 구현 코드.
/// <summary> ///두 점의 GPS 좌표의 거리를 계산합니다 /// </summary> /// <param name="n1">첫 번째 점의 위도 좌표</param> /// <param name="e1">첫 번째 점의 경도 좌표</param> /// <param name="n2">두 번째 점의 위도 좌표</param> /// <param name="e2">두 번째 점의 경도 좌표</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> /// 이동 중의 자동차의 두 GPS 점을 알고, 자동차의 이동 방향을 구하는 방법 /// </summary> /// <param name="n1">첫 번째 GPS 점의 위도</param> /// <param name="e1">첫 번째 GPS 점의 경도</param> /// <param name="n2">두 번째 GPS 점의 위도</param> /// <param name="e2">두 번째 GPS 점의 경도</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; }
C#와 관련된 내용에 대해 더 알고 싶은 독자분들은 다음 웹사이트의 특집을 확인하시기 바랍니다:《C# 문자열操作技巧总结》、《C# 배열操作技巧总结》、《C# 중 XML 파일操作技巧汇总》、《C# 일반 컨트롤러 사용법 교본》、《C# 프로그래밍에서 스레드 사용법 요약》、《C# Excel操作技巧总结》、《WinForm 컨트롤러 사용법 요약》、《C# 데이터 구조와 알고리즘 교본》 및 《C# object-oriented 프로그래밍 입문 교본》
이 글에서 설명된 내용이 모두들에게 C# 프로그래밍에 도움이 되길 바랍니다.
고지: 본 문서의 내용은 인터넷에서 가져왔으며, 저작권은 원저자에게 있으며, 인터넷 사용자가 자발적으로 기여하고 업로드한 내용으로, 본 웹사이트는 소유권을 가지지 않으며, 인공 편집을 하지 않았으며, 관련 법적 책임을 지지 않습니다. 저작권 문제가 의심되는 내용이 있다면, notice#w 이메일로 보내주시기 바랍니다.3codebox.com(이메일을 보내면, #을 @으로 변경하여 신고하시고, 관련 증거를 제공해 주세요.一经查实,本站将立刻删除涉嫌侵权内容。)