1 模型
一个100*100*100mm的方块基体内,存在着3种直径的骨料,分别为10mm,4mm,1mm。跟2D的一样,只是维度变了。
2 cae建模
2.1 打开cae,运行pythonReader
还是先在cae里建模,大家应该看得出,写脚本的套路都是一样的,现在cae里操作找函数然后改写。今天就不在rpy里写了,我们打开cae之后,直接打开pythonReader,没有这个工具的,看我之前一篇专栏,评论区置顶有这个阅读器的下载链接。非常好用。打开之后,就是这个样子的。有个一直置顶的,时刻展示rpy文件的内容。
2.2 画基体
首先建模,肯定是要画基体对不对,先把基体的函数弄出来。
然后不用我多说了吧,拷贝到开发环境下,改写一下,把重复的命令去掉,没用的命令去掉,变量赋值等等。
写完之后,如下,这个相必大家应该都没什么疑问了,改写的方法有很多种。尽量简单易读一点:
2.2 画骨料
大家可能遇到的困难就在于此,骨料的Part怎么画,先放个图。看一下成品。
说实话,如果有人能直接在Part里画出这样的,一定要教教我,我交学费。正常人在Part里都无从下手,所以当你在这里碰壁的时候,无法下手的时候,不如换个角度想。我们part里难做,但是assembly里是很容易实现的呀,是不是这个道理。只需要在assembly里装配成这个样子不就行了???你管他是几个,几十几百个Part,全导入assembly,有多少装多少。如果你这么一想的画,事情突然就变得简单起来。只需要画3个不同直径的球形骨料就行了。
我们在cae里先画个骨料。然后找函数:
把这些乱起八糟的东西都复制到开发环境下,改一改,加个循环,生成3不同直径的球。
测试一下,程序没有问题。(大家先过一遍思路,然后自己尝试着做,如果有不明白的地方,再看我的程序)
2.3 导入Assembly
把基体和测试的球都导入到Assembly里。观察函数是什么。
同样的办法,改写一下,这两句比较简单。
2.4 移动
这是cae操作的最后一步,也是最最最重要的一步,因为我们到现在还没说到是如何实现随机的。没错,就是通过assembly的移动命令。如果对每个骨料都进行移动,且移动命令的x、y、z坐标是随机的,那么不就是相当于生成随机的骨料了嘛。
如果大家有还没明白的地方,继续往下看,到后面你就明白了。
还是同样的办法,在cae里移动,记录函数。
然后改写,其实就是一行命令:
到此为止,我在cae的操作已经全部完成了。剩下的内容,就是算法实现了,我们需要置顶的函数都已经完全记录下来了。大家如果看到这里,已经明白怎么写了,请停一停,自己尝试一下。如果还有点懵的,继续往下看。
3 算法实现
其实到这里,我个人感觉跟2D的已经没什么区别了,唯一的不同就是2D可以直接建模,而3D需要借助于assembly。其他的接触判断,其实就是比2D多了一个维度而已。好,我们继续往下写:
这里的交叉判断函数我是把之前的2D函数直接拿来用的,就是稍作修改,因为距离的计算多了个维度。先生成一下直径为10的球,测试一下程序。
测试结果如下,球体之间并无接触,所以程序是没问题的
完全同样的办法,把生成直径4和1mm的程序写出来。细心的小伙伴应该发现了,这几个写法上是神似的,这种完全可以封装成函数,让你的代码看起来更加的精炼。我这里没有做了,大家可以自己想想,怎么写的又简单而又好看。
到此为止 ,我们的整个脚本就写完了,测试一下:
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删