• ← 无需注册,可直接使用QQ或百度账号登录

公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

–1 投票
2.0k 浏览

是这样的,我最终是想在一个矩形区域生成若干满足一定约束条件的任意四边形,用来模拟混凝土中石子的分布...

具体要求如下:

在100*100的矩形区域内生成n个满足如下条件的四边形

1.四边形出现的位置(可以按照四边形的形心或任一顶点的坐标作为四边形的位置)在矩形区域均匀随机分布;

2.四边形四条边最长边和最短边长度只比在3与1之间随机分布,且四个角最大角不超过150度,最小角不小于30度,用max和min这个参数控制所有随机生成的四边形的最长边的长度,最长边的长度在[min.max]之间服从均值为(min+max)/2,方差为s(可以赋给具体值)的正态分布(模拟石子的粒径级配,苹果 指出当要生成的四边形个数较大时,直径分布不可能按照正态分布,但目前还是按照正态分布编写吧);

3.生成的四边形互不相交互不包含;且所有四边形要在矩形区域内,不能与矩形边界相交;

4.如果可以的话,定义一个参数d,调节任意两个四边形之间的最小距离(就是构成两个四边形上的两组点集之间的最小距离),一个参数D作为所有四边形和矩形框边界之间的最小距离;

 

目前我按照这个代码(感谢 永),做出这样的效果,可是四边形的控制条件还没有加上:

(disk = Reap[
     region = BoundaryDiscretizeGraphics[Rectangle[{0, 0}, {20, 10}]];
     Do[p = RandomPoint[region];
      rad = 
       If[(tem = Abs[SignedRegionDistance[region, p]]) < .2, tem, 
        RandomReal[{.2, 
          Min[{tem, Min@(Subtract @@ RegionBounds@region)/40}]}]];
      region = 
       RegionDifference[region, DiscretizeRegion@Sow[Disk[p, rad]]], 
      200]][[-1, -1]];)
diskP = Polygon[(random = RandomPoint[#, 4])[[
      Last@FindShortestTour[random]]]] & /@ Circle @@@ disk;
Graphics[Transpose[{RandomColor[
    Hue[1/3, NormalDistribution[.6, .2], NormalDistribution[.6, .07]],
     diskP // Length], diskP}]]

这段代码中四边形是圆的内接四边形,只满足凸四边形的要求,其他控制条件不满足,大家看看如何使随机生成的四边形满足约束条件...

 

分类:绘图 | 用户: mma-2-2-2 (1.3k 分)
修改于 用户:mma-2-2-2
或者先只生成一个要求的四边形...
个人认为你这里的问题实在太冗长了,让有水平回答的人读起来太累。

我建议简化(精简)问题,并把字数减至一半,然后再开一贴。
看了一下,其中第2条实现起来很麻烦啊。能不能化简一下,或者转化为另一种适合编程的说法。
这几天没上社区,可是这个已经是最终要的效果,我想想该怎么简化
这几天没有上社区,我简化一下问题再开一贴

登录 或者 注册 后回答这个问题。

...