python DEF 代码
本文最后更新于501 天前,其中的信息可能已经过时,如有错误请发送邮件到2038899329@qq.com

以下代码需要在https://coding.qq.com/p5-lab/ 运行

1、转动眼珠的圆脸

def setup():
  size(800,600)


def draw():
  background(255)
  fill(255)
  circle(400,300,500)
  circle(305,180,180)
  circle(495,180,180)
  circle(400,300,40)
  circle(400,420,140)
  fill(0)
    
  x1 = map(mouseX,0,width,280,330)
  y1 = map(mouseY,0,height,155,195)
  circle(x1,y1,110)
    
  x2 = map(mouseX,0,width,470,520)
  y2 = map(mouseY,0,height,155,195)
  circle(x2,y2,110)

2、跟随鼠标移动的园圈

def setup():
    size(600,600)
    
    
def draw():
    circle(mouseX,mouseY,100)

3、互相作用的圆球

balls = [] # 存储所有圆球的全局变量,初始为空列表

def setup(): 
  size(800, 800) # 设定画布大小
  noStroke()  # 不绘制线条

def draw(): 
  background(30) # 黑灰色背景
  for i in range(len(balls)):
    fx = 0 # 第i号圆球,x方向所受合力
    fy = 0 # 第i号圆球,y方向所受合力
    for j in range(len(balls)): # 对其他所有球遍历
      if (i!=j):  # 对于不等于i的j
        dx = balls[j][0] - balls[i][0] # 两个小球x坐标差
        dy = balls[j][1] - balls[i][1] # 两个小球y坐标差   
        distance = sqrt(dx*dx + dy*dy) # 两个小球间的距离
        if distance < 1: # 防止距离过小,有除0的风险
          distance = 1
        # j号球对i号球的作用力大小
        f_mag = (distance - 300)* balls[j][4] 
        fx += f_mag*dx/distance # 求出x方向的受力,加到fx上
        fy += f_mag*dy/distance # 求出y方向的受力,加到fy上
    ax = fx/balls[i][4] *0.05  # 合力除以质量,计算两个方向的加速度     
    ay = fy/balls[i][4] *0.05  
    balls[i][2] = 0.99*balls[i][2] + 0.01*ax # 根据加速度更新速度      
    balls[i][3] = 0.99*balls[i][3] + 0.01*ay 
  
  for ball in balls:  # 对所有圆球遍历  
    ball[0] += ball[2]  # 根据x方向速度,更新x坐标
    ball[1] += ball[3]  # 根据y方向速度,更新y坐标 
    fill(ball[5],230)  # 设置填充颜色  
    circle(ball[0], ball[1], 2*ball[4]) # 画一个圆

def addBall(): # 添加一个新的圆球
  radius = random(5,20) # 随机半径
  # 随机颜色
  c = color(random(100,255),random(100,255),random(100,255)) 
  # ball = [x坐标,y坐标,x方向速度,y方向速度,半径,颜色]
  ball = [mouseX,mouseY,0,0,radius,c] # 当前圆球列表
  balls.append(ball) # 把圆球添加到balls中   
    
def mousePressed():  # 鼠标点击时
  addBall() # 添加一个新的圆球
    
def mouseDragged():  # 鼠标拖拽时
  if frameCount % 5 == 0: # 防止添加过多圆球
    addBall() # 添加一个新的圆球

def keyPressed(): # 当按下任意键盘按键时
  global balls # 全局变量
  if len(balls)>0: # 如果blls列表不为空
    balls = [] # 清空所有圆球

4,随风飘动的粒子

particles = [] # 存储所有粒子的全局变量,初始为空列表

def setup(): 
  size(1280, 800) # 设定画布大小
  noStroke()  # 不绘制线条
  for i in range(2000): # 生成2000个粒子
    x = random(0,width)  # 设置圆心x坐标
    y = random(0,height) # 设置圆心y坐标
    v_mag = random(1.0,2.0)  # 速度绝对值大小
    v_angle = random(-2*PI,2*PI) # 速度的方向
    c = color(random(100,255),random(100,255),random(100,255))
    particle = [x,y,v_mag,v_angle,c] # 当前粒子
    particles.append(particle) # 把粒子添加到particles中

def draw(): 
  fill(0, 10) # 设置填充色为黑色,透明度为10
  rect(0, 0, width, height) # 绘制一个半透明的大矩形
  fill(255) # 设置填充色为白色,用于下面绘制粒子
  for particle in particles:    
    noiseValue = noise(0.001*particle[0],10+0.001*particle[1] \
                       ,frameCount*0.005)
    particle[3] = map(noiseValue,0,1,-2*PI,PI*2) #速度方向随机扰动
    vx = particle[2]*cos(particle[3]) # x方向速度
    vy = particle[2]*sin(particle[3]) # y方向速度
    particle[0] = particle[0] + vx # x坐标变化
    particle[1] = particle[1] + vy # y坐标变化
    # 粒子碰到边界后随机出现
    if particle[0]<0 or particle[0]>width \
        or particle[1]<0 or particle[1]>height: 
      particle[0] = random(0,width)  # 设置圆心x坐标
      particle[1] = random(0,height) # 设置圆心y坐标
      r = map(sin(frameCount/75.0),-1,1,50,255) # 随机红色分量
      g = map(sin(frameCount/101.0),-1,1,75,255)  # 随机绿色分量
      b = map(sin(frameCount/151.0),-1,1,100,255) # 随机蓝色分量
      particle[4] = color(r,g,b) # 设置随机颜色
    
    fill(particle[4])  # 设置填充颜色  
    circle(particle[0], particle[1], 2) # 画一个直径为2的圆点

5、旋转的圆弧

def setup():  # 初始化函数,仅运行一次
  global spanAngle,spanAngleSpeed # 全局变量
  size(600, 600)  # 设定画面宽度、高度
  noFill()  # 不填充
  strokeWeight(3)  # 设置线条粗细
  spanAngle = 0  # 圆弧跨越的角度,初始为0 
  spanAngleSpeed = 0.5 # 圆弧跨越角度变化速度

def draw():  # 绘制函数,每帧重复运行
  global spanAngle,spanAngleSpeed # 全局变量
  background(255)  # 设置白色背景,并覆盖整个画面
  # 圆弧终点角度,随着帧率循环变大
  endAngle = 2*radians(frameCount % 360) 
  spanAngle = spanAngle + radians(spanAngleSpeed) # 圆弧跨越角度变化
  startAngle = endAngle - spanAngle # 求出圆弧起点角度
  
  if spanAngle > 2*PI or spanAngle < 0: # 当跨越角度达到2PI或0时
    spanAngleSpeed = -spanAngleSpeed # 更改跨越角度变化速度的方向
    
  for diam in range(50,width,50): # 圆弧直径从50开始遍历到width
    angleShift = radians(360*diam/width) # 不同直径圆弧有个偏移量
    arc(width/2,height/2,diam,diam,  # 绘制对应的各个圆弧
        startAngle+angleShift,endAngle+angleShift)  
一起加油哦~o(〃'▽'〃)o
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0协议
转载请注明文章地址及作者哦~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇