• 締切済み

excelの乱数を用いて円が重ならない座標を選び出

excelの乱数を用いて円が重ならない座標を選び出す方法 2次元平面(0<x<100,0<y<100)に同じ半径rの円を重ならないように配置したいのですが、困ってます。 考えとしては 1.まず1個の円の中心座標を決める(R1(x1,y1)とする) 2.2個目の円を、1個目と重ならないよう配置できる中心座標R2(x2,y2)を乱数で決める。 ((x1-x2)^2+(y1-y2)^2>4r^2) 3.3個目の円を、1個目と2個目と重ならないように配置できる中心座標R3(x3,y3)を決める。 ((x1-x3)^2+(y1-y3)^2>4r^2かつ(x2-x3)^2+(y2-y3)^2>4r^2) これを繰り返す。 このような座標をexcelの乱数機能を用いて出すことは可能でしょうか? 皆様のお力をお貸しください。

みんなの回答

  • SI299792
  • ベストアンサー率48% (713/1472)
回答No.7

長いこと忘れていました。新しいプログラムを上げたので、確認して下さい。

  • SI299792
  • ベストアンサー率48% (713/1472)
回答No.6

>いくつか点が重なってしまいました。 私の予想では、スペックの問題で、描画が完了する前に次の処理に進んでしまうのだと思います。描画が完了するまで停止するようにプログラムを直せば解決すると思うのですが、他に原因があるかもしれません。 どのようなパラメータを入れて、どう重なったのか書いていただけますか。できれば重なった画像または実行結果をどこかにあげて下さい。 >0<x<1000,0<y<1000 画面上にに画像を描いて、重なるかどうか見ています。1000もPicel がありません。仮想画面が使えればいいのですが、やり方が判りません。 1/2にして、 500× 500に描くことになります。 ColorIndexで色を付けているので、最大個数は54です。 もっとできたほうがいいですが。

  • SI299792
  • ベストアンサー率48% (713/1472)
回答No.5

作ってみました。 半径が書いてなかったので、半径と個数を入力できるようにしました。 乱数でX座標・Y座標・半径を決めて、重ならなかったら描画し、重なったらやり直しています。 問題は、円が増えると時間がかかることと、無限ループになる可能性があることです。 失敗回数を設けました。失敗回数を100 にしておけば、100 回失敗すればもう描ける所は無いと判断し、終了します。最初からスベースを探して、そこに円を書けるようなロジックを考えれば、もっと早くたくさん書けると思うのですが。 https://box.yahoo.co.jp/guest/viewer?sid=box-l-bahport3hkq3a2qccdcvb63m3e-1001&uniqid=3bee3148-3e73-499f-b5a7-95c9aa999e82&viewtype=detail なお、OKWAVEは勝手に回答を改ざんします。上記リンクを消され、この回答が意味のないものになるかもしれません。

pareparemomo
質問者

補足

早速目当てのものを作っていただきありがとうございます。 とても感謝します。また、いくつか質問があります。 1.実際にダウンロードして実行してみたのですが、どうやらいくつか点が重なってしまいました。これはどうすれば直せるでしょう?excelの開発タブでプログラムを見たのですが、直す箇所が分かりません。 2.x,yの範囲を0<x<1000,0<y<1000にするにはどうすればよいでしょうか。 どうか、ご回答よろしくお願いします。

回答No.4

【お詫び】補足は撤回。先の回答でOK。多分・・・。

回答No.3

【補足】空チェックの考えに誤りあり。 4隅の円が囲まれていても真ん中が空いていることもある。この問題も解決する必要があります。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.2

誤差範囲(計算ステップ幅)を規定しておいたほうがいいと思います。

回答No.1

Q、このような座標をexcelの乱数機能を用いて出すことは可能でしょうか? A、可能だと思いますよ。 1、まず、1個の円の中心座標《R1(x1,y1)》を決める。   2次元平面(0<x<100,0<y<100)内に収まるという前提。 2、1個目の中心座標を記録する。   x1,y1 3、2個目の中心座標を乱数で発生させる。 4、x1,y1と重ならないかどうかをチェックする関数をコールする。   当然に2次元平面(0<x<100,0<y<100)内に収まるかどうかのチェックが先。 5、OKであれば、x2,y2を記録する。   x1,y1;x2,y2←文字列にアペンドして記録。 6、Noであれば、更に乱数で発生させる。 7、3個目も乱数にて発生させる。 8、x1,y1;x2,y2から一個づつ座標を取り出しチェックする関数をコールする。 さて、問題は、《もう、配置する余白がない》の判定をどうするのか?まあ、一番単純なやり方は、全ての既存の円に隣接して配置できる円が存在するのかをチェックすることですね。グルーッと360度チェック座標を移動させつつ仮想円を描いて、その範囲内に既存の座標があるかないかをチェック。かなりの力技ですが、特別なアルゴリズムなど不要で誰でも書けるコードでしょう。 70の爺は、とてもじゃないが挑む気力も体力もない。若い質問者なら出来るでしょう。頑張って下さい。

関連するQ&A

  • 3次元座標において3つの球の球面上の点が交差する

    3次元座標において3つの球の球面上の点が交差する 座標(x,y,z)を求める。 球1中心座標(x1,y1,z1)半径R1 球2中心座標(x2,y2,z2)半径R2 球3中心座標(x3,y3,z3)半径R3 球の方程式は以下になります。 (x-x1)X(x-x1)+(y-y1)X(y-y1)+(z-z1)X(z-z1)=R1XR1 (x-x2)X(x-x2)+(y-y2)X(y-y2)+(z-z2)X(z-z2)=R2XR2 (x-x3)X(x-x3)+(y-y3)X(y-y3)+(z-z3)X(z-z3)=R3XR3 これはもう地道に解くしかないのでしょうか?平面を使うのだとか 現実世界でアドバイスをもらったのですが一向に解けません… よろしくお願いいたします。

  • 直線と円に接する円の中心座標

    直線と円に接する円の中心座標を求める方法がわからなく困っています。どなたかご存知の方いませんか。 円の半径 R12.2(中心座標X-9.3, Y48.527) 直線   (X0, Y10.15)を始点として95度 接円   R17.3 ← この円の中心座標が知りたいです。

  • 円が移動した時の座標

     図なしで説明するのが難しいのですが、半径rの円、つまりX座標軸上の+X切片が(r、0)、Y座標軸上の-Y切片(0、-r)の円が右上に移動して、+X切片が(r+x1,0)、-Y切片(0、-r+y1)になった時に、円中心の座標は(0,0)からどこに移動するのでしょうか?。X軸、Y軸上の移動量から円中心の移動量を知りたいのですが、単純にベクトル(x1、y1)の移動とは円弧の分だけ違うと思うのですがどのように計算すればよいのかわかりません。  またX軸、Y軸上の90度の位置関係での移動量ではなく、X軸上の移動量x1とX軸から角度-α(時計回り方向にα度で90度未満)のα軸上の移動量α1、つまり+X切片が(r+x1,0)、+α切片が(0、-r+α1)へ移動とわかっている場合の円中心の座標は(0,0)からどこに移動するのでしょうか?。  三角関数使って簡単に算出できるのか?、それとも計算できないのか?。 よろしくお願いします。

  • 数学II~円が座標にそれぞれ接するとき~

    座標平面上の円がx軸,y軸の1点にそれぞれ接するとき,その円の中心は必ず4つの象限のうち1つある。 仮にその円の中心が第一象限にあったとして,その円の半径をrとすると,中点の座標は必ず(r,r)となる。 また仮にその円の中心が第三象限にあったなら,その座標は必ず(ーr,ーr)となる。 また仮にその円の中心が第二象限にあったなら,その座標は必ず(ーr,r)となる。 また仮にその円の中心が第四象限にあったなら,その座標は必ず(r,ーr)となる。 上記の間違いを教えてください。 回答お願いします。

  • 円の中心座標の求め方を教えてください

    とあるプログラムを作ろうとしています。 円弧を描くプログラムなのですが、中高で数学を真面目に勉強していなかったツケがまわってきたようで、あっけなく行き詰ってしまいました。 円周の二点の座標(x1,y1)(x2,y2)と、円の半径がわかっているのですが、それらから円の中心座標を求めたいと思っています。 公式などあったら、詳しい方、お願いします。

  • 円と円の関係

    1つの半径Rの円(以下大きな円)があるとし、それに対して半径rの円(以下小さな円)を当てようとしています。 ただし、小さな円の当て方は、Y軸に対して平行な当て方をしようとするとします。 大きな円の中心からx1だけ離れた場所に当てようとした時、小さな円の中心位置の座標を求めたいと考えています。 これだけであれば、x=x1 、 y=√((R+r)^2-x1^2) だけで終わりなのですが、 何かのミスで、当てる方向がY軸と平行な方向から30°ずれて当たってしまっている場合、 小さな円の中心がどのように変化するかを求めたいのですが、 どのようにして求めるべきか見当がつきません。 どなたか分かれば教えてください。

  • 3円に接する円の求め方

    円(1) 中心(x1,y1) 半径r1 円(2) 中心(x2,y2) 半径r2 円(3) 中心(x3,y3) 半径r3 上記の3円に接する円の中心点と半径の求め方を教えてください。 宜しくお願いいたします。

  • 教えてください:円の中心座標を求める

    x1,y1=3746,-4064    x2,y2=3974,-4066 の2点を通過し、r=4900の円弧を つくる時の、この円の中心座標はどのように求められるのでしょうか? お忙しい中たいへん恐縮ですが、教えてください。

  • X、α軸で円が移動した時のX、Y軸中心座標

    X軸と、X軸と角度θ(反時計回りが正)にあるα軸平面で、原点を中心とする半径rの円が移動して、X切片がrからr+x1、α切片がrからr+α1になった時、円の中心座標はX軸、Y軸平面で(0,0)からどこに移動するのでしょうか?。 以前同様の質問をして、この場合(x、y)=(r+x1、0)、((r+α1)cosθ,(r+α1)sinθ)の2点を通るので、円の方程式(x-p)^2+(y-q)^2=r^2に2点を代入して引き算し、p、qを求めれば良いと教えてもらいました。 しかし何度方程式を解いても作図した正解と答えが一致しません。誰か方程式を解いてみてくれませんでしょうか?。 よろしくお願いします。  

  • 円の中心座標の求め方

    座標(x,y)=(0,4.35)と(1.23,2.38)の2点を通る半径3.65cmの円の中心座標の求め方を教えてください。どうぞお願いします。

専門家に質問してみよう