#include
#include
#include
#include
#include
double a,b,c,al,be,ga,sal,sbe,sga,cal,cbe,cga,mm,nn,ss,f1,f2,f3;
/*以下是变量的说明
a,b,c:三个基矢的长度
al,be,ga:三个基矢之间的夹角(角度值)
sal,sbe,sga:三个基矢之间的夹角的正弦值
cal,cbe,cga:三个基矢之间的夹角的余弦值
mm,nn,ss:倒易点阵三个基矢之间的夹角的余弦值
f1,f2,f3:倒易点阵的三个基矢的长度
fvect:矢量类型
以下为函数说明
angle:计算倒易点阵中两个矢量间的夹角,即正空间中两个面的夹角
input:输入参数
*/
struct fvect
{
float x,y,z;
};
struct fvect cef,rif;
float angle(struct fvect aa,struct fvect bb)
{
float se1=aa.x*bb.x*f1*f1+aa.y*bb.y*f2*f2+aa.z*bb.z*f3*f3+(aa.x*bb.y+bb.x*aa.y)*ss+(aa.x*bb.z+bb.x*aa.z)*nn+(aa.y*bb.z+bb.y*aa.z)*mm;
float se2=sqrt(aa.x*aa.x*f1*f1+aa.y*aa.y*f2*f2+aa.z*aa.z*f3*f3+(aa.x*aa.y+aa.x+aa.y)*ss+(aa.x*aa.z+aa.x*aa.z)*nn+(aa.y*aa.z+aa.y*aa.z)*mm);
float se3=sqrt(bb.x*bb.x*f1*f1+bb.y*bb.y*f2*f2+bb.z*bb.z*f3*f3+(bb.x*bb.y+bb.x*bb.y)*ss+(bb.x*bb.z+bb.x*bb.z)*nn+(bb.y*bb.z+bb.y*bb.z)*mm);
float ee=se1/se2/se3;
if(fabs(ee)<0.01) ee=0;
return (ee);
}
void input(void)
{
double pi,angle1;int t;
struct fvect p1,p2,p3;
printf("please input a,b,c\n" ;
scanf("%lf %lf %lf",&a,&b,&c);
printf("please input al,be,ga\n" ;
scanf("%lf %lf %lf",&al,&be,&ga);
pi=3.1415926/180;t=1;
al=al*pi;be=be*pi;ga=ga*pi;
sal=sin(al);sbe=sin(be);sga=sin(ga);
cal=cos(al);cbe=cos(be);cga=cos(ga);
mm=(cal*cbe-cga)/sal/sbe;
nn=(cal*cga-cbe)/sal/sga;
ss=(cbe*cga-cal)/sbe/sga;
f1=a*sal/(sqrt(t-cal*cal-cbe*cbe-cga*cga+cal*cbe*cga+cal*cbe*cga));
f2=b*sbe/(sqrt(t-cal*cal-cbe*cbe-cga*cga+cal*cbe*cga+cal*cbe*cga));
f3=c*sga/(sqrt(t-cal*cal-cbe*cbe-cga*cga+cal*cbe*cga+cal*cbe*cga));
printf("please input the first plane\n" ;
scanf("%lf %lf %lf",&cef.x,&cef.y,&cef.z);
printf("please input the second plane\n" ;
scanf("%lf %lf %lf",&rif.x,&rif.y,&rif.z);
angle1=angle(cef,rif);
angle1=acos(angle1);
printf("The angle between two plane is %f",angle1*180/3.1415926);
}
void main()
{
input();
system("pause" ;
}
各位帮忙看看,这段代码有什么错误啵
运行时总是提示main函数返回值不能为空,改为int后,输入参数后的运行结果如附图
![]()
运行结果 |