hello,大家好。我是你们的小伙伴,咱们又见面了。今天是2021年的第一天。可能你们看到的时候已经是第二天了啊。但是我写的时候确实是第一天的。外面其实阳光不错,但是我宅了。宅在家里看电影是真的自在啊,巴适的很。等我赚够了2亿存款,我宅在家里天天看电影。
自从上次跟大家说了问题之后,突然我收集的问题文档就多了好多。感谢各位看得起,但是有些问题我实在是不会。很惭愧。所以我只能挑我会的跟大家讲了,各位多担待。
今天就讲一个脚本吧,以前说要做的,今天来做了,我真快成职业讲abaqus的了,难道各位对我的爬虫技能不感兴趣吗?我决定做点数据可视化的东西,然后做点视频发b站出,秀一秀操作。引起各位的兴趣。兄弟们别学了编程天天怼abaqus,多多感受一下他们别的功能,找点自己喜欢的,享受一下编程的快乐。(你们不会真的因为喜欢abaqus才学这个的吧)
1 今日任务
今天讲一个脚本,多边形骨料的建模。其实跟我之前做的2D的圆、纤维等其实是一样的,区别就是画的图不一样嘛,然后生成的算法不一样。干涉判断的算法也有区别。这几个的脚本建模思路其实都是一样的。 写脚本的步骤和模式我就不讲了啊,打开pythonReader,边在cae里操作,边记录函数,然后改写,调试。老粉丝都懂。新粉丝们可以看我以前写的脚本文章,我讲的非常详细。
2 实现逻辑
写脚本最重要的是,你要知道你在干什么。一步步写,然后理一下思路,今天的思路我带着大家理一遍,主要的难点其实就是随机的多边形骨料怎么画。这个是今天的难点内容也是重点内容。我目前的想法是,先生成一个随机半径的圆,然后随机在圆上取点画多边形。相当于随机的是圆的内接多边形。不知道这种合不合适。如果大家有更好的想法,欢迎留言告诉我。 有了思路,定了目标之后。写一下脚本的逻辑:
1 首先是需要生成一个基体,这里我们用的矩形
2 画骨料。画骨料是在画在草图上的。主要分几个步骤
2.1 随机一个圆半径,以及圆心坐标;
2.2 判断这个圆有没有跟其他圆干涉,若有干涉,重新取圆;
2.3 随机生成几个角度值,代表在圆上取几个点;
2.4 画多边形
2.5 循环
3 切割基体。这里我们用Partition命令,把骨料的形状切出来。
4 完成脚本
3 脚本实现
今天我给大家边写,边展示结果。一般写脚本的时候,是写一点,然后运行调试一点,确认没问题之后,才能继续往下写。这个调试程序的老套路了,大家记得。之前有粉丝把子程序写完了,写的挺多的,很不容易,然后再调试,然后报错了,心里的草泥马飞腾的场面兄弟们自己脑部一下。然后问我......,我心里的.......
1 生成基体
这个我都不想说了,对于我的老粉丝来说。讲这个都有点对不起你们的档次。所以啊,我就不讲了,直接上代码。
谁要是问我这个的,头都给你们。。。。打烂。我不解释,自己看。运行之后的效果如下,100*50的2D平面矩形。
2 画骨料
开始我们的第二步,第二步是重点内容。也是写一点运行一点。然后调试找错。
2.1 随机一个圆半径,以及圆心坐标
这个也简单,随机3个变量,圆心坐标(x,y),以及半径radius。这个也很简单,代码如下,这里有个函数ConstructionCircleByCenterPerimeter:其实是画构造线的圆。大家知道什么是构造线吧,我个人再cad绘图里是非常喜欢这个的,因为构造线就相当于辅助线,是不影响你的草图的,可以随便画。(用creo多,特别喜欢构造线)
我再草图里化成构造线模式。随机生成100个,给大家看看效果。所以圆是可以生成的没问题的。那么接下来的问题的也很明显,这些圆干涉了,如果画多边形,肯定会干涉的。所以就是出现2.2的原因,要做干涉判断。不能让圆相交。
2.2 干涉判断
整个干涉判断的函数就是,两个圆的圆心距离要大于他们的半径和。所以我些的干涉函数如下:
是不是很简单明了。center是储存合格的圆的信息。round是随机生成的圆的信息。返回值是bool类型值。True or False。用于后续的判断,如果round符合条件,则加入center里,如果不符合,重新生成随机数。以此循环。整个前两部分的脚本整合如下:
这一部分的运行效果如下: 大家可以看出,每个圆都非常神奇的分开了。继续写,你会感受到这个美妙的过程,享受着脚本给你带来的快乐和成就感。
到此,我们的任务基本上已经完成了一半了。剩下的就是在每个圆上画多边形了。跟着我们之前的逻辑继续往下写。
2.3 随机生成几个角度值,代表在圆上取几个点
这里其实是把顶点坐标计算出来,先随机取点,然后在计算坐标。
2.4 画多边形
计算出多边形的顶点坐标后,利用line函数画一下就行了,注意要头尾相连。
2.5 循环
这里的循环是加在。对每个圆都做重复的操作。这个也比较简单,遍历完成后的效果如下:大家可以看到,其实已经是符合我们的预期了。
3 切割基体。这里我们用Partition命令,把骨料的形状切出来。
这个也很简单,一句话的命令
4 完成脚本,测试效果
到此为止,我们的整个脚本其实就已经写完了。那么测试一下最终的效果吧。当然,这是在下写的,运行是肯定没问题的。效果如下:
但是,问题来了。 我觉得它长的不好看,究其原因,是因为在圆上取随机点的时候,太随机了。就出现了这种细长细长的东西。应该还要加一点限制,把圆分为几个区域,然后每个点在各自的区域里随机,这样整个骨料看起来就非常的赏心悦目了。所以,还需要对脚本稍作修改。
5 修改脚本
修改后的效果如后图。 大家可以看到,其实稍作修改,那么整个效果是截然不同的。这就是算法的魅力,各位体会一下。脚本的源码我放在github里。还是以前的仓库里。
https://github.com/wuhuiguo/Abaqus
4 脚本测试
测试一:
测试二:
各位可以自己改骨料的大小,边数等等。可以给定值,也可以变量。大家自己下载玩一玩吧。 今天的内容呢,就到这里了。其实我自己写脚本是非常享受这个过程的,能看这这些东西随着我的想法而变是很快乐的。各位也是,享受这个过程。我们一起共勉。
我们下期再见啦。88
凡治众如治寡,分数是也。
斗众如斗寡,形名是也。