当前位置: 代码迷 >> C语言 >> [求助]:如何编写随机布点程序?
  详细解决方案

[求助]:如何编写随机布点程序?

热度:330   发布时间:2007-03-25 13:32:27.0
[求助]:如何编写随机布点程序?
在4×4的正方形区域内,想随机生成25个点,任意点之间的距离≥0.8,也可以事先确定一个固定点如坐标(1,1),然后生成其他24个满足要求的点,如何编写程序,指点方法也行,谢谢大侠的帮忙
搜索更多相关的解决方案: 布点  随机  编写  

----------------解决方案--------------------------------------------------------

生成随即数

用rand()

想随机生成25个点,任意点之间的距离≥0.8
: 1)生成第一个点并其放到一个数组里存起来
2)点之间距离 计算
#include<stdio.h>
#include<math.h>
main()
{
float s;
int x=10,y=10;
s=sqrt(x*x+y*y);
printf("%f",s);
getch();
}
3)在生成一个点 符合条件 (与前边所有确定的点的距离比较>0.8) 的点然后存到数组中..直到数组存满


我的思路是这样
但是这样写 的效率可能不高 别的方法还有
.........





[此贴子已经被作者于2007-3-25 15:17:04编辑过]


----------------解决方案--------------------------------------------------------

我觉得可以用筛法(效率比较低):
1:取1个点D1,把以这个点为圆心,半径为0.8的区域定义为S1;
2:随机生成1个点D2,如果不在S1内,将它的区域定义为S2;
如果在S1内,重新生成;
3:随机生成1个点Dn,如果不在S1、S2、...、S(n-1)内,将区域定义为Sn
不过有个问题:4×4=16,pi×0.4×0.4×25=12.57<16 ,空间的余量不多,有可能前面的点放了以后,最后几个点怎么也没法放进去,这时如果重新分配,效率就更低了。
想效率高必须对取点的范围加限制,这个就得好好想想了


----------------解决方案--------------------------------------------------------
  相关解决方案