簡體   English   中英

如何計算一個點是否在一個圓內

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM