加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

一个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++)
        {
            for(j=i+1;j<n;j++)
               if(a[k]>Distance(p[i],p[j]))
                   if(a[k]-Distance(p[i],p[j])<0.000001)//a[k]==Distance(p[i],p[j])
                        Output(p[i],p[j]);
                }
                else
                {
                    if(Distance(p[i],p[j])-a[k]<0.000001)//a[k]==Distance(p[i],p[j])
                        Output(p[i],p[j]);            
                }
            }
        }
        k++;    
    }//按距离由大到小依次输出两个点的坐标及它们之间的距离
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有