吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4685|回复: 27
收起左侧

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

  [复制链接]
wapjltb 发表于 2022-5-27 21:21
[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

sakura.png

免费评分

参与人数 8吾爱币 +14 热心值 +6 收起 理由
ymhld + 1 + 1 用心讨论,共获提升!
大道宽又长 + 1 + 1 我很赞同!
Zeaf + 1 + 1 我很赞同!
夫子点灯 + 1 热心回复!
nshark + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
weidechan + 1 热心回复!
xdaifeng + 1 + 1 我很赞同!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wjl 发表于 2022-5-27 21:53
本帖最后由 wjl 于 2022-5-27 22:00 编辑

我的python版本是3.10,没法安装cv2模块
ERROR: Could not find a version that satisfies the requirement cv2 (from versions: none)
ERROR: No matching distribution found for cv2

后来查了一下原来安装命令是 pip install opencv-python,而不是 pip install cv2
FeiyuYip 发表于 2022-5-28 09:16
[Python] 纯文本查看 复制代码
if cv2.waitKey(10)==27:
               cv2.destroyAllWindows()
               break

应该是按esc退出 不然是死循环
ykl4747 发表于 2022-5-27 21:23
正准备找个代码,就看到楼主分享了,试一下
69332748a 发表于 2022-5-27 21:29
感谢楼主分享!!
xhj666 发表于 2022-5-27 21:50
还可以这样玩
leowarfate 发表于 2022-5-27 21:59
感谢楼主分享
xyq3q 发表于 2022-5-27 22:04
效果不错啊,感谢楼主分享!
wjl 发表于 2022-5-27 22:33
有bug吧,程序无法关闭,单击右上角的X也无法关闭
话痨司机啊 发表于 2022-5-27 22:43
numpy 这个是个神级的库~
Soar119 发表于 2022-5-27 23:17
关都关不掉,而且不太像樱花
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 06:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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