簡體   English   中英

如何計算C中兩點之間的距離

[英]How to calculate the distance between two points in C

我遇到了一個問題,我想創建一個 function 來計算兩點之間的距離。 這是我們在 class 中得到的代碼:

typedef struct Point3D {
double x;
double y;
double z;
} point3d_t;

 // Structure for a triangle in 3d
 typedef struct Triangle3D {
point3d_t pts[3];   // Lines between points implicit
 } triangle3d_t;

 // Distance between two points
 double distance(point3d_t *p1, point3d_t *p2){
 
 }

最初我以為雙距離的代碼會是下面這樣,但是我無法編譯:

distance = (sqrt((p2-p1)*(p2-p1)));

任何人應該在雙距離?

在 3D 空間中獲取距離與在 2D 空間中沒有太大區別:

你有 3 個向量,dx、dy、dz。 距離是 sqrt(dx^2 + dy^2 + dz^2)

你的代碼沒有編譯,因為它沒有平衡括號,但它也是不正確的,因為它只占 2 維和乘法而不是加法。

對於你的代碼,你需要做一個簡單的計算來得到dx、dy、dz:

double distance(point3d_t *p1, point3d_t *p2){

    double dx,dy,dz;
    dx = p2->x - p1->x;
    dy = p2->y - p1->y;
    dz = p2->z - p1->z;

    return sqrt(dx*dx + dy*dy + dz*dz);
}

請注意,符號對我們的增量無關緊要,因為它們是平方的並且始終為正。

為了快速證明距離公式,您從勾股定理開始,然后意識到任意兩個向量(比如 dx 和 dy)形成一個直角三角形,其中 sqrt(dx^2 + dy^2) 是斜邊的長度. 斜邊 forms 另一個帶 dz 的直角三角形,再次應用勾股定理,我們得到:

平方根(平方根(dx^2 + dy^2)^ 2 + dz^2)

簡化為:

平方根(dx^2 + dy^2 + dz^2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM