最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)計(jì)算兩個(gè)坐標(biāo)點(diǎn)直接距離的方法小結(jié)

 更新時(shí)間:2024年04月24日 10:01:13   作者:wangnaisheng  
這篇文章主要為大家詳細(xì)介紹了C#中幾種常見場景下兩個(gè)坐標(biāo)點(diǎn)直接距離的計(jì)算方法,文中的示例代碼講解詳細(xì),有需要的可以參考一下

在C#中計(jì)算兩個(gè)坐標(biāo)點(diǎn)之間的距離時(shí),方法的選擇取決于坐標(biāo)系的類型以及您需要處理的具體情況。以下是幾種常見場景下的計(jì)算方法:

1. 平面直角坐標(biāo)系中的兩點(diǎn)距離

在二維平面直角坐標(biāo)系中,給定兩個(gè)點(diǎn)A(x1, y1)和B(x2, y2),它們之間的歐氏距離可以通過勾股定理計(jì)算:

public static double CalculateDistance(Point p1, Point p2)
{
    double dx = p2.X - p1.X;
    double dy = p2.Y - p1.Y;
    return Math.Sqrt(dx * dx + dy * dy);
}

public static double DistanceBetweenPoints(double x1, double y1, double x2, double y2)
{
    double dx = x2 - x1;
    double dy = y2 - y1;
    return Math.Sqrt(dx * dx + dy * dy);
}

2. 地球表面兩點(diǎn)間的距離(經(jīng)緯度坐標(biāo))

對(duì)于地球上的地理位置,即經(jīng)緯度坐標(biāo),通常采用球面幾何或者近似的橢球體模型來計(jì)算兩點(diǎn)間的距離。最常用的算法是Haversine公式,它可以準(zhǔn)確地計(jì)算地球上任意兩點(diǎn)間的最短距離(大圓距離)。以下是一個(gè)使用Haversine公式計(jì)算距離的C#實(shí)現(xiàn):

public static double CalculateDistanceInKilometers(double lat1, double lon1, double lat2, double lon2)
{
    const double earthRadiusKm = 6371.0;
 
    // 將角度轉(zhuǎn)為弧度
    double dLat = ToRadians(lat2 - lat1);
    double dLon = ToRadians(lon2 - lon1);
 
    lat1 = ToRadians(lat1);
    lat2 = ToRadians(lat2);
 
    double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
              Math.Sin(dLon / 2) * Math.Sin(dLon / 2) *
              Math.Cos(lat1) * Math.Cos(lat2);
    double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
 
    return earthRadiusKm * c;
}
 
private static double ToRadians(double degrees)
{
    return degrees * Math.PI / 180;
}

3. 三維空間中兩點(diǎn)的距離

在三維空間中,點(diǎn)A(x1, y1, z1)和點(diǎn)B(x2, y2, z2)之間的距離計(jì)算類似二維情況,只需將三維坐標(biāo)分量的差值平方后求和,然后開方:

public static double DistanceIn3DSpace(double x1, double y1, double z1, double x2, double y2, double z2)
{
    double dx = x2 - x1;
    double dy = y2 - y1;
    double dz = z2 - z1;
    return Math.Sqrt(dx * dx + dy * dy + dz * dz);
}

根據(jù)實(shí)際需求,選擇對(duì)應(yīng)的方法來計(jì)算坐標(biāo)點(diǎn)之間的距離即可。如果需要處理的是地球表面的經(jīng)緯度坐標(biāo),請(qǐng)使用第二種方法(Haversine公式)。如果是平面直角坐標(biāo)或三維空間坐標(biāo),則分別使用第一種或第三種方法。

4.知識(shí)補(bǔ)充

除了上文的方法,小編還整理了一些其他C#計(jì)算距離的方法,希望對(duì)大家有所幫助

C#計(jì)算兩個(gè)經(jīng)緯度的距離

//地球半徑,單位米
       private const double EARTH_RADIUS = 6378137;
       /// <summary>
       /// 計(jì)算兩點(diǎn)位置的距離,返回兩點(diǎn)的距離,單位 米
       /// 該公式為GOOGLE提供,誤差小于0.2米
       /// </summary>
       /// <param name="lat1">第一點(diǎn)緯度</param>
       /// <param name="lng1">第一點(diǎn)經(jīng)度</param>
       /// <param name="lat2">第二點(diǎn)緯度</param>
       /// <param name="lng2">第二點(diǎn)經(jīng)度</param>
       /// <returns></returns>
       public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
       {
           double radLat1 = Rad(lat1);
           double radLng1 = Rad(lng1);
           double radLat2 = Rad(lat2);
           double radLng2 = Rad(lng2);
           double a = radLat1 - radLat2;
           double b = radLng1 - radLng2;
           double result = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) + Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2))) * EARTH_RADIUS;
           return result;
       }
 
       /// <summary>
       /// 經(jīng)緯度轉(zhuǎn)化成弧度
       /// </summary>
       /// <param name="d"></param>
       /// <returns></returns>
       private static double Rad(double d)
       {
           return (double)d * Math.PI / 180d;
       }

c#計(jì)算兩點(diǎn)坐標(biāo)距離

namespace 實(shí)驗(yàn)三
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            double x1 = Convert.ToDouble(textBox4.Text );
            double y1 = Convert.ToDouble(textBox3.Text);
            double x2 = Convert.ToDouble(textBox1.Text);
            double y2 = Convert.ToDouble(textBox2.Text);
            Class1 s1 = new Class1(x1, y1, x2, y2);
            textBox5.Text = string.Format("{0}", s1.point());
        }
       ......
     }
}
class Class1
{
    private double x1, y1, x2, y2;
    public double X1
    {get{return this.x1;}}
    public double Y1
    {get{return this.y1;}}
    public double X2
    {get{return this.x2;}}
    public double Y2
    {get{return this.y2;}}
    public Class1(double x1,double y1,double x2,double y2)
    {
        this.x1 = x1;
        this.y1 = y1;
        this.x2 = x2;
        this.y2 = y2;
    }
     public double point()
    {
        return Math.Sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
    }
}

到此這篇關(guān)于C#實(shí)現(xiàn)計(jì)算兩個(gè)坐標(biāo)點(diǎn)直接距離的方法小結(jié)的文章就介紹到這了,更多相關(guān)C#計(jì)算兩個(gè)坐標(biāo)距離內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入c# Func委托的詳解

    深入c# Func委托的詳解

    本篇文章是對(duì)c#中的Func委托進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • C# 實(shí)現(xiàn)在控制臺(tái)上換行輸出與不換行輸出

    C# 實(shí)現(xiàn)在控制臺(tái)上換行輸出與不換行輸出

    這篇文章主要介紹了C# 實(shí)現(xiàn)在控制臺(tái)上換行輸出與不換行輸出,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 通過C#實(shí)現(xiàn)給Word文檔添加文字和圖片水印

    通過C#實(shí)現(xiàn)給Word文檔添加文字和圖片水印

    在日常辦公中,給Word文檔添加水印是個(gè)常見需求,下面小編就和大家講講如何使用 C# 結(jié)合免費(fèi)庫 Free Spire.Doc for .NET 給 Word 文檔添加水印,包括文本水印和圖片水印吧
    2025-10-10
  • C#正則檢測字符串是否字母數(shù)字混編的方法

    C#正則檢測字符串是否字母數(shù)字混編的方法

    這篇文章主要介紹了C#正則檢測字符串是否字母數(shù)字混編的方法,涉及C#正則判定字符串的使用技巧,需要的朋友可以參考下
    2015-06-06
  • 通俗易懂的C#之反射教程

    通俗易懂的C#之反射教程

    這篇文章主要介紹了通俗易懂的C#之反射教程,本文深入分析了反射內(nèi)部的原理,剖析了內(nèi)部屬性、方法的運(yùn)作,并用通俗易懂的語言闡述,需要的朋友可以參考下
    2015-01-01
  • C# 計(jì)算標(biāo)準(zhǔn)偏差相當(dāng)于Excel中的STDEV函數(shù)實(shí)例

    C# 計(jì)算標(biāo)準(zhǔn)偏差相當(dāng)于Excel中的STDEV函數(shù)實(shí)例

    下面小編就為大家?guī)硪黄狢# 計(jì)算標(biāo)準(zhǔn)偏差相當(dāng)于Excel中的STDEV函數(shù)實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • C#中Invoke的具體使用

    C#中Invoke的具體使用

    本文主要介紹了C#中Invoke的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • C#采用OpenXml給Word文檔添加表格

    C#采用OpenXml給Word文檔添加表格

    這篇文章主要介紹了C#采用OpenXml給Word文檔添加表格的方法,是OpenXml操作Word的一個(gè)非常實(shí)用的技巧,需要的朋友可以參考下
    2014-09-09
  • C# WinForm快捷鍵設(shè)置技巧

    C# WinForm快捷鍵設(shè)置技巧

    這篇文章主要給大家介紹C# winform快捷鍵設(shè)置技巧,涉及到C winform快捷鍵相關(guān)知識(shí),對(duì)C winform知識(shí)感興趣的朋友可以參考下本篇文章
    2015-10-10
  • C# 格式化字符串的實(shí)現(xiàn)代碼

    C# 格式化字符串的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C# 格式化字符串的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2016-11-11

最新評(píng)論

麻城市| 祥云县| 绥阳县| 松阳县| 大安市| 鸡东县| 手机| 阿拉善右旗| 日土县| 会理县| 汕头市| 阳西县| 名山县| 彭山县| 广东省| 博客| 英德市| 金山区| 阆中市| 偏关县| 平南县| 阜城县| 临沭县| 日土县| 北京市| 永康市| 衡阳市| 呈贡县| 彭水| 东丰县| 聂拉木县| 景德镇市| 敦煌市| 陆川县| 遵义市| 略阳县| 台中市| 台前县| 钟山县| 合川市| 荥经县|