递归和定义的几何对象

作者图像

作者Bjorn Sjodin

2019年7月17日

递归定义结构工程中有用有用有用,比如比如很和和和超材料材料。关于关于一些应用应用应用的的简要概述概述概述概述分形的博客。篇,我们我们如何通过快速这种几何。。

App开发器开发器开发器递归的的对象对象对象

app开发器开发器的方法方法创建可以可以任何任何任何的的的方法方法方法方法,包括包括任务的的任务任务任务几何几何几何建模建模建模建模。。我们很很容易容易事实事实事实来支持递归。

本文,我们通过两著名递归的例子:二二维的的的Sierpinski地毯和三维的Menger海绵。这些代码短,因此因此完整它们它们列出列出列出,并且它们列出

Sierpinski地毯

下图中的,,create_carpet,根据根据输入参数将运行个递归层。它将设置设置为为为为为,以为为为为为为避免创建创建过过过过大大大的的的的的几何几何。。。。。。。。。。。。。。。。。。。。。。。(

如果(级别<1)错误(“地毯级别必须至少为1.”);如果(级别> 5)错误(“地毯级别最多需要5。”);计数器= 0;model.component(“ comp1”)。geom(“ geom1”)。feature()。clear();model.component(“ comp1”)。geom(“ geom1”)。自动建筑(“ off”);double cx0 = 0,cy0 = 0;双Si0 = 1;地毯(级别,CX0,CY0,SI0);model.component(“ comp1”)。geom(“ geom1”)。runpre(“ fin”);

输入在方法的设置窗口中定义参数,如下如下。。

显示create_carpet方法方法设置屏幕截图。。

反,方法,方法create_carpet调用下面的递归函数- -地毯,使用使用个:递归层递归层中心中心中心中心X坐标和y坐标,以及以及的。。

输入参数在的设置窗口中定义,如下如下示。

显示carpet_method的的参数列表的屏幕。。

下图所示方法地毯的::

int l =级别;双POSX,POSY,SI1;字符串strix;int l1;for(int i = 0; i <3; i ++){for(int j = 0; j <3; j ++){posx = cx+i*si-si;posy = cy+j*si-si;strix = toString(i)+toString(j);if((((i-1))+MATH.ABS((J-1)))> 0){if(l == 1){Counter = Counter+1;model.component(“ comp1”)。geom(“ geom1”)。创建(“ sq”+strix+“ c”+toString(counter),“ square”);使用(model.component(“ comp1”)。geom(“ geom1”)。功能(“ sq”+strix+“ c”+toString(counter))); set("base", "center"); set("size", new double[]{si}); set("pos", new double[]{posx, posy}); endwith(); model.component("comp1").geom("geom1").feature("sq"+strix+"C"+toString(counter)).label("Square"+strix+"C"+toString(counter)); } else { l1 = l-1; si1 = si/3; carpet(l1, posx, posy, si1); } } } }

为了获得的编号,使用使用变量计数(位于位于声明(),如下如下。。

屏幕截图了变量计数器的设置。。

上述两函数代码在编辑器中并排显示:

comsolMultiphysics®中方法编辑器截图截图,显示并排。。。

为了运行create_carpet,首先首先添加为方法调用。相应的按钮在开发工具选项卡中用。

屏幕截图显示如何通过方法按钮运行运行运行运行运行运行运行c方法

添加后,我们更改,并,并单击运行按钮。

屏幕截图了在调用时更改递归层。。

3时为为为时得到的的最终几何图形。

3 sierpinski地毯地毯几何。。

请注意,为第第层地毯的方形几何对象数为为为为为为第第第第第层地毯n。这,使用,使用create_carpet5,32,768个个个层数层数层数层数几何对象!!如果你想尝试尝试尝试尝试尝试尝试尝试尝试尝试尝试尝试尝试想想想想

Menger海绵

sierpinski sierpinski地毯地毯地毯对象对象对象几何几何的几何几何对象对象对象对象对象对象地毯地毯地毯地毯地毯地毯地毯地毯地毯地毯地毯地毯地毯地毯三维几何称为称为称为称为称为称为称为称为。。。。。。。。。。。。。。。地毯地毯地毯地毯地毯地毯地毯地毯地毯的的的的计算机处理能力对象。

使用以下方法create_sponge启动递归。

如果(级别<1)错误(“地毯级别必须至少为1.”);如果(级别> 5)错误(“地毯级别最多需要5。”);计数器= 0;model.component(“ comp1”)。geom(“ geom1”)。feature()。clear();model.component(“ comp1”)。geom(“ geom1”)。自动建筑(“ off”);double cx0 = 0,cy0 = 0;双Si0 = 1;地毯(级别,CX0,CY0,SI0);model.component(“ comp1”)。geom(“ geom1”)。runpre(“ fin”);

由上面调用并递归创建个个个海绵海绵,得到海绵,得到如下所示海绵

int l =级别;双POSX,POSY,SI1;字符串strix;int l1;for(int i = 0; i <3; i ++){for(int j = 0; j <3; j ++){posx = cx+i*si-si;posy = cy+j*si-si;strix = toString(i)+toString(j);if((((i-1))+MATH.ABS((J-1)))> 0){if(l == 1){Counter = Counter+1;model.component(“ comp1”)。geom(“ geom1”)。创建(“ sq”+strix+“ c”+toString(counter),“ square”);使用(model.component(“ comp1”)。geom(“ geom1”)。功能(“ sq”+strix+“ c”+toString(counter))); set("base", "center"); set("size", new double[]{si}); set("pos", new double[]{posx, posy}); endwith(); model.component("comp1").geom("geom1").feature("sq"+strix+"C"+toString(counter)).label("Square"+strix+"C"+toString(counter)); } else { l1 = l-1; si1 = si/3; carpet(l1, posx, posy, si1); } } } }

下图下图了层海绵层海绵最终几何形状。。

comsolMultiphysics®中递归定义对象图像。。

20n,上面上面的的层海绵有有有个块个块个块。。

根据关于创建科赫雪花雪花的方法方法的这,我们我们不不使用归来创建这类型结构。。

cad功能产品产品产品产品产品产品产品产品产品产品产品产品产品产品产品产品将这些这些几何对象对象对象导出导出导出导出导出为为为标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准标准

下一步

单击下面进入进入进入,尝试案例库案例库本


评论(0)

留言
登录|注册
正在... ...
浏览comsol博客