- UID
- 390967
- 帖子
- 1598
- 主題
- 823
- 精華
- 0
- 積分
- 854
- 楓幣
- 11070
- 威望
- 395
- 存款
- 10100
- 贊助金額
- 1800
- 推廣
- 0
- GP
- 2681
- 閱讀權限
- 150
- 在線時間
- 189 小時
- 註冊時間
- 2023-5-18
- 最後登入
- 2024-11-23
|
以下方法都是建立在笛卡爾座標系上使用- /// <summary>
- /// 點到點距離
- /// </summary>
- /// <param name="p1"></param>
- /// <param name="p2"></param>
- /// <returns></returns>
- public static double GetDistancePP(Point p1, Point p2)
- {
- return Math.Sqrt(((p1.X - p2.X) * (p1.X - p2.X)) + ((p1.Y - p2.Y) * (p1.Y - p2.Y)));
- }
複製代碼 直線算是兩個點的集合- /// <summary>
- /// 點到直線距離
- /// </summary>
- /// <param name="p0"></param>
- /// <param name="p1"></param>
- /// <param name="p2"></param>
- /// <returns></returns>
- public static double GetDistancePL(Point p0, Point p1, Point p2)
- {
- double dist = 0;
- double x1 = p1.X;
- double y1 = p1.Y;
- double x2 = p2.X;
- double y2 = p2.Y;
- // 垂直狀況
- if (Math.Abs(x1 - x2) < 1e-6)
- {
- dist = Math.Abs(p0.X - x1);
- }
- else
- {
- // 根據點到直線距離公式計算
- // 計算斜率和截距
- double k = (y2 - y1) / (x2 - x1);
- double b = (x2 * y1 - x1 * y2) / (x2 - x1);
- dist = Math.Abs(k * p0.X - p0.Y + b) / Math.Sqrt(k * k + 1);
- // 根據海龍公式(希羅公式)計算
- // double lenP1P2 = GetDistancePP(p1, p2);
- // double lenP0P1 = GetDistancePP(p0, p1);
- // double lenP0P2 = GetDistancePP(p0, p2);
- // double len = 0.5 * (lenP0P1 + lenP0P2 + lenP1P2);
- // double area = Math.Sqrt(len * (len - lenP0P1) * (len - lenP0P2) * (len - lenP1P2));
- // dist = 2 * area / lenP1P2;
- }
- return dist;
- }
複製代碼 |
|