一个C语言写的三维坐标的小程序

本文介绍了一个使用C语言编写的程序,该程序定义了一个结构体表示三维坐标点,并实现了计算两个点之间距离的函数。程序还包含输入多个点坐标的功能,并能按距离大小顺序输出所有点对之间的距离,避免重复。这是一个基础的数学计算程序,适合学习C语言和坐标系操作的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


#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);
   
三维图形c语言,可以缩放图形。 /* Note:Your choice is C IDE */ #include "stdio.h" #include "graphics.h" #include "math.h" void hua(int T[8][3]) { moveto(T[0][0]/T[0][2],T[0][1]/T[0][2]); lineto(T[1][0]/T[1][2],T[1][1]/T[1][2]); lineto(T[2][0]/T[2][2],T[2][1]/T[2][2]); lineto(T[3][0]/T[3][2],T[3][1]/T[3][2]); lineto(T[0][0]/T[0][2],T[0][1]/T[0][2]); moveto(T[4][0]/T[4][2],T[4][1]/T[4][2]); lineto(T[5][0]/T[5][2],T[5][1]/T[5][2]); lineto(T[6][0]/T[6][2],T[6][1]/T[6][2]); lineto(T[7][0]/T[7][2],T[7][1]/T[7][2]); lineto(T[4][0]/T[4][2],T[4][1]/T[4][2]); moveto(T[0][0]/T[0][2],T[0][1]/T[0][2]); lineto(T[4][0]/T[4][2],T[4][1]/T[4][2]); moveto(T[1][0]/T[1][2],T[1][1]/T[1][2]); lineto(T[5][0]/T[5][2],T[5][1]/T[5][2]); moveto(T[2][0]/T[2][2],T[2][1]/T[2][2]); lineto(T[6][0]/T[6][2],T[6][1]/T[6][2]); moveto(T[3][0]/T[3][2],T[3][1]/T[3][2]); lineto(T[7][0]/T[7][2],T[7][1]/T[7][2]); } /*/////////////////////////////////////////////////////////////////////////*/ void x(int T[8][3],float af) { int i; float theta =0.00017* af; for(i=0;i<8;i++) { T[i][0]=T[i][0]; T[i][1]=T[i][0]*0+T[i][1]*cos(theta)+T[i][2]*(-sin(theta)); T[i][2]=T[i][0]*0+T[i][1]*sin(theta)+T[i][2]*cos(theta); } hua(T); } /*//////////////////////////////////////////////////////////////////////*/ void y(int T[8][3],float af) { int i; float theta =0.00017* af; for(i=0;i<8;i++) { T[i][0]=T[i][0]*cos(theta)+T[i][2]*sin(theta); T[i][1]=T[i][1]; T[i][2]=T[i][0]*(-sin(theta))+T[i][2]*cos(theta); } hua(T); } /*/////////////////////////////////////////////////////////////////////////*/ void z(int T[8][3],float af) { int i; float theta =0.00017* af; for(i=0;i<8;i++) { T[i][0]=T[i][0]*cos(theta)+T[i][1]*(-sin(theta)); T[i][1]=T[i][1]*sin(theta)+T[i][1]*cos(theta); T[i][2]=T[i][2]; } hua(T); } /*//////////////////////////////////////////////////////////////*/ void projection(int T[8][3],float af,float af1) { int i; float theta =0.017* af; float theta1 =0.017* af1; for(i=0;i<8;i++) { T[i][0]=T[i][0]*cos(theta)+T[i][1]*(-sin(theta)); T[i][1]=0; T[i][2]=T[i][0]*(-sin(theta)*sin(theta1))+T[i][1]*(-cos(theta)*sin(theta1))+T[i][2]*cos(theta1); } hua(T); } /*////////////////////////////////////////////////////////////////////*/ void perspective(int T[8][4],float af,float af1,float q) { int i; float theta =0.017* af; float theta1 =0.017* af1; for(i=0;i<8;i++) { T[i][0]=T[i][0]*cos(theta)+T[i][1]*(-sin(theta)); T[i][1]=0; T[i][2]=T[i][0]*(-sin(theta)*sin(theta1))+T[i][1]*(-cos(theta)*sin(theta1))+T[i][2]*cos(theta1); T[i][3]=T[i][0]*q*sin(theta)*cos(theta1)+T[i][1]*q*cos(theta)*cos(theta1)+T[i][2]*q*sin(theta1)+T[i][3]; } hua(T); } /*//////////////////////////////////////////////////////////////////////*/ void Zperspective(int T[8][3]) { int i; for(i=0;i<8;i++) { T[i][0]=T[i][0]*0.707+T[i][1]*(-0.707); T[i][1]=0; T[i][2]=T[i][0]*(-0.408)+T[i][1]*(-0.408)+T[i][2]*(0.816); } hua(T); } /*==============================================================================================================*/ main() { int gdriver=DETECT,gmode; int T[8][3]={530,390,1,500,420,1,560,420,1,590,390,1,530,450,1,500,480,1,560,480,1,590,450,1}; int TT[8][3]={80,50,1,50,80,1,110,80,1,140,50,1,80,110,50,140,110,140,140,110,80,110,1}; float af,af1,q; initgraph(&gdriver,&gmode,""); cleardevice(); setbkcolor(9);setcolor(4); hua(T); printf("input af:"); scanf("%f",&af); x(T,af); /*****************************/ printf("input af:"); scanf("%f",&af); x(T,af); /*****************************/ printf("input af:"); scanf("%f",&af); x(T,af); /*****************************/ printf("input af:"); scanf("%f",&af); y(T,af); /*****************************/ printf("input af:"); scanf("%f",&af); z(T,af); /*****************************/ /* printf("input af,af1:"); scanf("%f%f",&af,&af1); projection(T,af,af1); printf("input af,af1,q:"); scanf("%f%f%f",&af,&af1,&q); perspective(T,af,af1,q); Zperspective(T); */ getch(); closegraph(); }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值