h****a 发帖数: 580 | 1 【 以下文字转载自 Mathematics 讨论区 】
发信人: hpanda (panda), 信区: Mathematics
标 题: 请问如何在球体表面均匀分布N个点(赠送包子)
发信站: BBS 未名空间站 (Thu Oct 30 11:47:20 2008)
诚心诚意向各位请教一个问题:假设有一个半径为R的球,如何在球面均匀分布N个点?
这里的“均匀”并不要求数学上的严格,只要最近的点点距离对所有的点都大致相等就
可以。关键是要容易通过一段程序来实现,也就是说,假设球心位于XYZ坐标系的原点
,向程序输入两个参数:半径R,点数N,程序运算后能给出N个坐标。
多谢!若哪位大侠能给出解决方案,有包子赠送。 |
p**s 发帖数: 2707 | 2 N个点在大圆上均匀排一圈,就满足“最近的点点距离对所有的点都大致相等”
发包子吧
【在 h****a 的大作中提到】 : 【 以下文字转载自 Mathematics 讨论区 】 : 发信人: hpanda (panda), 信区: Mathematics : 标 题: 请问如何在球体表面均匀分布N个点(赠送包子) : 发信站: BBS 未名空间站 (Thu Oct 30 11:47:20 2008) : 诚心诚意向各位请教一个问题:假设有一个半径为R的球,如何在球面均匀分布N个点? : 这里的“均匀”并不要求数学上的严格,只要最近的点点距离对所有的点都大致相等就 : 可以。关键是要容易通过一段程序来实现,也就是说,假设球心位于XYZ坐标系的原点 : ,向程序输入两个参数:半径R,点数N,程序运算后能给出N个坐标。 : 多谢!若哪位大侠能给出解决方案,有包子赠送。
|
k**f 发帖数: 92 | 3 while(1){
产生三个[-r,r]的随机数xyz
如果x^2+y^2+z^2<=R^2 并且 x,y,z不全为0
return (x,y,z)/sqrt(x^2+y^2+z^2)
}
【在 h****a 的大作中提到】 : 【 以下文字转载自 Mathematics 讨论区 】 : 发信人: hpanda (panda), 信区: Mathematics : 标 题: 请问如何在球体表面均匀分布N个点(赠送包子) : 发信站: BBS 未名空间站 (Thu Oct 30 11:47:20 2008) : 诚心诚意向各位请教一个问题:假设有一个半径为R的球,如何在球面均匀分布N个点? : 这里的“均匀”并不要求数学上的严格,只要最近的点点距离对所有的点都大致相等就 : 可以。关键是要容易通过一段程序来实现,也就是说,假设球心位于XYZ坐标系的原点 : ,向程序输入两个参数:半径R,点数N,程序运算后能给出N个坐标。 : 多谢!若哪位大侠能给出解决方案,有包子赠送。
|
l***8 发帖数: 149 | 4 I think your algo is a good way to initialize the N points
But they're probably not very uniformly distributed on the surface
How about add some kind of spring network that causes points to
repell each other when they get close, and add some friction
then just let the system run for a while until it reaches
some kind of equilibrium
【在 k**f 的大作中提到】 : while(1){ : 产生三个[-r,r]的随机数xyz : 如果x^2+y^2+z^2<=R^2 并且 x,y,z不全为0 : return (x,y,z)/sqrt(x^2+y^2+z^2) : }
|
r****y 发帖数: 26819 | 5 这个return的是N个点的三维坐标?
【在 k**f 的大作中提到】 : while(1){ : 产生三个[-r,r]的随机数xyz : 如果x^2+y^2+z^2<=R^2 并且 x,y,z不全为0 : return (x,y,z)/sqrt(x^2+y^2+z^2) : }
|
c*****t 发帖数: 1879 | 6 Something like sphere triangulation?
http://www.mathworks.com/matlabcentral/fileexchange/1877
If not, probably a suitable approach would be do some rounds of
moving points iteratively. But that would be slow.
【在 h****a 的大作中提到】 : 【 以下文字转载自 Mathematics 讨论区 】 : 发信人: hpanda (panda), 信区: Mathematics : 标 题: 请问如何在球体表面均匀分布N个点(赠送包子) : 发信站: BBS 未名空间站 (Thu Oct 30 11:47:20 2008) : 诚心诚意向各位请教一个问题:假设有一个半径为R的球,如何在球面均匀分布N个点? : 这里的“均匀”并不要求数学上的严格,只要最近的点点距离对所有的点都大致相等就 : 可以。关键是要容易通过一段程序来实现,也就是说,假设球心位于XYZ坐标系的原点 : ,向程序输入两个参数:半径R,点数N,程序运算后能给出N个坐标。 : 多谢!若哪位大侠能给出解决方案,有包子赠送。
|
p****s 发帖数: 32405 | 7 人家说的均匀分布恐怕不是这个意思吧.
本来球体可以上上下下左右左右前前后后18摸现在只剩1摸了.
【在 p**s 的大作中提到】 : N个点在大圆上均匀排一圈,就满足“最近的点点距离对所有的点都大致相等” : 发包子吧
|
n******t 发帖数: 4406 | 8 慢了点。
比较好点的做法是用球坐标,
先uniform随机生成柱坐标,然后随机在相应的园上找一点就行了。
while(1){
产生三个[-r,r]的随机数xyz
如果x^2+y^2+z^2<=R^2 并且 x,y,z不全为0
return (x,y,z)/sqrt(x^2+y^2+z^2)
}
【在 k**f 的大作中提到】 : while(1){ : 产生三个[-r,r]的随机数xyz : 如果x^2+y^2+z^2<=R^2 并且 x,y,z不全为0 : return (x,y,z)/sqrt(x^2+y^2+z^2) : }
|
T*******i 发帖数: 4992 | 9 柱坐标到球坐标的映射会有distort
【在 n******t 的大作中提到】 : 慢了点。 : 比较好点的做法是用球坐标, : 先uniform随机生成柱坐标,然后随机在相应的园上找一点就行了。 : : while(1){ : 产生三个[-r,r]的随机数xyz : 如果x^2+y^2+z^2<=R^2 并且 x,y,z不全为0 : return (x,y,z)/sqrt(x^2+y^2+z^2) : }
|
n******t 发帖数: 4406 | 10 这个情况下没事,你仔细想想就知道了。
【在 T*******i 的大作中提到】 : 柱坐标到球坐标的映射会有distort
|
z*****m 发帖数: 119 | 11 你可以这样想,到达均匀分布的情况下之后,所有点的矢量和为零。也就是说对于每个点,其余点的矢量和应该是该点的反向矢量。注意,使用球坐标系
所以你可以试试下面的算法
points[1..k];
loop
maxdistance = 0;
foreach point in points
other = - sum (points - point);
point = (point * phi) + (other * (1 - phi);
maxdistance = max(maxdistance, other - point);
end foreach
while (maxdistance > threshold); |
l*******i 发帖数: 247 | |
h****a 发帖数: 580 | 13 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. |