【问题标题】:How to plot randomly?如何随机绘制?
【发布时间】:2021-02-07 06:54:57
【问题描述】:

是否有可能有一个情节,比如This random triangle,但我们有玫瑰而不是.? 我的意思是,我们如何在随机位置绘制下面的玫瑰??

import numpy as np
import matplotlib.pyplot as plt
t,k = np.linspace(0,2*np.pi,1000),5


x = np.cos(k*t)*np.cos(t)
y = np.cos(k*t)*np.sin(t)


plt.plot(x,y,'r')
plt.axis('off')
plt.axis('square')
plt.show()

【问题讨论】:

    标签: python numpy matplotlib random


    【解决方案1】:

    是的!您只需将玫瑰图绘制在从链接问题中抽取的许多随机点上。

    首先我重构了该方法,使其返回在给定三角形内均匀采样的size 点:

    import numpy as np
    import matplotlib.pyplot as plt
    
    def trisample(A, B, C, size=1):
      r1 = np.random.rand(size)
      r2 = np.random.rand(size)
    
      s1 = np.sqrt(r1)
      p1 = 1 - s1
      p2 = (1 - r2) * s1
      p3 = r2 * s1
    
      x = A[0] * p1 + B[0] * p2 + C[0] * p3
      y = A[1] * p1 + B[1] * p2 + C[1] * p3
    
      return x, y
    

    接下来我们计算你的几朵玫瑰:

    t, k, z = np.linspace(0, np.pi, 5*5+1), 5, 0.1
    
    x_r = np.cos(k*t) * np.sin(t) * z
    y_r = np.cos(k*t) * np.cos(t) * z
    

    请注意,您的pi*2 表示它已绕轨道运行两次,所以我放弃了它,而且我每个“花瓣”只使用 5 个点来加快速度。 z 将玫瑰按比例缩小,使其适合三角形

    最后,我们对三角形中的一些点进行采样,并按照您的方式绘制它们:

    for x_t, y_t in zip(*trisample([1,1], [5,3], [2,5], 100)):
      plt.plot(x_r + x_t, y_r + y_t, lw=1)
    
    plt.axis('off')
    plt.axis('square');
    

    给出如下内容:

    【讨论】:

      【解决方案2】:

      你需要一个随机的玫瑰花起点。我想你可以这样:

      import numpy as np
      import matplotlib.pyplot as plt
      import random
      
      t,k = np.linspace(0,2*np.pi,1000),5
      
      x_start = random.randint(0, 10)
      y_start = random.randint(0, 10)
      
      x = x_start + np.cos(k*t)*np.cos(t)
      y = y_start + np.cos(k*t)*np.sin(t)
      
      
      plt.plot(x,y,'r')
      plt.axis('off')
      plt.axis('square')
      plt.show()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-31
        • 2017-04-04
        • 2012-03-07
        • 2015-06-16
        • 1970-01-01
        相关资源
        最近更新 更多