hello,小伙伴们晚上好。好久不见,我来啦。
今天先不讲故事了,下次一定。
今天咱们就直奔主题,想必大家看标题就明白今天的内容了,没错,就是讲关于三维随机多边形骨料的脚本建模。最后有个上,没想到吧。其实下次还是讲它,为啥有个上呢。因为我最近忙着别的事了,实在没有时间去研究这些,短时间内没干出来,所以先写个上集,带着大家一起练习练习。下次我会补上完整版本的。
如果有想直接白嫖完整脚本的,那需要等下次了。这次是个半成品。想学习的,还是可以学到很多东西的,各位请细品。
今日任务
直观不?就是干这个,三维多面体骨料模型的建立。
下面就说,这个怎么干。
生成算法
之前就跟大家说过,算法是脚本的核心。算法,就像是一个人的逻辑,实现一个功能的逻辑。对于骨料这种,这么吊的东西,我这个外行是肯定干不出来的。根据牛顿爷爷所说,我看得远,是因为我站在巨人的肩膀上。所以,想看得远,我们也要站在巨人的肩膀上。
当然是看别人的文献啦。那么本文参考的文献如下:
我连着摘要一起粘过来,感兴趣的同学可以下载源文件看看。我生成骨料的脚本的算法,都是依据此文。谢谢这些大佬们。下面呢,我就对它文中的内容,做一个简单的解读。具体是怎么实现多边形骨料建模的。
算法的python脚本实现
完全是个人解读啊,在下书读的少,是个糙人。说的话比较通俗。没有文献讲的好。
1 随机骨料球
遇事不决,画图解决。画一遍大家就明白怎么做的了。
有必要展示我绘画的极度扎实的基本功了。灵魂画手。如果有绘画相关的商务合作,请加我好友,跟我联系一下,我收费不高的,人物肖像,风景都接,先付款后出图,概不退款啊,咳咳,打个广告。
请看上图。首先是个基体,也算是骨料的范围。长*宽*高 = length*width*height。我们的骨料都是限制在一个球里的。记住啊,这样的好处是,做干涉判断的时候真的特别简单,只需要判断每个球不要干涉就行了。
既然骨料被限制范围了,那么这个球的中心点坐标也同样被限制在一个范围了。我们首先随机一个骨料的半径,然后在随机一个圆心点坐标(x0,y0,z0)。脚本如下:
然后加个循环,随机一堆数据。为什么要做这一步,是因为讲究一个字,随机。骨料的半径随机,位置随机。
2 随机骨料的干涉判断
注意,除第一个之外,之后的随机的骨料半径以及中心点坐标都要做干涉判断。因为随机的位置有是有可能干涉的。再画个图解释一下:
随机之后,做干涉判断。然后保留没有干涉的数据,以列表的形式存储起来。下面我们就来写一下这个干涉的判断函数。我之前写了好多遍了,大家应该都明白了。
3 八面体基骨料的四边形生成
简单吧。以上都是基于数据层面的操作,还没有在abaqus生成任何东西。所以,接下来,就是利用这些数据的时候了,还是举个栗子吧。灵魂画手又上线,以一个球内部为例:
骨料的核心之一是构建基体骨料,就是我们今天用的8面体。构建8面体之前,得需要构成4边形。这一步,就是4边形的做法。由于是平面上随机,为了便于理解,我就直接在二维上演示:
其他随机点与点A的区别,就在于角度值的范围。所以,我们可以做个循环,分别求出这四点坐标。
4 八面体基骨料的顶点生成
这样,咱们的四边形就做好了。接下来,就是生成8面体,生成8面体就简单了,只需要在上下各随机一个点。与四边形连接起来就好了。
再画一个,演示一下:
其实上下的原理都一样,这里只展示一个。
4 八面体基骨料的顶点生成
数据部分已经做完了,最后只差建模了。展示一下核心脚本。核心中的核心,这三句话,只要涉及复杂建模的情况,都会用得到。由点到线再到面的建模方法,各位好好体会。
分析完了,脚本也写完了。接下来,就展示一下结果吧。
脚本运行结果
结果没毛病,大家可以自己下载一下玩玩。测试测试,当然这只是半成品,如果有需要做分析的,还需要等下集。
完整代码
完整脚本见公众号,虽然只是个半成品的,但是值得学习的地方还是很多的,也是培养一下我们复现别人算法的能力。大家可以自己尝试尝试,然后对照我的脚本,这样学起来更快。
下次我会接着这部分的讲,完善一下这部分,然后再把后面的内容讲完。期待ing。
另外,大家在公众号回复“脚本”或者“子程序”,就能看到我的github代码仓库了,里面有目前我所有文章的脚本和子程序,我就不每次都发了。今天的内容就到这里啦,我们下期见。88,大家晚安。