• 绘制水滴效果


     绘制水滴效果

     

    import tensorflow as tf

    import numpy as np

    import PIL.Image

    from cStringIO import StringIO

    from IPython.display import clear_output, Image, display

    def DisplayArray(a, fmt='jpeg', rng=[0,1]):

      """Display an array as a picture."""

      a = (a - rng[0])/float(rng[1] - rng[0])*255

      a = np.uint8(np.clip(a, 0, 255))

      f = StringIO()

      PIL.Image.fromarray(a).save(f, fmt)

      display(Image(data=f.getvalue()))

     

    sess = tf.InteractiveSession()

    def make_kernel(a):

      """Transform a 2D array into a convolution kernel"""

      a = np.asarray(a)

      a = a.reshape(list(a.shape) + [1,1])

      return tf.constant(a, dtype=1)

     

    def simple_conv(x, k):

      """A simplified 2D convolution operation"""

      x = tf.expand_dims(tf.expand_dims(x, 0), -1)

      y = tf.nn.depthwise_conv2d(x, k, [1, 1, 1, 1], padding='SAME')

      return y[0, :, :, 0]

     

    def laplace(x):

      """Compute the 2D laplacian of an array"""

      laplace_k = make_kernel([[0.5, 1.0, 0.5],

                               [1.0, -6., 1.0],

                               [0.5, 1.0, 0.5]])

      return simple_conv(x, laplace_k)

     

    N = 500

    # Initial Conditions -- some rain drops hit a pond

     

    # Set everything to zero

    u_init = np.zeros([N, N], dtype="float32")

    ut_init = np.zeros([N, N], dtype="float32")

     

    # Some rain drops hit a pond at random points

    for n in range(40):

      a,b = np.random.randint(0, N, 2)

      u_init[a,b] = np.random.uniform()

     

    DisplayArray(u_init, rng=[-0.1, 0.1])

     

    # Parameters:

    # eps -- time resolution

    # damping -- wave damping

    eps = tf.placeholder(tf.float32, shape=())

    damping = tf.placeholder(tf.float32, shape=())

     

    # Create variables for simulation state

    U  = tf.Variable(u_init)

    Ut = tf.Variable(ut_init)

     

    # Discretized PDE update rules

    U_ = U + eps * Ut

    Ut_ = Ut + eps * (laplace(U) - damping * Ut)

     

    # Operation to update the state

    step = tf.group(

      U.assign(U_),

      Ut.assign(Ut_))

    # Initialize state to initial conditions

    tf.initialize_all_variables().run()

     

    # Run 1000 steps of PDE

    for i in range(1000):

      # Step simulation

      step.run({eps: 0.03, damping: 0.04})

      # Visualize every 50 steps

      if i % 50 == 0:

        clear_output()

        DisplayArray(U.eval(), rng=[-0.1, 0.1])

     

  • 相关阅读:
    NOIP2010普及组T3 接水问题 ——S.B.S.
    【NOIP提高组2015D2T1】uva 714 copying books【二分答案】——yhx
    【NOIP合并果子】uva 10954 add all【贪心】——yhx
    #include <NOIP2009 Junior> 细胞分裂 ——using namespace wxl;
    #include <NOIP2008 Junior> 双栈排序 ——using namespace wxl;
    NOIP2010普及组 三国游戏 -SilverN
    NOIP2009 提高组T3 机器翻译 解题报告-S.B.S
    NOIP2010提高组乌龟棋 -SilverN
    NOIP2010提高组 机器翻译 -SilverN
    UVa 297 Quadtrees -SilverN
  • 原文地址:https://www.cnblogs.com/think90/p/7060795.html
Copyright © 2020-2023  润新知