struct point /*定义结构体类型*/
{
double x;
double y;
};
struct point makepoint(double x,double y) /*给坐标点赋值函数*/
{
struct point temp;
temp.x=x;
temp.y=y;
return temp;
}
double rule(struct point p1,struct point p2) /*求两点距离函数*/
{
return sqrt(((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)));
}
double aef(struct point a, struct point b) /*求坐标方位角函数*/
{
double r,z;
if (b.y==a.y) return 0.0; /*平行于X轴(测量坐标系)*/
if (b.x==a.x) return b.y-a.y>0?90.0:270.0; /*平行于Y轴*/
z=(b.y-a.y)/(b.x-a.x); /*正切值*/
r=atan(z)*180/3.141592654; /*反正切值即象限角*/
if (b.y-a.y<0&&b.x-a.x<0) return fabs(r)+180.0; /*第三象限*/
if (b.y-a.y>0&&b.x-a.x>0) return r; /*第一象限*/
if (b.y-a.y>0&&b.x-a.x<0) return 180.0-fabs(r); /*第二象限*/
if (b.y-a.y<0&&b.x-a.x>0) return 360.0-fabs(r); /*第四象限*/
}
int main(void) /*知三点坐标,求夹角*/
{
double x1,x2,y1,y2,x0,y0;
struct point p1,p2,p0; /*定义结构体变量*/
while (8)
{
printf("\t\t\t\t伟成工作室荣誉出品\n\n");
printf("请输入两端点坐标:");
scanf("%lf,%lf %lf,%lf" ,&x1,&y1,&x2,&y2);
printf("请输入(角)顶点坐标:");
scanf("%lf,%lf",&x0,&y0);
p1=makepoint(x1,y1); /*给结构体变量赋值*/
p2=makepoint(x2,y2);
p0=makepoint(x0,y0);
printf("\n顶点对边边长:%f\n",rule(p1,p2));
printf("顶点夹角为:%f\n",aef(p0,p1)-aef(p0,p2));
}
}