首页/文章/ 详情

对试样进行方格染色

2年前浏览2693


    这里介绍一个常用的对试样变形观察的方法——方格染色。这个方法的逻辑很简单,对试样错位染色就可以了。这里介绍一下代码结构。代码由两部分组成,第一部分是编写函数读写试样的尺寸范围。































def sousuoFanwei    local xyMinMax=array.create(2,2)        local x_min=1e100    local y_min=1e100    local x_max=-1e100    local y_max=-1e100    loop foreach bp ball.list        if x_min>ball.pos.x(bp)-ball.radius(bp) then            x_min=ball.pos.x(bp)-ball.radius(bp)         endif        if x_max<ball.pos.x(bp) ball.radius(bp) then            x_max=ball.pos.x(bp) ball.radius(bp)         endif                if y_min>ball.pos.y(bp)-ball.radius(bp) then            y_min=ball.pos.y(bp)-ball.radius(bp)         endif        if y_max<ball.pos.y(bp) ball.radius(bp) then            y_max=ball.pos.y(bp) ball.radius(bp)         endif    endloop    xyMinMax(1,1)=x_min    xyMinMax(1,2)=x_max    xyMinMax(2,1)=y_min    xyMinMax(2,2)=y_max    sousuoFanwei=xyMinMaxend



    这部分代码逻辑很简单,就是比较储存尺寸范围的值和颗粒实际值。这里注意,最小值对比的是颗粒位置减去颗粒的半径,最大值对比的是颗粒位置加上颗粒的半径。最后将这个储存在一个2阶数组里面,之后返回给函数值。


    第二部分就是染色方法,这里可以更改横向和纵向的方块数目,用户可以自己更改。首先执行sousuoFanwei函数得到尺寸范围,之后根据数目计算每个方格的宽和高。这里实现错位的逻辑也不难,就是看纵向和横向第几个方块,假设是横向第n个和纵向第m个,如果n m是偶数,就定义为gg1这个group,如果是奇数,就定义为gg2这个group,为了不打乱之前模型可能存在的group,这里都在slot 5位置上进行定义。






























def ranse    local xy_min_max=sousuoFanwei    local NWidth=20.0 ;横向方块数目    local NHeight=15.0;纵向数目       local stepwidth=(xy_min_max(1,2)-xy_min_max(1,1))/NWidth    local stepheight=(xy_min_max(2,2)-xy_min_max(2,1))/NHeight        loop local n (1,NWidth)        local minwidth=xy_min_max(1,1) stepwidth*(n-1)                loop local m (1,NHeight)            local minheight=xy_min_max(2,1) stepheight*(m-1)                        if (n m)/2-(n m)/2.0=0 then                command                    ball group gg1 slot 5 range x [minwidth] [minwidth stepwidth] ...                                        y [minheight] [minheight stepheight]                endcommand            else              command                    ball group gg2 slot 5 range x [minwidth] [minwidth stepwidth] ...                                        y [minheight] [minheight stepheight]                endcommand            endif        endloop    endloopend



只需要运行ranse函数就可以了,效果图如下:



    这样对于土体变形的观察是非常直观的,这里给出之前使用的案例,就比较能够直观看出剪切面的位置了。



来源:超级大的lobby
代码&命令科普PFC
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-09-28
最近编辑:2年前
lobby
硕士 |擅长颗粒流PFC
获赞 876粉丝 4959文章 83课程 22
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈