冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 854|回覆: 0
打印 上一主題 下一主題

[心得] [C#] 求解點到點/點到線距離

[複製鏈接]

857

主題

0

好友

869

積分

高級贊助會員

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

UID
390967
帖子
1664
主題
857
精華
0
積分
869
楓幣
12340
威望
409
存款
10100
贊助金額
1800
推廣
0
GP
2809
閱讀權限
150
在線時間
197 小時
註冊時間
2023-5-18
最後登入
2024-12-24

2023年紀念勳章 太陽勳章 神手勳章 高級客戶 VIP會員 私服達人 懶人勳章 幼兒勳章 音樂勳章 屁孩勳章 貢獻王 性別(女) 性別(男) 積分勳章 發帖達人 2023端午節紀念勳章 富豪勳章 富可敵國 2023中秋節紀念勳章 解說達人 論壇粉絲 2023聖誕節紀念勳章 2024年紀念勳章 2024端午節紀念勳章 2024中秋節紀念勳章 2024聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-6-1 17:33:13 |只看該作者 |倒序瀏覽
以下方法都是建立在笛卡爾座標系上使用
  1. /// <summary>
  2. /// 點到點距離
  3. /// </summary>
  4. /// <param name="p1"></param>
  5. /// <param name="p2"></param>
  6. /// <returns></returns>
  7. public static double GetDistancePP(Point p1, Point p2)
  8. {
  9.     return Math.Sqrt(((p1.X - p2.X) * (p1.X - p2.X)) + ((p1.Y - p2.Y) * (p1.Y - p2.Y)));
  10. }
複製代碼
直線算是兩個點的集合
  1. /// <summary>
  2. /// 點到直線距離
  3. /// </summary>
  4. /// <param name="p0"></param>
  5. /// <param name="p1"></param>
  6. /// <param name="p2"></param>
  7. /// <returns></returns>
  8. public static double GetDistancePL(Point p0, Point p1, Point p2)
  9. {
  10.     double dist = 0;
  11.     double x1 = p1.X;
  12.     double y1 = p1.Y;
  13.     double x2 = p2.X;
  14.     double y2 = p2.Y;
  15.     // 垂直狀況
  16.     if (Math.Abs(x1 - x2) < 1e-6)
  17.     {
  18.         dist = Math.Abs(p0.X - x1);
  19.     }
  20.     else
  21.     {
  22.         // 根據點到直線距離公式計算
  23.         // 計算斜率和截距
  24.         double k = (y2 - y1) / (x2 - x1);
  25.         double b = (x2 * y1 - x1 * y2) / (x2 - x1);
  26.         dist = Math.Abs(k * p0.X - p0.Y + b) / Math.Sqrt(k * k + 1);

  27.         // 根據海龍公式(希羅公式)計算
  28.         // double lenP1P2 = GetDistancePP(p1, p2);
  29.         // double lenP0P1 = GetDistancePP(p0, p1);
  30.         // double lenP0P2 = GetDistancePP(p0, p2);
  31.         // double len = 0.5 * (lenP0P1 + lenP0P2 + lenP1P2);
  32.         // double area = Math.Sqrt(len * (len - lenP0P1) * (len - lenP0P2) * (len - lenP1P2));
  33.         // dist = 2 * area / lenP1P2;
  34.     }
  35.     return dist;
  36. }
複製代碼
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1鑰匙
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-12-24 13:10

回頂部