Resolved: Program not working. Please check!
def trans1(x,y):
x1=0.5*x
y1=0.5*y
return x1,y1
def trans2(x,y):
x1=0.5*x+0.5
y1=0.5*y+0.5
return x1,y1
def trans3(x,y):
x1=0.5*x + 1
y1=0.5*y
return x1,y1
def sierpinski_triangle(x=0,y=0,n=10):
'''Sierpinski Triangle'''
transformation=[trans1,trans2,trans3]
a1,b1=[0.0],[0.0]
for i in range(n):
trans=choice(transformation)
a,b=trans(x,y)
a1.append(a)
b1.append(b)
plt.rc('figure',figsize=(16,16))
plt.plot(a1,b1,'o')
sierpinski_triangle()
The output is coming same for all range from 10-1000.
Hey Arkajit,
Thank you for reaching out!
Note the definition of your sierpinski_triangle()
function
def sierpinski_triangle(x=0,y=0,n=1000)
as well as the following line of code
a,b=trans(x,y)
Calling trans()
with parameters x
and y
results in evaluating the function at x=0
and y=0
each time. You will get three different outcomes depending on the choice of transformation function:
- The function trans1(x=0, y=0)
would always return (0, 0)
.
- The function trans2(x=0, y=0)
would always return (0.5, 0.5)
.
- The function trans3(x=0, y=0)
would always return (1, 0)
.
This is the reason why you plot only these three points in your graph.
To remedy this, change the following line of code
a,b=trans(x,y)
to instead read the following
a,b=trans(a,b)
In this way, you will always update the latest values of the variables a
and b
. Of course, you should also specify their initial values. You would therefore need to add the following line of code before the for
-loop:
a, b = 0.0, 0.0
Having done that, the parameters x and y become redundant and can be removed from the definition of the sierpinski_triangle()
function.
The final look of the function is the following:
def sierpinski_triangle(n=1000):
'''Sierpinski Triangle'''
transformation=[trans1,trans2,trans3]
a1,b1=[0.0],[0.0]
a, b = 0.0, 0.0
for i in range(n):
trans=choice(transformation)
a,b=trans(a,b)
a1.append(a)
b1.append(b)
plt.rc('figure',figsize=(16,16))
plt.plot(a1,b1,'o')
Hope this helped! Good luck on your Python journey!
Kind regards,
365 Hristina