2017-10-16 67 views
0

我的程序可以在我的C++課程中編寫。在座標平面中,我們有半徑爲R的圓。圓心位於點(xc,yc)處。我還有n個座標點(例如n = 2和座標是(1; 1)(-1; -1))。我需要計算一個圓上有多少個點,它上面和外面有多少個點。請幫助:)如何計算座標(x; y)有多少個點位於圓圈內/上/外

+2

這聽起來像一個數學問題,現在,不是一種程序之一。 – NathanOliver

+0

我的理解是你有一個值(點)的集合,你想要計算它們有多少匹配一個謂詞(是圓內的點)。那是對的嗎?請參閱[std :: count_if](http://en.cppreference.com/w/cpp/algorithm/count)。 –

+0

聽起來像你可以通過在互聯網上搜索「圓圈外的C++點」來獲得一堆示例。 –

回答

0

您需要計算圓心與點之間的距離。距離的兩個點之間的計算公式爲:

d = sqrt((xc - x)^2 + (yc - y)^2) 

其中:(XC,YC) - 你的點的座標 - 圓心,(X,Y)的座標。

如果距離大於半徑再點是圈外人(d> R)

然後你需要重複此爲n個點,並記得有多少人在裏面,有多少在外面。就這樣。

現在你有一個算法,你可以嘗試編碼!

0

方程式:R^2 = (xc - x)^2 + (yc-y)^2其中(xc, yc)是圓心座標。 (x, y) - 點的座標,R - 半徑。所以:

double distance = sqrt((xc - x)*(xc - x) + (yc-y)*(yc-y)); 
if (distance < R) 
{ 
    // inside 
} 
else if(distance > R) 
{ 
    // outside 
} 
else 
{ 
    // on circle 
} 
+0

我現在覺得啞巴不明白..謝謝:)這個頁面比我的老師好多了 – Martynas

+0

https://www.johndcook.com/blog/2010/06/02/whats-so-hard-about-finding -a斜邊/ –

0

簡單的數學......一個正方形的

表面由像素S = pi*r^2
給定的R計算,S會進來像素...

這是值得要注意,這種方法是近似的,因爲它不是離散的平面

爲了更精確(雖然,相當慢):
指@Sandro答案,並檢查各點的距離上你的飛機..
與你可能要考慮兩個優化:

  1. 排除在外邊界框
    您需要檢查只像素x in [xc - r, xc + r] U y in [yc - r, yc + r]

  2. 自動包括落款方
    您可以在每一個像素x in (xc - sqrt(2)r, xc + sqrt(2)r) U (yc - sqrt(2)r, yc + sqrt(2)r)

引用:

Circles Inscribed in Squares

Squares Circumscribed by Circles

相關問題