用c语言 求点到线段垂线的交点,怎么求?
答案:1 信息版本:手机版
解决时间 2021-05-14 12:48
已解决
2021-05-14 07:43
用c语言 求点到线段垂线的交点,怎么求?
最佳答案
2021-05-14 08:11
设线段两点是 (x1,y1)(x2,y2),另外一个点是(x3,y3),那么他的方向向量就是 (a,b)=(x2-x1,y2-y1),那么他的垂线段的方向向量就是 (-b,a); 那么垂线的方程l就是就是 (x-x3)/(-b)=(y-y3)/a,l上的点就是x=t*(-b)+x3,y=a*t+y3,把(x,y)代入线段方程就可以求出t;
#include
struct point
{
double x,y;
point(double _x,double _y):
x(_x),y(_y){}
};
struct Line
{
double x,y;
point a;
Line(double _x,double _y,point _a):
x(_x),y(_y),a(_a){}
};
int main()
{
double x,y;
printf("输入线段两点\n");
scanf("%lf%lf",&x,&y);point a=point(x,y);
scanf("%lf%lf",&x,&y);point b=point(x,y);
printf("输入线段外一点\n");
scanf("%lf%lf",&x,&y);point c=point(x,y);
Line l=Line(a.x-b.x,a.y-b.y,a);
Line l1=Line(b.y-a.y,a.x-b.x,c);
//ansx=(b.y-a.y)*t+c.x;ansy=(a.x-b.x)*t+c.y
//(ansx-a.x)/(a.x-b.x)=(ansy-a.y)/(a.y-b.y)
double t=((c.y-a.y)*(a.x-b.x)-(c.x-a.x)*(a.y-b.y))/((a.y-b.y)*(b.y-a.y)-(a.x-b.x)*(a.x-b.x));
if(t>1||t<0) puts("不存在");
else
{
double ansx=(b.y-a.y)*t+c.x;
double ansy=(a.x-b.x)*t+c.y;
printf("%lf %lf\n",ansx,ansy);
}
}
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯