python 分形

 

代码如下:

 


#!/usr/bin/env python
# -*-coding:UTF-8-*-#

from common import *
import Image, ImageFilter, math, sys, os, random

def modifyImageObj(img, matrix) :

    width, height = img.size   
   
    for h in range(0, height) :       
        for w in range(0, width) :
            pixel = matrix[h][w]
            img.putpixel((w, h), pixel)

    return img

def initMatrix(h, w, v = (0, 0, 0)) :
    result = []
    for _h in range(0, h) :
        row = []
        for _w in range(0, w) :
            row.append(v)
        result.append(row)
    return result

size = (600, 600)

img = Image.new('RGB', size)
h, w = size
matrix = initMatrix(h, w, (0, 0, 0))

m = []
m.append([-0.04, 0, -0.19, -0.47, -0.12, 0.3, 0.25])
m.append([0.65, 0, 0, 0.56, 0.06, 1.56, 0.25])
m.append([0.41, 0.46, -0.39, 0.61, 0.46, 0.4, 0.25])
m.append([0.52, -0.35, 0.25, 0.74, -0.48, 0.38, 0.25])

n = 0
x, y, a, b, c, d, e, f, newx, newy = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

while n < 300000 :
    r = random.uniform(0, 1)

    if r <= m[0][6] :
        a=m[0][0]
        b=m[0][1]
        c=m[0][2]
        d=m[0][3]
        e=m[0][4]
        f=m[0][5]
    elif r <= m[0][6] + m[1][6] :
        a=m[1][0]
        b=m[1][1]
        c=m[1][2]
        d=m[1][3]
        e=m[1][4]
        f=m[1][5]
    elif r <= m[0][6] + m[1][6] + m[2][6] :
        a=m[2][0]
        b=m[2][1]
        c=m[2][2]
        d=m[2][3]
        e=m[2][4]
        f=m[2][5]
    else :
        a=m[3][0]
        b=m[3][1]
        c=m[3][2]
        d=m[3][3]
        e=m[3][4]
        f=m[3][5]

    newx = (a * x) + (b * y) + e
    newy = (c * x) + (d * y) + f
    x = newx
    y = newy

    matrix[(int)(400 - 100 * y)][(int)(300 + 100 * x)] = ((int)(x * 50 * r), (int)(r * 100), (int)(y * 200 * r))

    n += 1

modifyImageObj(img, matrix)

img.show()

img.save('frac.jpg')

 

 


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值