rzyzzxw 发表于 2018-10-19 11:28:00

【数学之美】基于加速度计的粒子发射系统

本帖最后由 rzyzzxw 于 2018-10-22 15:52 编辑

数学之美第三贴
郞咸蒙老师的粒子发射系统
代码全名是
基于加速度计的读数实时改变发射点位置的粒子系统
哈哈,名字够长够严谨
视频欣赏一下
http://v.youku.com/v_show/id_XMzg3NjU1MTg3Mg==.html?spm=a2h3j.8428770.3416059.1
无论怎么转动
粒子发射源总在下面
源源不断发送出智慧的
小点点
这小点点散发出魔幻的光
吸引我们好好学习天天向上
【代码】
https://github.com/yonghuming/mPython/blob/master/examples/particles/accelParticle.py 加速度计与粒子系统


'''
基于加速度计的读数实时改变发射点位置的粒子系统
感觉粒子系统的读数和板子的方向似乎有点问题
同时使用pixel和DispChar会导致显示巨卡
'''
from mpython import *
from time import sleep_ms
from random import randint
from collections import deque


class Ball():
    '''
    粒子类
    '''

    def __init__(self, x, y):
      self.x = x
      self.y = y

      self.vx = randint(-6, 6)
      self.vy = randint(-6, 6)

    def run(self):
      self.update()
      self.display()

    def update(self):

      self.x += self.vx
      self.y += self.vy

    def isDead(self):

      if self.x > 128 or self.x < 0 or self.y > 64 or self.y < 0:
            return True
      else:
            return False

    def display(self):
      display.pixel(self.x, self.y, 1)


class ParticleSystem():
    '''
    粒子系统类
    '''

    def __init__(self, x, y):
      self.particles = []
      self.x = x
      self.y = y
      for i in range(200):
            self.particles.append(Ball(self.x, self.y))

    def run(self):
      for p in self.particles:
            if p.isDead():
                p.x = self.x
                p.y = self.y
            p.run()


# 初始化粒子系统
ps = ParticleSystem(0, 0)

while True:

    sleep_ms(20)

    display.fill(0)

    x = accelerometer.get_y()
    y = accelerometer.get_x()
    ps.x = 128-int(x*64+64)
    ps.y = int(y*32+32)
    ps.run()
    # 把加速度计的读数

    display.show()

安卓机器人 发表于 2018-10-22 10:18:59

实时运行效果好:victory:
页: [1]
查看完整版本: 【数学之美】基于加速度计的粒子发射系统