در ادامه کدنویسی‌های استودیو پنج‌اوهفت، این بار نوبت به یکی دیگر از فرکتال‌های مشهور ریاضی یعنی درخت دو شاخه‌ای خود متشابه مندلبروت رسید. این فرکتال توسط ریاضی‌دان به نام بنوتی مندلبروت (1924-2010) -که او را پدر هندسه‌ی فرکتال می‌دانند- فرموله و به عالم ریاضیات معرفی گردید. 

کارکرد این فرکتال به این صورت است که ابتدا خطی عمودی به طول L ترسیم می‌گردد و پس از آن دو شاخه به طول COE*L از سر خط اولیه ترسیم می‌شود که زاویه ی مابین دو شاخه Thetaدر نظر گرفته می‌شود. این روال در مراحل بعدی نیز به صورت بازگشتی و تا بی‌نهایت اجرا می‌گردد. در اسکریپت زیر شرط خاتمه‌ی این فرایند کوچک‌تر شدن طول شاخه از 0.1 واحد در نظر گرفته شده است. 

در تصویر زیر با قرار دادن ضریب طول(COE) با معکوس عدد طلایی و هم‌چنین انتخاب زوایای 120،240،216،288 یک سری فرکتال درختی خاص تولید می شود که ویژگی self-avoiding دارد.

 


In this script has been tried to make a self-similar binary tree, which is one of the popular mathematical fractal that formulated by Benoit Mandelbrot (1924-2010) and Michael Frame.

For achieving to this goal we redefined the tree by three parameters:

  • length L (of the trunk)
  • an angle Theta (between to the branches)
  • ratio COE (coefficient branch lengths)

We start with a vertical Line (the trunk) of length L (L>0). At the top we attach two branches, each of length (COE*L).There is Theta degree Between Each of the branches of tree and to the free ends of each these branches we attach two branches of length COE*(COE*L) again, making an angleTheta between each branches of tree. We continue in this way until the branches length become less than 0.1 units.

you can see the script the following:

 

# This script has been written by 5o7studio in 01/17/2013
# Make Fractal tree

import rhinoscriptsyntax as rs

def Add_Fractal_Tree(crv,theta,r):
    lines=[]
    angle = 180-(theta/2)
    if rs.CurveLength(crv)> .01:
        str_pt = rs.CurveStartPoint(crv)
        end_pt = rs.CurveEndPoint(crv)
        middle_pt = Find_middle_pt(crv,r)
        line1 = rs.AddLine(end_pt,middle_pt)
        New_line1 = rs.RotateObject(line1,end_pt,angle,None,True)
        New_line2 = rs.RotateObject(line1,end_pt,-angle,None,False)
        lines.append(New_line1)
        lines.append(New_line2)
        Add_Fractal_Tree(lines[0],theta,r)
        Add_Fractal_Tree(lines[1],theta,r)

def Find_middle_pt(crv,r):
    domain = rs.CurveDomain(crv)
    r = 1-r
    t = (domain[1]-domain[0])*r
    middle_pt = rs.EvaluateCurve(crv,t)
    return middle_pt 

def main():
    crvs = rs.GetObjects("Select curves",rs.filter.curve)
    angle = rs.GetReal("Get angle between branchs",90)
    coefficient = rs.GetReal("Get coefficient",.5)
    rs.EnableRedraw(False)
    for i in range(len(crvs)):
        Add_Fractal_Tree(crvs[i],angle,coefficient)
    rs.EnableRedraw(True)

main()
نام پروژه
کارفرما
مکان پروژه
سال پروژه
برنامه‌ریزی
وضعیت
زیربنای ساخت
مساحت زمین
معمار مسئول
تیم طراحی معماری
طراحی سازه
تاسیسات الکتریکی
تاسیسات مکانیکی
پیمان‌کار
نمونه‌سازی
طراحی منظر
تصویرسازی
عکاس
لینک