找回密码
  注册[Register]
查看: 307|回复: 7

[python] python实现满天樱花飘落效果

[复制链接]
发表于 2022-5-28 08:15 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

python实现满天樱花飘落效果

212009a1r1f4ddv85ppo5x.png

[Python] 纯文本查看 复制代码
import random
import cv2
import numpy as np
 
def cal(point,here):
    # 计算樱花中的坐标在屏幕中投影的坐标
    # here不断增大,delta不断减少
    delta = point[0] - here
    if delta==0:
        return [-1, -1, 1, 0, 0]
    x = point[1]/delta   # 投影在屏幕上x坐标
    y = point[2]/delta   # 投影在屏幕上y坐标
    r = point[3]/delta   # 星球半径
    return [x, y, r]
 
def display_all(sakura,here):
      result=[]
      for i in range(sakura_num):
            position = cal(sakura[i],here)
            result.append(position)
      return result
 
if __name__ == "__main__":
     height=1080
     width=1920
     step = 0.5
     min_r = 1
     max_r = 200
     sakura_num = 150
     x_far = 100*2
     y_far = width*x_far
     z_far = height*x_far
     here = 0
     sakura = [[0,0,0,0,0] for i in range(sakura_num)]
     cv2.namedWindow('sakura',0)
     while True:
           canvas=np.zeros((height,width,3),dtype=np.uint8)
           here+=step
           for i in range(sakura_num):
                  while True:
                          position = cal(sakura[i],here)
                          if (0 <= position[0] < width and
                              0 <= position[1] < height and sakura[i][0]>here):
                              break
                          else:
                              sakura[i][0] = random.randint(x_far, 2*x_far)+here
                              sakura[i][1] = random.randint(0, 2*y_far)
                              sakura[i][2] = random.randint(0, 2*z_far)
                              sakura[i][3] = random.randint(min_r, max_r)
           result=display_all(sakura,here)
           result=np.uint16(result).tolist()
           for i in range(sakura_num):
                radius=np.random.randint(3,15,size=(1,2)).tolist()[0]
                cv2.ellipse(canvas,tuple(result[i][0:2]),tuple(radius),30,0,360,color=(233,192,255),thickness = -1)
           cv2.imshow('sakura',canvas)
           if cv2.waitKey(10)==27:
               cv2.destroyAllWindows()
               break

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2022-5-28 08:15 | 显示全部楼层
多谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-28 08:34 | 显示全部楼层

感谢楼主的分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-28 08:39 | 显示全部楼层
谢谢@Thanks!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-28 08:40 | 显示全部楼层
谢谢大佬分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-28 09:05 | 显示全部楼层
6666666666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-28 09:14 | 显示全部楼层
很给力,大牛论坛有你更精彩
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-28 09:16 | 显示全部楼层
一定能改支持,谢谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

RSS订阅|手机版|小黑屋|大牛论坛 |我的广告

GMT+8, 2024-5-4 18:03 , Processed in 0.041858 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表