我得到了一個建構式:
Circle::Circle(const Point& c, float r) {
x_ = c.getX();
y_ = c.getY();
r_ = r;
}
如圖所示,所有值都已初始化。在我擁有的引數中Point&-這只允許我使用來自不同類的函式來獲取 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。
在我的功能中,我嘗試過這個:
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)?
uj5u.com熱心網友回復:
要檢查點是否在圓內,您需要實作此公式(<如果您不需要圓周上的點,則嚴格):
(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())))
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/410939.html
標籤:
上一篇:隱藏作業表并回傳上一個作業表按鈕
下一篇:非軸交叉線性函式方程
