前提・実現したいこと
プログラミング初心者で勉強中です。
現在opencvを使用し、numpyでランダムなxとyを抽出し、200×200の画面に中心座標(x,y)の半径10の円をランダム配置で10個生成し、画像表示させるプログラミングを学習しています。
その時円が重なることがあるので、「重複しないよう描画させる」のが目標です。
調べると円と円の衝突判定があり、これを用いて当たり判定し当たっていなければ描画、当たりなら描画予定の円の座標を削除するプログラミングにしようと考えています。
過去質問で恐らく類似質問を見つけ、このベストアンサーと同じ考え方でした。
https://teratail.com/questions/107389
しかし、その考え方のコード記述方法の実力が私にありませんでした。
→ppaul様の回答よりリストを使用することで可能だと考えています。
発生している問題・エラーメッセージ
そこでぶつかっている点が1点あります。(私の実力不足なのですが、、)
・当たり判定で使用する過去に描画したそれぞれの円の中心座標の記述方法が分かりません。
コードにするとどうなるのか(コードでなくても何かヒント)を教えて頂けると幸いです。
また、将来的に画像解析もしていこうと考えておりopencv以外にもおススメのライブラリなどあれば教えて欲しいです。
該当のソースコード
現在重複ありのソースコード
python3.9
1import cv2 2import numpy as np 3import random 4 5img=np.zeros((200, 200, 3), np.uint8) 6 7for i in range(10): 8 x=int(random.uniform(10,190)) 9 y=int(random.uniform(10,190)) 10 cv2.circle(img, ((x, y), 10), (255, 255, 0), -1) 11 12cv2.imshow("random",img) 13cv2.imwrite("random.png",img) 14 15cv2.waitKey(0) 16cv2.destroyAllWindows()
試したこと・やりたいこと
円の当たり判定と繰り返し
i=0 while i<10: x=int(random.uniform(10,190)) y=int(random.uniform(10,190)) if ((#過去のx座標 - x) * (#過去のx座標 - x) + (#過去のy座標 - y) * (#過去のy座標 - y)) > 20 * 20: cv2.circle(img, (x, y), 10, (255, 255, 0), -1)
上記で考えています。
#過去の座標部分の記述方法が知りたいです。
補足情報(FW/ツールのバージョンなど)
Python3.9
opencv_version = "4.5.3.56"
OS=Microsoft Windows [Version 10.0]
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/29 05:11
2021/07/29 05:20 編集
2021/07/29 05:41 編集
2021/07/29 05:48