(图书介绍:童晶:《Python趣味创意编程》新书预告)

本章我们将实现互相作用的圆球,如图所示。首先实现多个随机的圆球,为圆球之间增加作用力,使其均匀分布到一个大圆内;然后实现鼠标交互,并能实现不同半径的圆球;最后学习函数的定义与使用,改进实现的代码。

9 互相作用的圆圈

视频教程:

最终代码:

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的jdx = 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 = [] # 清空所有圆球

实现效果:

练习:在画布中生成随机的圆,并保证所有圆不相交。

这一章主要讲解了无参数函数的定义、复合运算符等语法知识,实现了互相作用的圆球。用好函数可以避免程序开发的重复劳动,读者也可以尝试用函数改进之前章节实现的案例。

第9章 互相作用的圆球 (《Python趣味创意编程》教学视频)相关推荐

  1. 第15章 音乐可视化(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 15 音乐可视化 本章我们将实现音乐可视化的效果,如图所示.首先学习Minim库的下载配置,并利用Minim库播放音乐文件.绘制音 ...

  2. 第12章 粒子同心圆(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现粒子同心圆,如图所示.首先学习面向对象编程的知识,为粒子类添加成员变量与成员函数:然后实现一个面向对象版本的运动粒子 ...

  3. 第10章 随机山水画(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将绘制随机山水画,如图所示.首先学习HSB颜色模型,并实现天空颜色渐变的效果:接着利用柏林噪声,实现云朵和山脉的绘制:然后 ...

  4. 第5章 简易毛笔字(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现简易毛笔字程序,读者可以按下鼠标按键移动,在程序窗口写出毛笔字的效果,如图所示. 5 简易毛笔字 首先学习鼠标的交互 ...

  5. background 旋转_第4章 旋转的圆弧(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现旋转的圆弧,如图所示.首先学习圆弧的绘制和旋转:接着利用全局变量实现圆弧逐渐变长,学习if选择语句,实现圆弧长度的重 ...

  6. 第14章 定制字符画(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现定制字符画的效果,如图所示.首先对图片均匀采样.显示字符:然后对字符串的元素进行遍历,实现一段文字的替换显示:最后根 ...

  7. 第13章 图像像素采样(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现图像像素采样的绘制效果,如图所示.首先学习图像文件的读取与显示,获取像素颜色:然后生成马赛克效果,并实现随机采样画圆 ...

  8. 第11章 递归分形树(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将绘制递归分形树,如图所示.首先学习递归的概念,并学习if-elif-else语句:接着学习分形的概念,并利用递归调用绘制 ...

  9. 第8章 随风飘动的粒子 (《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现随风飘动的粒子,如图所示.首先绘制逐渐消失的轨迹,实现随机运动的圆点:然后学习列表的概念,利用列表实现多个运动粒子: ...

最新文章

  1. 安装虚拟机Ubuntu,搭建lnmp环境碰到的坑(二)
  2. 超级计算机的生产流程,精密陶瓷的生产流程分为几个步骤(图)
  3. Ubuntu 设置程序开机启动(以指定用户身份)
  4. 网站导航颜色停留_做好这几点是建设营销型网站的关键
  5. java bootclasspath
  6. 解决loaded more than 1 DLL from .libs和No metadata found in lib\site-packages两个错误
  7. linux入门指令 详解,Linux基础命令之mktemp详解
  8. BaseAudioContext
  9. 如果要学习web前端,需要学习什么
  10. AcWing 829. 模拟队列
  11. 钉钉企业内部H5微应用开发
  12. python runtime错误_使用Django框架遇到RuntimeError: populate() isn't reentrant错误
  13. matlab结构体与元胞,元胞数组与结构体数组
  14. Linux部署docker容器(使用root用户登录)
  15. 卸载 windows 2003 自带 .NET Framework (dotnetfx cleanup tool)
  16. 【ccf2021训练赛】图书推荐算法赛道(SASRec序列推荐模型 | 序列推荐模型分类)
  17. 作为一个项目经理,这七个项目管理经验你掌握了吗?
  18. 你知道怎么测试搜索框吗?
  19. ArrayList这篇就够了
  20. 韩国KT/LG/SK机房服务器比较

热门文章

  1. 八皇后问题(C语言)
  2. Python将csv格式转换为xlsx
  3. c/c++教程 - 2.1 程序的内存模型 内存四区 代码区 全局区 堆区 栈区 new操作符
  4. ActionScript 与后台交互 RemoteObject
  5. react将多个公共组件归成一类,方便调用
  6. [ZJOI2007]仓库建设
  7. Confluence 6 选项 1 – 在 Confluence 中手动重建用户和用户组
  8. java中虚拟机命令:jstack使用方法
  9. ArcGis连接oracle失败:ORA-6413:连接未打开
  10. 在Kibana上查看Apache日志