環境
Pythonで結合された円の面積を測定する必要があります。numpy 配列を使用する方法を思いつきました。まず、グリッド (numpy 配列) にゼロを入力します。グリッド内の各位置は 0.5cm の長さに対応します。次に、円の中心をグリッドにドロップし、グリッドでこの値を 1 に変更します。円の半径を知っているので、円の面積を計算できます。円の面積を知っているので、グリッドのゼロを変更して、円の面積に収まるようにします。次に、グリッド内の 1 の頻度をカウントし、これを使用して組み合わせた円の面積を計算します。これは、グリッド内の各位置の長さを知っているため、面積を計算できます。これは現在、非常に粗い方法です。アルゴリズムが完成したら、より細かい方法に変更する予定です。
例
以下に投稿した画像を見ると、私のアイデアをよりよく説明しています。グリッドには 2 つの円 (赤い線) があり、円の中心は青い四角でマークされ、円が占める領域は明るいオレンジ色で示されます。オレンジ色でマークされた領域を 1 に変更したいと考えています。現在、オレンジ色の正方形を水平および垂直に円の中心に変更できますが、中心からの斜めのボックスが問題を引き起こしています。
現在のコード
class area():
def make_grid(self):
'''
Each square in the grid represents 0.5 cm
'''
import numpy as np
grid = np.zeros((10,10))
square_length = 0.5
circles = {'c1':[[4,2],1.5],'c2':[[5,6],2.0]}
print grid
for key,val in circles.iteritems():
grid[val[0][0]][val[0][1]] = 1
area = int((val[1] - square_length)/0.5)
for i in xrange(1,area+1):
grid[val[0][0]][val[0][1]+i] = 1 # Change column vals in +ve direction
grid[val[0][0]][val[0][1]-i] = 1 # Chnage column vals in -ve direction
grid[val[0][0]+i][val[0][1]] = 1 # Chnage row vals in +ve direction
grid[val[0][0]-i][val[0][1]] = 1 # Chnage row vals in -ve direction
print ''
print grid
上記の辞書では、キーは円の名前、値の最初の要素は円の中心座標、2 番目の要素は円の半径です。
コードは次を出力します。
[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 1. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 1. 0. 0. 0. 1. 0. 0. 0.]
[ 1. 1. 1. 1. 1. 0. 1. 0. 0. 0.]
[ 0. 0. 1. 1. 1. 1. 1. 1. 1. 1.]
[ 0. 0. 1. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]