一个C语言写的三维坐标的小程序
(2011-11-14 20:51:01)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct Point
{
int x;
int y;
int z;
}Point; //定义一个坐标结构体
double Distance(Point *p1,Point *p2)
{
int
x=(p1->x)-(p2->x);
int
y=(p1->y)-(p2->y);
int
z=(p1->z)-(p2->z);
double
temp=(double)(x*x+y*y+z*z);
return
sqrt(temp);
}//求两点间的距离
void Input(Point *p[],int n)
{
int i;
for(i=0;i<n;i++)
{
p[i]=(Point *)malloc(sizeof(Point));
scanf("%d",&p[i]->x);
scanf("%d",&p[i]->y);
scanf("%d",&p[i]->z);
}
}//输入n个点的坐标
void Output(Point *p1,Point *p2)
{
printf("(%d,%d,%d)-(%d,%d,%d)=%.2f\n\n",p1->x,p1->y,p1->z,p2->x,p2->y,p2->z,Distance(p1,p2));
}
int main()
{
int
n,i,j;
printf("请输入坐标点的个数:");
scanf("%d",&n);
Point
*p[n];
Input(p,n);
double
a[n*(n-1)/2];
int
k=0;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
int t=0;
while(t<k+1
&&(a[t]-Distance(p[i],p[j])>0.00001
||Distance(p[i],p[j])-a[t]>0.00001))
t++;
if(t==k+1){
a[k]=Distance(p[i],p[j]); k++;
}
//Output(p[i],p[j]);
}
}//把所有可能的距离值存放在数组中(不重复)
int
count=k;//数组元素个数
for(i=0;i<count;i++)
{
for(j=i+1;j<count;j++)
{
if(a[i]<a[j])
{
double temp=a[i]; a[i]=a[j];
a[j]=temp;
}
}
}//数组a[]排序
printf("按距离由大到小依次输出两个点的坐标及它们之间的距离\n");
k=0;
while(k<count)
{
for(i=0;i<n;i++)