他と重なっている円がいくつあるのかという問題であっていますでしょうか?
ある円c1とある円c2について重なっているかどうかは次のように判別できます。(c1とc2はCircleクラスで、中心点xとyと半径rのプロパティを持つとします)
Python
1if (c1.x - c2.x)**2 + (c1.y - c2.y)**2 < (c1.r + c2.r)**2
2 print("重なっている")
3else:
4 print("重なっていない")
中心点同士の距離がそれぞれの半径を足した値をよりも小さければ重なっており、同じであれば接しており、大きければ離れています。
これを、全ての円同士について調べていけば、重なっている円と重なっていない円が区別できます。
Python
1class Circle:
2 def __init__(self, x, y, r):
3 self.x = x
4 self.y = y
5 self.r = r
6 def overlap(self, other):
7 return (self.x - other.x)**2 + (self.y - other.y)**2 < (self.r + other.r)**2
8
9c_list = [
10 Circle(0.8, 1.0, 0.4),
11 Circle(2.3, 2.5, 0.6),
12 Circle(3.0, 3.0, 0.6),
13]
14
15overlap_list = [False] * len(c_list)
16
17for i in range(0, len(c_list)):
18 for j in range(i + 1, len(c_list)):
19 if c_list[i].overlap(c_list[j]):
20 overlap_list[i] = True
21 overlap_list[j] = True
22
23print(overlap_list.count(True))
もっと効率が良いアルゴリズムはあるかもしれません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/17 05:31
2017/07/17 06:24
退会済みユーザー
2017/07/17 08:07
2017/07/17 10:11