首页/文章/ 详情

对试样进行方格染色

1年前浏览1981

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

    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
      最近编辑:1年前
      lobby
      硕士 |擅长颗粒流PFC
      获赞 826粉丝 4315文章 85课程 21
      点赞
      收藏
      未登录
      还没有评论

      课程
      培训
      服务
      行家

      VIP会员 学习 福利任务 兑换礼品
      下载APP
      联系我们
      帮助与反馈