【问题标题】:Random non- overlapping spheres in a cube立方体中的随机非重叠球体
【发布时间】:2014-08-25 20:59:19
【问题描述】:

我正在尝试使用 MATLAB 在立方体模型中生成随机球体。我已经发布了正在尝试开发的代码的一部分。一个约束是确保随机球体被限制在立方体内。半径介于 (0.15 mm - 0.55 mm) 之间。 变量(dims)是立方体的维度。暗淡 = [ 10 10 10 ] (立方体尺寸为10mm * 10mm * 10mm)

function [ c, r ] = randomSphere( dims )
r = 0.15 + ( 0.55 - 0.15) .* rand(1);
x = (10 - r) * rand(1) + r;
y = (10 - r) * rand(1) + r;
z = (10 - r) * rand(1) + r;
c = [ x y z];

关于改进代码的任何想法。生成的所有坐标都小于 1,即在 (0,1) 之间。我应该如何缩放坐标?说像 (3.5, 5.6, 6.7) 之类的东西也被限制在一个立方体内。

【问题讨论】:

  • 只是根据你的需要相乘和相加,例如0.4*rand(1)+0.15会生成一个0.15到0.55之间的随机#...
  • @natan 是的!我已经为'r'做了这个,它是球体的半径。我在确定大小为 10mm*10mm*10mm 的立方体内的球体坐标或位置时遇到问题。
  • 如果你知道如何生成一个区间内的随机数[a b]为什么不能生成一个区间内的三个随机数[a b]
  • 因此,还有一个额外的约束,即球体坐标必须位于立方体的维度内。
  • 这只是 x 中的区间 [a b],y 中的区间 [a b],以及 z 中的区间 [a b]。您可以根据需要设置a,b。您也可以在球内或球外随机采样,然后检查是否在球内,您仍然会均匀采样...

标签: matlab geometry


【解决方案1】:

你几乎是对的,这是一种方法:

function [ c, r ] = randomSphereGen()
r = 0.15 + ( 0.55 - 0.15) .* rand(1);
c = bsxfun(@times,(10 - 2*r) , rand(1,3)) + r;

【讨论】:

    猜你喜欢
    • 2020-04-12
    • 2019-01-21
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多