用C语言,找出一点到两个已知点群中距离最近的一个点
已知空间两个点群分别有5个点,10个点坐标以数组方式输入,就是x[10][3]这种,坐标自定,然后给出另外一个点A,找出与这个点距离最近的一点,然后表示出点A属于距离最近...
已知空间两个点群分别有5个点,10个点坐标以数组方式输入,就是x[10][3]这种,坐标自定,然后给出另外一个点A,找出与这个点距离最近的一点,然后表示出点A属于距离最近的点所在的点群。
谢谢!由于本人是新手,请详细编写!
请在程序中写出printf,提示什么时候输入什么数据 展开
谢谢!由于本人是新手,请详细编写!
请在程序中写出printf,提示什么时候输入什么数据 展开
3个回答
展开全部
#include<stdio.h>
#include<math.h>
void main()
{
int a[11][3],i,j,dis[10],d1,d2,h1,h2,d,h;
double D;
printf("请输入第一点群的5个点坐标:\n");
for(i=0;i<5;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("请输入第二点群的5个点坐标:\n");
for(i=5;i<10;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("\n输入目标点坐标\n");
for(j=0;j<3;j++)
scanf("%d",&a[10][j]);
for(i=0;i<10;i++)
dis[i]=(a[i][0]-a[10][0])*(a[i][0]-a[10][0])+(a[i][1]-a[10][1])*(a[i][1]-a[10][1])+(a[i][2]-a[10][2])*(a[i][2]-a[10][2]);
d1=dis[0];h=0;
for(i=1;i<5;i++)
{
if (dis[i]<d1)
d1=dis[i],h1=i;
}
d2=dis[5];h2=5;
for(i=6;i<10;i++)
{
if (dis[i]<d2)
d2=dis[i],h2=i;
}
if(d1==d2)
{
printf("最近点距离目标点距离为:%f\n",sqrt(d1));
printf("2个点群中均存在距离目标点最近的点\n");
}
else
{
if(d1>d2)
d=d2,h=h2;
else
d=d1,h=h1;
D=sqrt(d);
printf("最近点距离目标点距离为:%f\n",D);
if(h<5)
printf("最近点属于第一点群\n");
else
printf("最近点属于第二点群\n");
}
}
#include<math.h>
void main()
{
int a[11][3],i,j,dis[10],d1,d2,h1,h2,d,h;
double D;
printf("请输入第一点群的5个点坐标:\n");
for(i=0;i<5;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("请输入第二点群的5个点坐标:\n");
for(i=5;i<10;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("\n输入目标点坐标\n");
for(j=0;j<3;j++)
scanf("%d",&a[10][j]);
for(i=0;i<10;i++)
dis[i]=(a[i][0]-a[10][0])*(a[i][0]-a[10][0])+(a[i][1]-a[10][1])*(a[i][1]-a[10][1])+(a[i][2]-a[10][2])*(a[i][2]-a[10][2]);
d1=dis[0];h=0;
for(i=1;i<5;i++)
{
if (dis[i]<d1)
d1=dis[i],h1=i;
}
d2=dis[5];h2=5;
for(i=6;i<10;i++)
{
if (dis[i]<d2)
d2=dis[i],h2=i;
}
if(d1==d2)
{
printf("最近点距离目标点距离为:%f\n",sqrt(d1));
printf("2个点群中均存在距离目标点最近的点\n");
}
else
{
if(d1>d2)
d=d2,h=h2;
else
d=d1,h=h1;
D=sqrt(d);
printf("最近点距离目标点距离为:%f\n",D);
if(h<5)
printf("最近点属于第一点群\n");
else
printf("最近点属于第二点群\n");
}
}
展开全部
#include<stdio.h>
#include<math.h>
void main()
{int shuju[10][3],i,j;
double distance[10];
static double d;
for(i=0;i<=9;i++)
for(j=0;j<=2;j++)
scanf("%d",&shuju[i][j]);
for(i=0;i<=9;i++)
distance[i]=sqrt(shuju[i][0]*shuju[i][0]+shuju[i][1]*shuju[i][1]+shuju[i][2]*shuju[i][2]);
d=distance[0];
for(i=1;i<=9;i++)
{if (distance[i]<d)
d=distance[i];};
printf("%f",d);
}
应该能够看懂吧!题目还是很简单,c语言在开始的时候多看看书就可以了!
#include<math.h>
void main()
{int shuju[10][3],i,j;
double distance[10];
static double d;
for(i=0;i<=9;i++)
for(j=0;j<=2;j++)
scanf("%d",&shuju[i][j]);
for(i=0;i<=9;i++)
distance[i]=sqrt(shuju[i][0]*shuju[i][0]+shuju[i][1]*shuju[i][1]+shuju[i][2]*shuju[i][2]);
d=distance[0];
for(i=1;i<=9;i++)
{if (distance[i]<d)
d=distance[i];};
printf("%f",d);
}
应该能够看懂吧!题目还是很简单,c语言在开始的时候多看看书就可以了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
题很简单,但是写出高效的算法就要想想了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询