2017-10-16 8 views
0

私のC++コースに書き込むプログラムがあります。座標面では半径Rの円があります。円の中心は点(xc、yc)にあります。また、私は座標(例えばn = 2、座標は(1; 1)(-1; -1))を持つn点を持っています。助けてください:)座標(x; y)が円の内/外にある点の数を計算する方法

+2

これは今の数学の問題ではなく、プログラミングの1のように聞こえます。 – NathanOliver

+0

私が理解しているのは、値の集まり(ポイント)を持ち、それらのどれくらいが述語(円内の点)と一致するかを数えたいと思っています。あれは正しいですか? [std :: count_if](http://en.cppreference.com/w/cpp/algorithm/count)を参照してください。 –

+0

あなたはインターネットの「サークルの外側にある+ +ポイント」を検索して、たくさんの例を得ることができます。 –

答えて

0

円の中心から点までの距離を計算する必要があります。 2点間の距離の式は:

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 - 斜辺 - –

0

単純な数学は...四角の

面をピクセル単位でRを与えS = pi*r^2
によって計算され、Sは、ピクセル単位で来る...

注意することは価値があります離散平面上にないので、この方法は近似です。

より正確には(しかし、かなり遅く):
@Sandro答えは、あなたの平面上の各点までの距離を確認してください..あなたは検討する必要があります2つの最適化と

  1. あなたはピクセルのみx in [xc - r, xc + r] U y in [yc - r, yc + r]

  2. をチェックする必要があり、外側境界ボックス
    を除外
  3. が自動的にあなたが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

関連する問題