如何计算一个点是否在圆内
How to calculate if a point is within a circle
我得到了一个构造函数:
Circle::Circle(const Point& c, float r) {
x_ = c.getX();
y_ = c.getY();
r_ = r;
}
所有值都已初始化,如图所示。在参数中我有 Point&
- 这只允许我使用来自不同 class 的函数获取 x 和 y 坐标。另外,我有“r”,它将接受半径值。
使用这个我想检查是否:如果 o 是一个圆,它 returns 当且仅当 p 在圆的内部或边界时才为真
例如,
我得到:Point p(1,2);
& Circle c(p,3);
我想检查 Point(3.9,2)
是在 Circle c(p,3);
的内部还是边界上
为了额外参考,我将提供 Point Constructor
:
Point::Point(float x, float y) {
x_ = x;
y_ = y;
}
初始化构造函数以允许我创建 getter 和 setter 以用于其他 classes。
在我的函数中我试过这个:
bool Circle::contains(const Point& p) const {
bool results;
if( ( (getX()-p.getX() ) * ( getX()-p.getX() ) ) + ( ( (getY()-p.getY() ) * ( getY()-p.getY() ) ) <= (getR()*getR())))
{
results = true;
}
else {results = false;}
return results;
}
这没有用。
给我的测试用例:
Point p(1,2);
Circle c(p,3);
if (!c.contains(p)) errorOut_("c does not contain p?",1);
if (!c.contains(Point(3.9,2))) errorOut_("c does not contain (3.9,2)?",1);
if (!c.contains(Point(3.1,4.1))) errorOut_("c does not contain (3.1,4.1)?",1);
if (!c.contains(Point(-1.1,4.1))) errorOut_("c does not contain (-1.1,4.1)?",1);
if (!c.contains(Point(-1.1,-0.1))) errorOut_("c does not contain (-1.1,-0.1)?",1);
if (!c.contains(Point(3.1,-0.1))) errorOut_("c does not contain (3.1,-0.1)?",1);
if (c.contains(Point(3.2,4.2))) errorOut_("c contains (3.2,4.2)?",1);
if (c.contains(Point(-1.2,4.2))) errorOut_("c contains (-1.2,4.2)?",1);
if (c.contains(Point(-1.2,-0.2))) errorOut_("c contains (-1.2,-0.2)?",1);
if (c.contains(Point(3.2,-0.2))) errorOut_("c contains (3.2,-0.2)?",1);
结果:
fail1: c contains (-1.2,4.2)?
fail1: c contains (-1.2,-0.2)?
fail1: c contains (3.2,-0.2)?
要检查点是否在圆内,需要实现这个公式(如果不需要圆周上的点,则严格<
):
(px-cx)*(px-cx) + (py-cy)*(py-cy) <= r*r
从点到中心的平方距离应小于平方半径(以避免 sqrt 计算)
以你为例
(3.9-1)^2+(2-2)^2 = 8.41 < 3*3=9 - inside
更正了您的功能:
bool Circle::contains(const Point& p) const {
return ( ( (getX()-p.getX() ) * ( getX()-p.getX() ) ) +
( ( (getY()-p.getY() ) * ( getY()-p.getY() ) ) <= (getR()*getR())))
}
我得到了一个构造函数:
Circle::Circle(const Point& c, float r) {
x_ = c.getX();
y_ = c.getY();
r_ = r;
}
所有值都已初始化,如图所示。在参数中我有 Point&
- 这只允许我使用来自不同 class 的函数获取 x 和 y 坐标。另外,我有“r”,它将接受半径值。
使用这个我想检查是否:如果 o 是一个圆,它 returns 当且仅当 p 在圆的内部或边界时才为真
例如,
我得到:Point p(1,2);
& Circle c(p,3);
我想检查 Point(3.9,2)
是在 Circle c(p,3);
为了额外参考,我将提供 Point Constructor
:
Point::Point(float x, float y) {
x_ = x;
y_ = y;
}
初始化构造函数以允许我创建 getter 和 setter 以用于其他 classes。
在我的函数中我试过这个:
bool Circle::contains(const Point& p) const {
bool results;
if( ( (getX()-p.getX() ) * ( getX()-p.getX() ) ) + ( ( (getY()-p.getY() ) * ( getY()-p.getY() ) ) <= (getR()*getR())))
{
results = true;
}
else {results = false;}
return results;
}
这没有用。
给我的测试用例:
Point p(1,2);
Circle c(p,3);
if (!c.contains(p)) errorOut_("c does not contain p?",1);
if (!c.contains(Point(3.9,2))) errorOut_("c does not contain (3.9,2)?",1);
if (!c.contains(Point(3.1,4.1))) errorOut_("c does not contain (3.1,4.1)?",1);
if (!c.contains(Point(-1.1,4.1))) errorOut_("c does not contain (-1.1,4.1)?",1);
if (!c.contains(Point(-1.1,-0.1))) errorOut_("c does not contain (-1.1,-0.1)?",1);
if (!c.contains(Point(3.1,-0.1))) errorOut_("c does not contain (3.1,-0.1)?",1);
if (c.contains(Point(3.2,4.2))) errorOut_("c contains (3.2,4.2)?",1);
if (c.contains(Point(-1.2,4.2))) errorOut_("c contains (-1.2,4.2)?",1);
if (c.contains(Point(-1.2,-0.2))) errorOut_("c contains (-1.2,-0.2)?",1);
if (c.contains(Point(3.2,-0.2))) errorOut_("c contains (3.2,-0.2)?",1);
结果:
fail1: c contains (-1.2,4.2)?
fail1: c contains (-1.2,-0.2)?
fail1: c contains (3.2,-0.2)?
要检查点是否在圆内,需要实现这个公式(如果不需要圆周上的点,则严格<
):
(px-cx)*(px-cx) + (py-cy)*(py-cy) <= r*r
从点到中心的平方距离应小于平方半径(以避免 sqrt 计算)
以你为例
(3.9-1)^2+(2-2)^2 = 8.41 < 3*3=9 - inside
更正了您的功能:
bool Circle::contains(const Point& p) const {
return ( ( (getX()-p.getX() ) * ( getX()-p.getX() ) ) +
( ( (getY()-p.getY() ) * ( getY()-p.getY() ) ) <= (getR()*getR())))
}