69,373
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
typedef struct tagPoint
{
double x,y,z;
} Point;
void getResult(double*,double*,const Point[]);
int main()
{
Point points[4]={{0,0,0},{1,0,0},{0,1,0},{0,1,1}};
double s,t;
getResult(&s,&t,points);
system("cls");
printf("计算得到两个垂足分别为:\n[%5.2lf,%5.2lf,%5.2lf]\n[%5.2lf,%5.2lf,%5.2lf]\n",
points[0].x+(points[1].x-points[0].x)*s,points[0].y+(points[1].x-points[0].y)*s,points[0].z+(points[1].x-points[0].z)*s,
points[2].x+(points[3].x-points[2].x)*t,points[2].y+(points[3].x-points[2].y)*t,points[2].z+(points[3].x-points[2].z)*t);
return(0);
}
void getResult(double *s,double *t,const Point ps[])
{
double x[4][4],y[4][4],z[4][4],*p[3],a,b,c,d,e,f;
register int i,j;
for(i=0;i<3;i++)
for(j=i+1;j<4;j++)
{
x[i][j]=ps[i].x-ps[j].x;
y[i][j]=ps[i].y-ps[j].y;
z[i][j]=ps[i].z-ps[j].z;
}
p[0]=x,p[1]=y,p[2]=z;
a=b=c=e=f=0;
for(i=0;i<3;i++)
{
a+=p[i][0*4+1]*p[i][0*4+1]; //这里是用一维数组表示二维数组的方法:行号*总列数+列号,0*4+1即X[0][1],也就是X12
b+=p[i][0*4+1]*p[i][2*4+3];
c+=p[i][0*4+1]*p[i][0*4+2];
e+=p[i][2*4+3]*p[i][2*4+3];
f+=p[i][0*4+2]*p[i][2*4+3];
}
d=a*e-b*b;
*s=(c*e+b*f)/d;
*t=(a*f+b*c)/d;
}
#include<stdio.h>
typedef struct tagPoint
{
double x,y,z;
} Point;
void getResult(double*,double*,const Point[]);
int main()
{
Point points[4]={{0,0,0},{1,0,0},{0,1,0},{1,1,0}};
double s,t;
getResult(&s,&t,points);
system("cls");
printf("计算得到两个垂足分别为:\n[%5.2lf,%5.2lf,%5.2lf]\n[%5.2lf,%5.2lf,%5.2lf]\n",
points[0].x+(points[1].x-points[0].x)*s,points[0].y+(points[1].x-points[0].y)*s,points[0].z+(points[1].x-points[0].z)*s,
points[2].x+(points[3].x-points[2].x)*t,points[2].y+(points[3].x-points[2].y)*t,points[2].z+(points[3].x-points[2].z)*t);
return(0);
}
void getResult(double *s,double *t,const Point ps[])
{
double x[3][3],y[3][3],z[3][3],*p[3],a,b,c,d,e,f;
register int i,j;
for(i=0;i<2;i++)
for(j=i+1;j<3;j++)
{
x[i][j]=ps[i].x-ps[j].x;
y[i][j]=ps[i].y-ps[j].y;
z[i][j]=ps[i].z-ps[j].z;
}
p[0]=x,p[1]=y,p[2]=z;
a=b=c=e=f=0;
for(i=0;i<3;i++)
{
a+=p[i][0*3+1]*p[i][0*3+1]; //这里是用一维数组表示二维数组的方法:行号*总列数+列号,0*3+1即X[0][1],也就是X12
b+=p[i][0*3+1]*p[i][2*3+3];
c+=p[i][0*3+1]*p[i][0*3+2];
e+=p[i][2*3+3]*p[i][2*3+3];
f+=p[i][0*3+2]*p[i][2*3+3];
}
d=a*e-b*b;
*s=(c*e+b*f)/d;
*t=(a*f+b*c)/d;
}