我有3分,p1(x1,y1)
,p2(x2,y2)
和p3(x3,y3)
。
我知道通过p1
和p2
的直线方程应该从(x-x1)/(x2-x1)=(y-y1)/(y2-y1)
获得,但我怎样才能将它放在变量中?
之后,如何计算从p3
到此线的距离?
答案 0 :(得分:1)
首先将你的线方程变换为另一种形式
Ax + By + C = 0
//记住A^2 + B^2 != 0
(这意味着A或B在一瞬间不能等于零)
它将是(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 :(得分:1)
一行可以使用a
形式(或使用斜率截距形式)由3个数字b
,c
和ax + by = c
的元组表示。因此,您可以创建一个名为Line
的类,该类存储3个int
或float
类型的公共成员。
然后,您可以使用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版应该差不多。
答案 2 :(得分: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 distance -lm