h****a 发帖数: 580 | 1 【 以下文字转载自 Mathematics 讨论区 】
发信人: hpanda (panda), 信区: Mathematics
标 题: 请问如何在球体表面均匀分布N个点(赠送包子)
发信站: BBS 未名空间站 (Thu Oct 30 11:47:20 2008)
诚心诚意向各位请教一个问题:假设有一个半径为R的球,如何在球面均匀分布N个点?
这里的“均匀”并不要求数学上的严格,只要最近的点点距离对所有的点都大致相等就
可以。关键是要容易通过一段程序来实现,也就是说,假设球心位于XYZ坐标系的原点
,向程序输入两个参数:半径R,点数N,程序运算后能给出N个坐标。
多谢!若哪位大侠能给出解决方案,有包子赠送。 |
a**d 发帖数: 97 | 2 第一象限取1/8球面, 坐标 : (x, y, z) 满足关系 x^2+y^2+z^2 = R^2
在[0,R]范围内,随机生成 [x,y], 求出z. 如果z小于零,放弃该点。
直到生成N/8个点为止
不知道怎么样,能否解决你的问题?
【在 h****a 的大作中提到】 : 【 以下文字转载自 Mathematics 讨论区 】 : 发信人: hpanda (panda), 信区: Mathematics : 标 题: 请问如何在球体表面均匀分布N个点(赠送包子) : 发信站: BBS 未名空间站 (Thu Oct 30 11:47:20 2008) : 诚心诚意向各位请教一个问题:假设有一个半径为R的球,如何在球面均匀分布N个点? : 这里的“均匀”并不要求数学上的严格,只要最近的点点距离对所有的点都大致相等就 : 可以。关键是要容易通过一段程序来实现,也就是说,假设球心位于XYZ坐标系的原点 : ,向程序输入两个参数:半径R,点数N,程序运算后能给出N个坐标。 : 多谢!若哪位大侠能给出解决方案,有包子赠送。
|
S*********g 发帖数: 5298 | 3 球坐标?
p(theta) = sin theta
p(phi) = 1/2pi
【在 a**d 的大作中提到】 : 第一象限取1/8球面, 坐标 : (x, y, z) 满足关系 x^2+y^2+z^2 = R^2 : 在[0,R]范围内,随机生成 [x,y], 求出z. 如果z小于零,放弃该点。 : 直到生成N/8个点为止 : 不知道怎么样,能否解决你的问题?
|
m*****r 发帖数: 3822 | 4 你这个大至是多大至?
【在 h****a 的大作中提到】 : 【 以下文字转载自 Mathematics 讨论区 】 : 发信人: hpanda (panda), 信区: Mathematics : 标 题: 请问如何在球体表面均匀分布N个点(赠送包子) : 发信站: BBS 未名空间站 (Thu Oct 30 11:47:20 2008) : 诚心诚意向各位请教一个问题:假设有一个半径为R的球,如何在球面均匀分布N个点? : 这里的“均匀”并不要求数学上的严格,只要最近的点点距离对所有的点都大致相等就 : 可以。关键是要容易通过一段程序来实现,也就是说,假设球心位于XYZ坐标系的原点 : ,向程序输入两个参数:半径R,点数N,程序运算后能给出N个坐标。 : 多谢!若哪位大侠能给出解决方案,有包子赠送。
|
o****g 发帖数: 314 | 5 [-R, R]之间取均匀分布,得 x
[0, 2\pi]之间取均匀分布,得 \phi
y = \sin\phi
z = \sin\phi
注意不能通过均匀分布得到 \theta 和 \phi,然后 用 x = \sin\theta, y = \cos\
theta * \sin\phi 等得到一个球面的均匀分布
【在 h****a 的大作中提到】 : 【 以下文字转载自 Mathematics 讨论区 】 : 发信人: hpanda (panda), 信区: Mathematics : 标 题: 请问如何在球体表面均匀分布N个点(赠送包子) : 发信站: BBS 未名空间站 (Thu Oct 30 11:47:20 2008) : 诚心诚意向各位请教一个问题:假设有一个半径为R的球,如何在球面均匀分布N个点? : 这里的“均匀”并不要求数学上的严格,只要最近的点点距离对所有的点都大致相等就 : 可以。关键是要容易通过一段程序来实现,也就是说,假设球心位于XYZ坐标系的原点 : ,向程序输入两个参数:半径R,点数N,程序运算后能给出N个坐标。 : 多谢!若哪位大侠能给出解决方案,有包子赠送。
|
N***m 发帖数: 4460 | 6 随机的东西很难保证距离差不多
【在 a**d 的大作中提到】 : 第一象限取1/8球面, 坐标 : (x, y, z) 满足关系 x^2+y^2+z^2 = R^2 : 在[0,R]范围内,随机生成 [x,y], 求出z. 如果z小于零,放弃该点。 : 直到生成N/8个点为止 : 不知道怎么样,能否解决你的问题?
|
g***e 发帖数: 4074 | 7 首先,N必须很大,否则不能用随机生成来取点。
其次,ated的方法实际是在赤道面内随机取点,反映到球面上,并不是随机均匀分布。
SuperString的方法是对的。
总之,N比较小的时候这个方法不一定很好。因为增加一个点对原来的点根本没有影响
。 |
N***m 发帖数: 4460 | 8 随机的办法根本不行,信噪比和N没关
【在 g***e 的大作中提到】 : 首先,N必须很大,否则不能用随机生成来取点。 : 其次,ated的方法实际是在赤道面内随机取点,反映到球面上,并不是随机均匀分布。 : SuperString的方法是对的。 : 总之,N比较小的时候这个方法不一定很好。因为增加一个点对原来的点根本没有影响 : 。
|
g***e 发帖数: 4074 | 9 还有一个办法:
首先按照N个点,计算一个的每个点平均应该占有的面积,求出
一个半径r,然后取一个大概0.5r到0.7r的值,把每个点放大为
一个球面上的圆圈(当然用球面坐标更容易计算,不过这些占
有面积将会是准方块形状)。
从第一个点开始,每次生成一个随机点,确保不落入先前点所占
的圆圈内,否则重新生成。越往后,越难找到合适的点,但由于
我们取得占有面积比平均占有面积小,最后总能找到直到第N个
点。
这样会减小误差,但不可避免地同时增加运算。 |
h****a 发帖数: 580 | 10 I've found the following web page which is focusing on this problem:
http://www.ogre.nu/sphere.htm
Thank all of you for replying. |