【发布时间】:2015-05-15 06:04:51
【问题描述】:
基本上我要做的就是通过 IFS 生成一组点,并使用颜色图来显示每个点的多重性。换句话说,如果我们假设一个颜色图,其中高值更黄,低值更红,那么 IFS 重复生成的值将更黄。
我正在努力为此获得正确的结果。我尝试过的每一件事都产生了一个看起来很有趣的图像,但显然是不正确的,因为它与你在没有颜色映射的情况下简单地绘制点得到的结果大不相同。
以下是我很熟悉的基本代码,没有失败的颜色映射尝试。我该怎么做才能获得正确的颜色图?
我认为,基本策略是制作一个矩阵“mat”来保存点重数,并执行类似 plt.imshow(xs, ys, c=mat.cmap="...") 的操作。我尝试了不同的方法,但总是得到不正确的结果。
import numpy as np
import matplotlib.pyplot as plt
import random
def f(x, y, n):
N = np.array([[x, y]])
M = np.array([[1, 0], [0, 1]])
b = np.array([[.5], [0]])
b2 = np.array([[0], [.5]])
if n == 0:
return np.dot(M, N.T)
elif n == 1:
return np.dot(M, N.T) + b
elif n == 2:
return np.dot(M, N.T) + b2
elif n == 3:
return np.dot(M, N.T) - b
elif n == 4:
return np.dot(M, N.T) - b2
xs = [] # x coordinates
ys = [] # y coordinates
D = {} # point multiplicities
random.seed()
x = 1
y = 1
for i in range(0, 100000):
n = random.randint(1, 4)
V = f(x, y, n)
x = V.item(0)
y = V.item(1)
xs.append(x)
ys.append(y)
xi = round(x, 3)
yi = round(y, 3)
if (xi, yi) in D:
D[(xi, yi)] += 1
else:
D[(xi, yi)] = 1
plt.xlabel('x')
plt.ylabel('y')
plt.scatter(xs,ys, s=.05)
plt.autoscale(True, True, True)
plt.show()
【问题讨论】:
标签: python matplotlib fractals