用tensorflow实现一个分形图制作

近几天,有网友给我看个小练习,要求用tensorflow计算的方式来实现一个分形图的输出。通过查看网上资料,大多以官方网站的实例为基础,或进行扩展实现分形图的绘制,而且使用的是PIL库。本文以matplotlib来绘制结果图。代码如下,相关功能见注释。
 

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

# 获取某每次运行时喂给的数据。
# 由中心点的坐标和边长生成用于得出其四角点坐标的参数
def get_params_iter(square_len=1.0, x=0.0, y=0.0):
    # 用于从中心点变换四个点的单位矩阵
    transf = np.array([[-1.0,1.0,1.0,-1.0],[1.0,1.0,-1.0,-1.0]])
    # 将中心点坐标扩展为4个角点x和y坐标
    points = np.array([np.full((4,),x), np.full((4,),y)])
    return square_len, transf, points

# 将正方形的四角的四个点坐标数据变换为列表,
# 并在末尾添加首个列表元素(画出完整正方形)
def get_xys(xs,ys):
    x = list(xs[:])
    y = list(ys[:])
    x.append(x[0])
    y.append(y[0])
    return x,y
# 迭代次数
times = 5
square_len_num = 1.0

xs = None
ys = None

# 定义占位数据
square_len = tf.placeholder(tf.float32)
transf = tf.placeholder(tf.float32)
points = tf.placeholder(tf.float32)

s, t, p = get_params_iter()

# 定义计算图
tr = tf.multiply(transf, square_len)
pts = tf.add(points, tr)

with tf.Session() as sess:
    for i in range(times):
        # 计算首个正方形对应坐标数据
        if xs is None:
            # 喂入数据,执行计算图进行计算
            res = sess.run(pts, feed_dict={square_len:s, transf:t, points:p})
            xs, ys = res
            plt.plot(*get_xys(xs, ys), 'g')
        else:
            temp_xs, temp_ys = [], []
            # 循环求出各顶点对应正方形的顶点坐标
            for x,y in zip(xs,ys):
                s, t, p = get_params_iter(square_len_num, x, y)
                # 喂入数据,计算各正方形顶点坐标
                res = sess.run(pts, feed_dict={square_len:s, transf:t, points:p})
                plt.plot(*get_xys(res[0], res[1]), 'g')
                temp_xs.extend(res[0])
                temp_ys.extend(res[1])
            xs = temp_xs
            ys = temp_ys
        # 边长减半
        square_len_num /= 2

plt.show()

运行结果如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值