<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      空間判斷點是否在線段上

      1. 概述

      判斷點是否在線段上的算法非常簡單,有很多種實現方式,總結一下我自己的實現。

      2. 詳論

      個人認為通過向量計算的方式是比較好的,因為可以保證在二維和三維的情況都成立。判斷空間中點P是否在線段P1P2上,算法思想是分成兩部分:

      1. 計算\(\vec{P1P2}\)\(\vec{P1P}\)的向量叉積,可以判斷是否存在一條直線上。原理是向量叉積的模(長度)表示兩個向量組成的平面四邊形的面積,如果叉積的模為0,說明兩者共線,無法組成平行四邊形。
      2. 計算向量點積,點積的幾何意義是一個向量向另外一個向量的投影;如果滿足如下公式,說明是在兩個端點之間:

      \[0<{\vec{P1P}}\cdot{\vec{P1P2}}<{||\vec{P1P2}||}^2 \]

      具體的代碼實現如下所示:

      #include <Eigen/Eigen>
      #include <iostream>
      
      using namespace Eigen;
      using namespace std;
      
      using LineSegment = Vector2d[2];
      
      const double epsilon = 0.000000001;
      
      //判斷點在線段上
      bool PointInLine(const Vector2d& point, const LineSegment& lineSegment) {
        Vector3d P1P2;
        P1P2 << lineSegment[1] - lineSegment[0], 0;
        Vector3d P1P;
        P1P << point - lineSegment[0], 0;
      
        if (fabs((P1P2.cross(P1P)).norm()) > epsilon) {
          return false;
        }
      
        double dotProduct = P1P2.dot(P1P);
        if (dotProduct > 0 && dotProduct < P1P2.squaredNorm()) {
          return true;
        }
      
        return false;
      }
      
      int main() {
        // LineSegment lineSegment;
        // lineSegment[0] = Vector2d(0, 0);
        // lineSegment[1] = Vector2d(50, 100);
        // Vector2d c(25, 50);
        // Vector2d d(0, 8);
      
        LineSegment lineSegment;
        lineSegment[0] = Vector2d(2.6, 1.5);
        lineSegment[1] = Vector2d(24.5, 80.6);
        Vector2d ld = lineSegment[1] - lineSegment[0];
        Vector2d c = lineSegment[0] + 0.46 * ld;
        Vector2d d(0, 8);
      
        cout << PointInLine(c, lineSegment) << endl;
        // cout << PointInLine(d, lineSegment) << endl;
      }
      

      說明一下代碼實現:

      1. 使用了Eigen中的矢量類,其實自己使用其他庫的矢量類或者自己實現也是可以的。
      2. 內置浮點型的精度有限,因此設置epsilon作為容差。
      3. 由于是使用向量計算,因而是可以拓展到三維空間中使用的。

      3. 參考

      1. 判斷點是否在線段上
      2. How can you determine a point is between two other points on a line segment?
      posted @ 2023-01-27 22:28  charlee44  閱讀(846)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久这里只有精品首页| 国产av不卡一区二区| 久久这里都是精品一区| 日区中文字幕一区二区| 国产免费无遮挡吸奶头视频| 亚洲欧美综合精品二区| 国产网红女主播精品视频| 国产一区二区三区禁18| 日韩伦理片一区二区三区| 91久久精品美女高潮不断| 天堂中文8资源在线8| 少妇爽到呻吟的视频| 亚洲一二区制服无码中字| 成人免费A级毛片无码网站入口| 在线看国产精品三级在线| 国产福利酱国产一区二区| 在线观看无码av免费不卡网站| 成人综合婷婷国产精品久久蜜臀 | 人妻无码久久久久久久久久久| 亚洲天堂成人黄色在线播放| 亚洲午夜天堂| 玩弄丰满少妇人妻视频| 四虎永久精品免费视频| 国产无套护士在线观看| 婷婷五月综合激情| 国产av一区二区三区综合| 欧美白妞大战非洲大炮| 在线观看视频一区二区三区| 日韩精品无码一区二区视频| 麻豆一区二区三区香蕉视频| 办公室强奷漂亮少妇同事| 一本大道久久香蕉成人网| 妺妺窝人体色www聚色窝仙踪| 亚洲午夜精品毛片成人播放| 日本一区二区三区在线 |观看| 国产精品久久久久无码网站| 加勒比亚洲天堂午夜中文| 在线高清理伦片a| 免费AV片在线观看网址| 日韩亚av无码一区二区三区| 国产激情艳情在线看视频|