اجسام بازگشتی و هندسه تعریف شده بازگشتی

اجسام بازگشتی و هندسه تعریف شده بازگشتی

اجسام بازگشتی و هندسه تعریف شده بازگشتی
روش‌ها می‌توانند با داشتن تابعی که خود را در یک حلقه بازگشتی فراخوانی می‌کند، بازگشت را پشتیبانی کنند. مثال‌های زیر مدل‌های هندسی بازگشتی CAD یک فرش Sierpinski را به صورت دو بعدی و یک اسفنج منگر را به صورت سه بعدی ایجاد می‌کنند.
فرش سیرپینسکی
روش زیر، create_carpet ، بازگشت را به یک سطح بازگشتی خاص با توجه به یک پارامتر mslevel تعریف شده توسط کاربر، که در زیر تعریف‌های جهانی در Model Builder تعریف شده است، آغاز می‌کند. برای جلوگیری از ایجاد یک هندسه بسیار بزرگ، محدودیتی را در 5 سطح تعیین می کند. این روش فرض می کند که شما یک مؤلفه دو بعدی ایجاد کرده اید و یک شمارنده متغیر اسکالر عدد صحیح را اعلام کرده اید .
int level = (int) model.param().evaluate(“mslevel”);
if (level < 1)
  error(“Carpet level needs to be at least 1.”);
if (level > 5)
  error(“Carpet level needs to be at most 5.”);
counter = 0;
model.component(“comp1”).geom(“geom1”).feature().clear();
model.component(“comp1”).geom(“geom1”).autoRebuild(“off”);
double cx0 = 0, cy0 = 0;
double si0 = 1;
carpet(level, cx0, cy0, si0);
model.component(“comp1”).geom(“geom1”).runPre(“fin”);
متد create_carpet به نوبه خود تابع بازگشتی اصلی فرش را که در زیر فهرست شده است، با استفاده از چهار آرگومان ورودی برای سطح بازگشتی، مختصات مرکزی x – و y – و طول ضلع فعلی فراخوانی می‌کند.
آرگومان های ورودی مانند شکل زیر در پنجره تنظیمات متد تعریف می شوند.
کد فرش روش در زیر نشان داده شده است .
int l = level;
double posx, posy, si1;
String 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 ((Math.abs((i-1))+Math.abs((j-1))) > 0) {
      if (l == 1) {
        counter = counter+1;
        model.component(“comp1”).geom(“geom1”).create(“sq”+strix+”C”+          toString(counter), “Square”);
        with(model.component(“comp1”).geom(“geom1”).feature(“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);
      }
    }
  }
}
شکل زیر هندسه حاصل را برای یک فرش سطح 3 نشان می دهد.
توجه داشته باشید که تعداد اجسام هندسی مربع تعریف شده برای فرش سطح 3 512 است. تعداد اجسام هندسی برای فرش سطح N است. این بدان معناست که برای حداکثر سطح 5 تعیین شده توسط روش create_carpet ، هندسه حاصل دارای 32768 شی هندسی است.
اسفنج من
روش های فرش Sierpinski به راحتی به سه بعدی تعمیم می یابد. با این حال، در سه بعدی، باید مراقب باشید که اشیاء بیش از توانایی رایانه شما تولید نکنید. این روش فرض می کند که شما یک کامپوننت سه بعدی ایجاد کرده اید و یک شمارنده متغیر اسکالر عدد صحیح را اعلام کرده اید .
روش زیر، create_sponge ، بازگشت را آغاز می کند.
int level = (int) model.param().evaluate(“mslevel”);
if (level < 1)
  error(“Sponge level needs to be at least 1.”);
if (level > 3)
  error(“Sponge level needs to be at most 3.”);
counter = 0;
model.component(“comp1”).geom(“geom1”).feature().clear();
model.component(“comp1”).geom(“geom1”).autoRebuild(“off”);
double cx0 = 0, cy0 = 0, cz0 = 0;
double si0 = 1;
sponge(level, cx0, cy0, cz0, si0);
model.component(“comp1”).geom(“geom1”).runPre(“fin”);
The method sponge, shown below, is called by the above method and recursively creates a Menger sponge.
int l = level;
double posx, posy, posz, si1;
String strix;
int l1;
for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 3; j++) {
    for (int k = 0; k < 3; k++) {
      posx = cx+i*si-si;
      posy = cy+j*si-si;
      posz = cz+k*si-si;
      strix = toString(i)+toString(j)+toString(k);
      if ((Math.abs((i-1))+Math.abs((j-1))+Math.abs((k-1))) > 1) {
        if (l == 1) {
          counter = counter+1;
          model.component(“comp1”).geom(“geom1”).create(“blk”+strix+”C”+            toString(counter), “Block”);
          with(model.component(“comp1”).geom(“geom1”).feature(“blk”+strix+”C”+              toString(counter)));
            set(“base”, “center”);
            set(“size”, new String[]{toString(si), toString(si),               toString(si)});
            set(“pos”, new double[]{posx, posy, posz});
          endwith();
          model.component(“comp1”).geom(“geom1”).feature(“blk”+strix+”C”+              toString(counter)).label(“Block”+strix+”C”+toString(counter));
        } else {
          l1 = l-1;
          si1 = si/3;
          sponge(l1, posx, posy, posz, si1);
        }
      }
    }
  }
}
شکل زیر هندسه حاصل را برای یک اسفنج سطح 2 نشان می دهد.
در این حالت، تعداد اجسام هندسی با سطح N به 20 N افزایش می یابد و اسفنج سطح 2 که در بالا نشان داده شده است دارای 400 شی هندسه بلوکی است.
توجه داشته باشید که اگر هر یک از محصولات افزودنی برای عملکرد اضافی CAD دارید، می توانید این اشیاء هندسی را در قالب های استاندارد CAD صادر کنید. بدون محصولات افزودنی، می توانید هندسه مش را به هر یک از قالب های مش پشتیبانی شده صادر کنید.