![](/img/trans.png)
[英]How to calculate point on circle from angle between middle and other point on the circle
[英]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 的 function 獲取 x 和 y 坐標。 另外,我有“r”,它將采用半徑值。
使用它我想檢查是否:如果 o 是一個圓,當且僅當 p 在圓的內部或邊界上時,它才返回 true
例如,
給我: 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。
在我的 function 我試過這個:
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
更正了您的 function:
bool Circle::contains(const Point& p) const {
return ( ( (getX()-p.getX() ) * ( getX()-p.getX() ) ) +
( ( (getY()-p.getY() ) * ( getY()-p.getY() ) ) <= (getR()*getR())))
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.