通过两点直线距离点的直线方程 - C

问题描述:

我有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

你是什么意思“我怎么能把它放在变量里面”? –

首先是改变你的直线方程为另一种形式

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) 

别客气

甲线可以通过使用形式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版应该是大同小异的。

以下代码计算两点之间的距离。

#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