0

したがって、半径rが可変の2Dの円の中心点座標のランダム配列があります。特定の円が別の円と重なっているかどうかを判断する関数を作成する必要があります。明らかに、いずれかの次元でのそれらの分離が2r未満の場合、それらは重なります。これを行うための関数を作成しました:

          def x_overlap(n,r):
              radius_arr=array([2*r,2*r,2*r,2*r,2*r,2*r,2*r,2*r,2*r,2*r])
              diff_in_x=x-x[n]
              x_touch=radius_arr-diff_in_x
              for item in x_touch:
                  if item<0:
                      return "disk of ” n “ index overlaps with disk of ” x_touch.index(item) “ index in x direction"
                  else:
                      return "no overlaps for disk of ” n “ index in x direction"

          def y_overlap(n,r):
              radius_arr=array([2*r,2*r,2*r,2*r,2*r,2*r,2*r,2*r,2*r,2*r])
              diff_in_y=y-y[n]
              y_touch=radius_arr-diff_in_y
              for item in y_touch:
                  if item<0:
                      return "disk of “ n “ index overlaps with disk of ” y_touch.index(item) “ index in y direction"
                  else:
                      return "no overlaps for disk of “ n “ index in y direction"
          def overlap(n,r):
              return x_overlap(n,r) + " " + "and" + " " + y_overlap(n,r)

このコードでいくつか問題が発生しました。まず第一に、その非常に長いです。次に、関数を実行すると、nとy_touch.index(item)の参照がコンソールに表示されません。私が持っているコードの何が問題になっていますか?それを行うためのより良い方法はありますか?

ありがとうございました!

4

1 に答える 1

4

中心点間の距離が半径の合計よりも小さいかどうかを確認します。

def is_overlap(circle1, circle2):
    distance = ((circle1.x - circle2.x)**2 + (circle1.y - circle2.y)**2)**0.5

    return distance < circle1.r + circle2.r

あなたのコードは、このような位置にある円では機能しません(あなたのコードは実際には円を正方形のように扱います):

 o
o
于 2012-12-29T17:58:12.160 に答える