刚在在开源中国上看到的这个问题:http://www.oschina.net/question/817257_90108
如何产生3个在[0-1]之间并且和为1的随机数?
?
解法:
a=rnd(),b=rnd()
随机数1=min(a, b)
随机数2=abs(a - b)
随机数3=1 - max(a, b)
# -*- coding:utf-8 -*-from visual import *import randompointer_x = arrow(pos=(0,0,0), axis=(1,0,0), shaftwidth=0.01)pointer_y = arrow(pos=(0,0,0), axis=(0,1,0), shaftwidth=0.01)pointer_z = arrow(pos=(0,0,0), axis=(0,0,1), shaftwidth=0.01)poslist=[];colorlist=[color.red,color.yellow,color.green]#方案一for i in xrange(10000): a=random.random() b=random.random() x1=min(a,b) x2=abs(a-b) x3=1-max(a,b) points(pos=(x1,x2,x3), size=2, color=random.choice(colorlist))
?
?
生成图像:
?
?
?
?
?
下面是一种容易想到的解法。生成是随机的,但分布不均匀。
?
不均匀解:
Double a=Math.random()
Double b=Math.random()*(1-a)
Double c=1-a-b
# -*- coding:utf-8 -*-from visual import *import randompointer_x = arrow(pos=(0,0,0), axis=(1,0,0), shaftwidth=0.01)pointer_y = arrow(pos=(0,0,0), axis=(0,1,0), shaftwidth=0.01)pointer_z = arrow(pos=(0,0,0), axis=(0,0,1), shaftwidth=0.01)poslist=[];colorlist=[color.red,color.yellow,color.green]#方案二for i in xrange(5000): x1=random.random() x2=random.uniform(0,1-x1) x3=1-x1-x2 points(pos=(x1,x2,x3), size=2, color=random.choice(colorlist))
?
?
?生成图像:
?
?