定义一个结构类型来表示二维空间中一个点(横坐标、纵坐标),并借助点的结构再定义一个结构类型来表示二维空间中的一个圆。使用上述两个结构类型,按照如下要求编写各子函数定义,计算平面点与圆之间的关系。
- 判断一个点是否在一个圆内;
- 计算一个点与圆之间的距离(该点与圆周上最近一点之间的距离);
- 计算两个圆之间的距离;
#include <stdio.h>
#include <math.h>
typedef struct
{
double x;//横坐标
double y;//纵坐标
}POINT;//定义点结构体
typedef struct
{
double r;
double x;
double y;
}CIRCLE;//定义圆结构体
int Judge(POINT p,CIRCLE c1,double *d);
double Distance1(POINT p,CIRCLE c1);
double Distance2(CIRCLE c1,CIRCLE c2);//声明各子函数
int main()
{
POINT point;
CIRCLE circle1,circle2;
double distance;
printf("输入点的坐标:");
scanf("%lf%lf",&(point.x),&(point.y));
printf("输入圆1的半径与圆心:");
scanf("%lf%lf%lf",&(circle1.r),&(circle1.x),&(circle1.y));
printf("输入圆2的半径与圆心:");
scanf("%lf%lf%lf",&(circle2.r),&(circle2.x),&(circle2.y));
if (Judge(point,circle1,&distance))//调用函数Judge
{
printf("点在圆内。\n");//如果函数结果为真,输出结果“点在圆内”
}
else
{
printf("点不在圆内。”\n");//反之输出“点不在圆内”
}
printf("点与圆1之间的距离为:%f\n",Distance1(point,circle1));//调用函数Distance1
printf("两个圆之间的距离为:%f\n",Distance2(circle1,circle2));//调用函数Distance2
return 0;
}
/*
采用0和1来表示真假,返回值为int型数据,根据函数定义原则2将函数头定为int
*/
int Judge(POINT p,CIRCLE c1,double *d)
{
*d=sqrt(pow(p.x - c1.x, 2) + pow(p.y - c1.y, 2));
//先调用pow函数计算出p.x - c1.x和p.y - c1.y, 2的二次方,然后调用sqrt函数计算出平方根,并将结果赋值给指针变量d
if(*d<=c1.r)
{
return 1;//如果*d<=c1.r,判断为真,返回1
}
else
{
return 0;//反之为假,返回0
}
}
double Distance1(POINT p,CIRCLE c1)//返回值为double型数据,根据函数定义原则2将函数头定为double
{
return sqrt(pow(p.x - c1.x, 2) + pow(p.y - c1.y, 2))-c1.r;
}
double Distance2(CIRCLE c1,CIRCLE c2)//返回值为double型数据,根据函数定义原则2将函数头定为double
{
return sqrt(pow(c2.x - c1.x, 2) + pow(c2.y - c1.y, 2))-c1.r-c2.r;
}