求空间一个点到一条直线距离最近的点的坐标C++编程

来源:百度知道 编辑:UC知道 时间:2024/09/20 17:39:03
用类的方法实现,就是公式复杂,应该编程不难,希望高手能花点时间帮帮我,编出来我再补分,要不没人编分就浪费了。非常感谢!
具体已知条件是这样的:已知空间一个点的坐标a(x0,y0,z0),已知空间的另外两个点的坐标b(x1,y1,z1),c(x2,y2,z2),求a点到 b,c两点所在直线的 距离最近的点的坐标 可以说是a点到 过b,c点直线垂足的坐标。并且求出a点到直线的距离。

直线方程为:x-x1/x2-x1=y-y1/y2-y1=z-z1/z2-z1

给出了空间中点P(x0,y0,z0)到直线A1x+B1y+C1z+D1=0A2x+B2y+C2z+D2=0距离的一个公式d=|(A1x0+B1y0+C1z0+D1)n2-(A2x0+B2y0+C2z0+D2)n1|/|n1×n2|,其中ni={Ai,Bi,Ci},(i=1,2)
提供跟多的式子
空间一般直线的方程是:
(x-x0)/a=(y-y0)/b=(z-z0)/c,

这是一条过(x0,y0,z0),方向矢量为{a,b,c}的直线.

假设已知点的坐标是A(e,f,g),过A点,且与{a,b,c}垂直的平面是,

a(x-e)+b(y-f)+c(z-g)=0,直线(x-x0)/a=(y-y0)/b=(z-z0)/c,与这个平面的交点是B,

再由两点的距离公式求出AB

点P(x0,y0,z0)到直线ax+by+cz+d=0的距离
d=abs(a x0+b y0+c z0+d)/sqrt(a^2+b^2+c^2);其中abs是绝对值,sqrt是开根号

谢谢12楼 我都想给分怎么给?

我是用C弄的,不过尽量往类那边靠(我用结构,C++还在看)。
你再改一些应当就可以了。

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

typedef struct{
double x,y,z;
}point;

typedef struct{
point p1,p2;
}line;

main()
{
line lne;
point points[3],point_Q;
int initpoint(point *a,double x,double y,double z);
int printpoint(point a);
int initline(line *l,point a,point b);
int point2line(line l,point a,point *b);
double p2p(point a,point b);

/*初始化三个点,其中前两个点用来做直线的*/
initpoint(&points[0],1,2,3);
initpoint(&points[1],-1,4,6);
initpoint(&points[2],0,0,0);
initline(&lne,points[0],points[1]); /*前两个点做线*/

/*求垂足*/
point2line(lne,points[2],&point_Q);

printpoint(point_Q);/*输出垂足*/
printf("dist=%lf\n",p2p(points[2],point_Q));
getch();
}

int initpoint(point *a,double x,double y,double z