我需要在JApplet的JPanel上绘制一些图形对象,它们是Graphics2D对象。
1)我想在随机坐标处绘制面板边界附近的圆圈,这样每次启动applet时它看起来都不同。 我想在某种程度上说,排除这部分,不要画那里 - 图像中的蓝色圆圈。
2)如果我可以均匀分布它们会很好,如果有4个圆圈,那么圆圈之间的距离几乎相同,但仍然随机到一定量。
3)如果绘制了前3个或4个圆圈,则绘制另一个较小的圆圈,并在未使用的面板上绘制随机大小的圆圈。
这似乎是一个奇怪的想法,但是有可能制作一个算法,根据一些约束条件为您提供中心坐标 (x-100)^ 2 +(y-100)^ 2> 200&amp;&amp; 0℃; x <400&amp; 0℃; y&lt; 400
现在我这样做: 将整个区域划分为一个网格,网格中的每个槽都是自由的,也可以在该槽内以随机坐标绘制圆圈,但仍在该槽内。
这个想法看起来不那么好,我想做得更好。 我在java中实现这一点,但也欢迎一般的想法。
答案 0 :(得分:0)
如果您只有圆圈,则“不重叠”测试很简单:当且仅当中心的距离大于其半径之和时(因为它们正在接触的相等),两个圆不重叠。对于重叠边框:距边框的距离必须大于半径。
因此,您可以继续生成随机坐标(使用固定或随机半径),然后检查是否有任何重叠。如果是,请重新开始,或者只丢弃重叠的那些并继续。
如果没有太多圈子,这个简单的算法就足够了。如果它开始花费太长时间,您可能会考虑使用一些空间数据结构,因此您只需要检查新点附近的圆圈。
您可能想要创建不在paintComponent方法内绘制的圆列表,而是在init()
或start()
方法(或从那里调用的某个线程)中绘制,因此绘画将不要花太长时间,并且圈子不会因为每次(甚至是部分)重画而改变。