求助,需要一个函数
mathcad吧
全部回复
仅看楼主
level 3
bibo166 楼主
各位老师,偶尔知道了有这个软件,可是10年以上不看数学,很难有时间重新学习。想找大家帮个忙,提供个函数,最好是vb可执行的函数。
要求,在一个二维区域内,(举例,x :0到1;y :0到1),放入n个点,(预计100到400个)。点和点之间的距离大于等于d(d根据点数增加,而减小),以期望达到点随机,均匀布满区域的目的。简单使用rnd,不能得到理想的位置。
先谢谢各位了!
2016年01月19日 14点01分 1
level 11
一个矩形区域的随机布点,通过两个均匀分布的随机变量是肯定可以实现的。
不明白为何这样的方式没能满足你的需求,这个你得讲讲看。
2016年01月20日 00点01分 2
level 11
感觉说的不明确,vb6.0或者vba甚至.net处理矩阵计算是没有问题的。
2016年01月20日 01点01分 3
level 3
bibo166 楼主
目前我使用rnd方式,做出来的,主要两个问题,1,区域内有的点之间太紧密,有的又太稀疏,导致不够均匀。2,我使用了根据点数增加,缩小点距控制。但,点到一定数量后,就随机不到合适的点。
2016年01月20日 05点01分 4
如果结果不是随机的而是只有唯一解,那就按要求的模型计算点的位置再画点吧。
2016年01月21日 01点01分
回复
angelycs
:如果你的实际问题不是矩形区域,我之前倒是发过一个贴讲过这种情况下实现均匀取点的(概率论角度)算法 https://tieba.baidu.com/f?kz=4066574716
2016年01月21日 01点01分
上面的网址有问题,按这个网址访问 https://tieba.baidu.com/p/4066574716
2016年01月21日 01点01分
老师,我的需求就是矩形区域。
2016年01月21日 13点01分
吧务
level 13
楼主是想开发一种算法,其实他这个不是随机的(他说是随机:既然随机,肯定有可能疏密),就是想人为控制均匀,你还是去编程吧。
2016年01月20日 13点01分 5
level 3
bibo166 楼主
也请各位老师再关注下。能给指点。
2016年01月20日 18点01分 6
楼主你的问题说的太笼统,很多东西我们都不理解!你可以喝口水喘口气慢慢的详细的说一下。毕竟每个人的认知不同。
2016年01月21日 00点01分
如果各位老师有兴趣,我可以尽量完整把我的需求给大家说说。真的是隔行如隔山。数学能发挥其无限价值。
2016年01月21日 13点01分
level 12
这题有些难度,不是做不出来,但我想了几个方法生成的速度都很慢,他这个问题给我感觉是TSP问题的变种需要对平面上所有随机点进行两两距离的计算,并遍历。
有一个思路可以试试看,我现在仍旧太忙,仅说说思路,各位有兴趣的试试看吧:
(1)将画点的问题转化为画圆的问题,圆的半径等于指定两点间距离的1/2,所有圆与其他圆相切,得到的圆心坐标即为所求点坐标;
(2)圆心之间距离通过一个函数确定,函数的变量是所需点数和范围边界尺寸;
(3)如果需要更好的随机效果,就是给(2)求出的圆心间的距离加一个噪音即可。
嗯,以上的运行速度应该是我能想到的最快的建模速度了。
2016年01月21日 01点01分 7
老师您好,我的目的就是想画圆。出这个题时就简化成点了。我就是已编写了这样的程序,但是遇到了我后面回复的问题。
2016年01月21日 12点01分
吧务
level 13
吧主可能说中他的想法,他可能是数学建模遇到了难点。说白了他就是想在一个给定区域内,并以他给定边长为d的矩形在区域内的可以放置的最大个数。他这个不是一般的问题,还是去编程吧,我对编程不熟。
2016年01月21日 01点01分 8
level 13
这个真的有点难。我以[0,2]×[0,2]的区域内,以 d=0.05为标准设计了计算,很慢的!
2016年01月21日 07点01分 9
看效果不错。能说下您的想法?有多慢?比如300点,要多久。
2016年01月21日 12点01分
@bibo166 半分钟
2016年01月21日 12点01分
level 13
最多能有(2/0.05)^2=1600个点,这里绘制了1070个点,很不错了!
2016年01月21日 07点01分 10
老师,按照您这个算法,我是1 *1的区域,大致250几个点,我明天算下我的期望数。
2016年01月21日 13点01分
期望接近400,但实际很难,使用随机只能做到200左右,感觉差距有点大。
2016年01月22日 12点01分
level 13
这里对“放入n个点,(预计100到400个)。点和点之间的距离大于等于d(d根据点数增加,而减小),以期望达到点随机,均匀布满区域的目的。”做一说明:
设置了距离d就不要期望一定放入n个点,因为点事随机的,比如在[0,1]×[0,1]上以d=1为距离能放几个点呢?当然最多是4个,但是当随机点刚好在(0.5,0.5)时,就只能放一个点咯!
2016年01月21日 08点01分 11
是的。老师,这个d我会根据点数多少,评估其最小值。
2016年01月21日 12点01分
level 13
2016年01月21日 08点01分 13
level 12
嗯,这相当于理想气体和实际气体之间的区别。
2016年01月21日 09点01分 14
吧务
level 13
哈哈,直接用MC也可以做到(我把条件跟我一个以前同学说了下,他是学计算机C编程的,我根据他的思路),非常简单的。我的d=0.1就可以放下比你的多
2016年01月21日 10点01分 15
这个是给定距离d放下的最大点数
2016年01月21日 10点01分
注意随机性啊! 你的这个是规则的,不随机。
2016年01月21日 11点01分
@LNSZDZG 楼主强调均匀,随机就不可能了[呵呵] 就是按照间距生成就可
2016年01月21日 11点01分
您误解了, 均匀分布不等于规则排列!
2016年01月21日 11点01分
吧务
level 13
上图边界搞错了,从发0.05的
2016年01月21日 11点01分 16
1 2 尾页