2017-04-10 66 views
-1

我有3點,p1(x1,y1)p2(x2,y2)p3(x3,y3)通過兩點直線距離點的直線方程 - C

我知道應該從(x-x1)/(x2-x1)=(y-y1)/(y2-y1)獲得通過t p1p2的直線方程,但是我怎樣才能把它放在一個變量裏?

然後,如何計算從p3到這條線的距離?

+0

你嘗試過這麼遠嗎?您可以請[編輯您的問題](https://stackoverflow.com/posts/43327070/edit)添加代碼? – cxw

+0

這是基本的矢量數學,不是編程問題。 – Olaf

+0

你是什麼意思「我怎麼能把它放在變量裏面」? –

回答

1

首先是改變你的直線方程爲另一種形式

Ax + By + C = 0 //保持INT記住,A^2 + B^2 != 0(這意味着A或B都無法成爲equall零在一個時刻)

它會是(y1- y2)x + (x2 - x1)y + (x1y2 - x2y1) = 0;

如果你有一個線Ax + By + C = 0

的距離形狀點M(Mx, My)你行的公式將是

d = abs(A * Mx + B * My + C)/sqrt(A * A + B * B) 

別客氣

1

甲線可以通過使用形式ax + by = c(或使用斜截式太)3號abc的元組來表示。所以你可以做的是創建一個名爲Line的類,該類存儲intfloat類型的3個公共成員。

然後,您可以使用standard point-line distance formula在班級中實現距離函數。

在C#中,你可以這樣做:

class Line 
{ 
    public float a,b,c; 

    public float Distance(Point p) 
    { 
    return Math.Abs(a * p.X + b * p.Y + c)/Math.Sqrt(a * a + b * b) 
    } 
} 

C版應該是大同小異的。

1

以下代碼計算兩點之間的距離。

#include <stdio.h> 
#include <math.h> 

int main() 
{ 
    double p1x,p1y,p2x,p2y,p1p2_distance; 
    //Initialize variables here 

    // Distance d between p1 and p2 is given by: d = sqrt((p2.x-p1.x)^2 + (p2.y- 
    p1.y)^2) 
    p1p2_distance = sqrt(pow((p2x-p1x),2)+pow((p2y-p1y),2)); // same formula can be used to calculate distance between p1,p3 and p2,p3. 

    printf("Distance between p1 and p2: %f \n", &p1p2_distance); 
    return 0; 
} 

在Linux編譯:GCC distance.c -o距離-lm