C++ 判断两个圆是否相交

定义一个Point类,其属性包括点的坐标,提供计算两点之间距离的方法;
定义一个圆Circle类,其属性包括圆心和半径;
创建两个圆形对象,提示用户输入,判断两圆是否相交。

#include <iostream>
#include <cmath>

using namespace std;

class Point
{
public:
	Point();
	~Point();
	void setPoint(double x, double y) {
		px = x;
		py = y;
	}
	double getDist(const Point& p2);

private:
	double px;
	double py;

};

class Circle
{
	double cx;
	double cy;
	double cr;
public:
	Circle()
	{
		cx = cy = cr = 0;
	}
	~Circle() {

	}
	void setCircle(double x, double y, double r);
	double getCx() { return cx; }
	double getCy() { return cy; }
	double getCr() { return cr; }
	void judgeXJ(const Circle& c2);
};
Point::Point()
{
	px = py = 0;
}
Point::~Point()
{

}
double Point::getDist(const Point& p2)
{
	return sqrt((px - p2.px) * (px - p2.px) + (py - py) * (py - p2.py));
}

void Circle::setCircle(const double x, const double y, const double r)
{
	if (r <= 0)
	{
		cout << "非法输入" << endl;
		exit(0);
	}
	cx = x;
	cy = y;
	cr = r;
}

void Circle::judgeXJ(const Circle& c2)
{
	double dist, dist2;
	Point p1, p2;

	p1.setPoint(cx, cy);
	p2.setPoint(c2.cx, c2.cy);

	dist = p1.getDist(p2);
	dist2 = sqrt((cr + c2.cr) * (cr + c2.cr));

	if (dist < dist2)cout << "相交" << endl;
	else if (dist > dist2)cout << "不相交" << endl;
	else cout << "相切" << endl;
}

int main()
{
	Circle c1, c2;
	double x1, y1, r1, x2, y2, r2;

	cout << "请输入圆1的坐标和半径double:(x,y,r):";
	cin >> x1 >> y1 >> r1;
	c1.setCircle(x1, y1, r1);

	cout << "请输入圆2的坐标和半径double:(x,y,r):";
	cin >> x2 >> y2 >> r2;
	c2.setCircle(x2, y2, r2);
	
	c1.judgeXJ(c2);

	return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C++中,可以使用数学几何的知识来判断两个是否相交判断两个是否相交的基本思路是两个心之间的距离,然后与两个的半径之和进行比较。 以下是一个示例的C++函数,用于判断两个是否相交: ```cpp #include <iostream> #include <cmath> struct Circle { double x; // 心的 x 坐标 double y; // 心的 y 坐标 double radius; // 的半径 }; bool circlesIntersect(const Circle& c1, const Circle& c2) { // 两个心之间的距离 double distance = std::sqrt(std::pow(c2.x - c1.x, 2) + std::pow(c2.y - c1.y, 2)); // 判断两个心距离是否小于两个的半径之和 if (distance <= c1.radius + c2.radius) { return true; // 相交 } else { return false; // 不相交 } } int main() { Circle circle1 = {0, 0, 3}; // 1的坐标为(0, 0),半径为3 Circle circle2 = {4, 0, 2}; // 2的坐标为(4, 0),半径为2 if (circlesIntersect(circle1, circle2)) { std::cout << "两个相交" << std::endl; } else { std::cout << "两个相交" << std::endl; } return 0; } ``` 在上述示例中,我们定义了一个 `Circle` 结构体来表示的信息。`circlesIntersect` 函数用于判断两个是否相交,使用欧几里得距离公式心之间的距离,并与两个的半径之和进行比较。最后,在 `main` 函数中创建两个,并调用 `circlesIntersect` 函数来判断它们是否相交。 希望能解答你的问题!如果还有其他疑问,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

banjitino

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值