وکلا سیرپینسکی (Waclaw Sierpinski) ریاضی‌دانی لهستانی (1882-1969) است که شهرت خود را از طریق ارایه‌ی مجموعه‌ی سرپینسکی گاسکت به دست آورد. این مجموعه با یک مثلث متساوی الاضلاع آغاز می‌شود و در مرحله‌ی بعد یک مثلث از بخش مرکزی مثلث اولیه جدا می‌شود؛ مثلث جدا شده بر اساس نقاط میانی اضلاع اصلی تعریف می‌شود. به این ترتیب سرپینسکی گاسکت مجموعه حاصل شده از تکرار این روند نامتناهی روی مثلث‌ها می‌باشد. سیرپنسکی گاسکت شاید یکی از معروفترین فرکتال‌هایی‌ست که از اجزای خود متشابه بی‌انتها و پیچیده تولید می‌شوند.

در ادامه‌ی برنامه‌ی استودیو پنج‌اوهفت در آموختن و نوشتن Script به زیان Python در نرم افزار Rhinoceros، این بار اقدام به کدنویسی این فرکتال پر کاربرد در حوزه‌ی طراحی و معماری کردیم. در این Script پارامترهای اولیه هم‌چون شعاع دایره‌ی محیط به مثلت اولیه، مرکز دایره و تعداد دفعات زایش در فرکتال به برنامه داده می‌شود و خروجی، مثلث سرپینسکی می‌باشد. 

سرپینسکی

در گام بعدی سعی خواهیم کرد، چند ضلعی‌های دیگر را نیز بر اساس منطق فرکتالی سرپینسکی گاسکت به وجود آوریم. بنا داریم در کنار گزارش سیر یادگیری و کدنویسی‌های‌مان در این وبلاگ، کد‌های نوشته‌شده را نیز برای علاقه‌مندان به اشتراک بگذاریم و باور داریم این گونه اشتراک‌گذاشتن‌ها به یادگیری همه ما کمک شایانی خواهد کرد.

در زیر متن کد جهت بررسی و استفاده علاقمندان آمده است.

 

# This script has been written by 5o7studio in 12/26/2012
# Make sierpinski fractal
import rhinoscriptsyntax as rs

def find_midpoints(centers ,num ,radius):
    midpoints = []
    for i in range(len(centers)):
        center = centers[i]
        circle = rs.AddCircle(center ,radius)
        pts = rs.DivideCurve(circle ,num ,False ,True)
        rs.DeleteObject(circle)
        for j in range(len(pts)):
            line = rs.AddLine(center ,pts[j])
            midpoints.append(rs.CurveMidPoint(line))
            rs.DeleteObject(line)
            #rs.AddPoint(midpoints)  
    return midpoints

def polygon(segments , center , radius):
    circle = rs.AddCircle(center, radius)
    points = rs.DivideCurve(circle, segments)
    crv = rs.AddPolyline(points)
    line = rs.AddLine(rs.CurveStartPoint(crv),rs.CurveEndPoint(crv))
    rs.ExplodeCurves(crv,True)
    rs.DeleteObject(circle)

def main():
    radius = rs.GetReal("Get radius", 10)
    num = 3
    centers = rs.GetPoints("Get center")
    level = rs.GetInteger("Get level of generation",5)
    for i in range(level):
        centers = find_midpoints(centers ,num ,radius)
        radius = radius/2
    for i in range(len(centers)):
        poly = polygon(num , centers[i] , radius)

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