第9章 互相作用的圆球 (《Python趣味创意编程》教学视频)
(图书介绍:童晶:《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趣味创意编程》教学视频)相关推荐
- 第15章 音乐可视化(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 15 音乐可视化 本章我们将实现音乐可视化的效果,如图所示.首先学习Minim库的下载配置,并利用Minim库播放音乐文件.绘制音 ...
- 第12章 粒子同心圆(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现粒子同心圆,如图所示.首先学习面向对象编程的知识,为粒子类添加成员变量与成员函数:然后实现一个面向对象版本的运动粒子 ...
- 第10章 随机山水画(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将绘制随机山水画,如图所示.首先学习HSB颜色模型,并实现天空颜色渐变的效果:接着利用柏林噪声,实现云朵和山脉的绘制:然后 ...
- 第5章 简易毛笔字(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现简易毛笔字程序,读者可以按下鼠标按键移动,在程序窗口写出毛笔字的效果,如图所示. 5 简易毛笔字 首先学习鼠标的交互 ...
- background 旋转_第4章 旋转的圆弧(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现旋转的圆弧,如图所示.首先学习圆弧的绘制和旋转:接着利用全局变量实现圆弧逐渐变长,学习if选择语句,实现圆弧长度的重 ...
- 第14章 定制字符画(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现定制字符画的效果,如图所示.首先对图片均匀采样.显示字符:然后对字符串的元素进行遍历,实现一段文字的替换显示:最后根 ...
- 第13章 图像像素采样(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现图像像素采样的绘制效果,如图所示.首先学习图像文件的读取与显示,获取像素颜色:然后生成马赛克效果,并实现随机采样画圆 ...
- 第11章 递归分形树(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将绘制递归分形树,如图所示.首先学习递归的概念,并学习if-elif-else语句:接着学习分形的概念,并利用递归调用绘制 ...
- 第8章 随风飘动的粒子 (《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现随风飘动的粒子,如图所示.首先绘制逐渐消失的轨迹,实现随机运动的圆点:然后学习列表的概念,利用列表实现多个运动粒子: ...
最新文章
- 安装虚拟机Ubuntu,搭建lnmp环境碰到的坑(二)
- 超级计算机的生产流程,精密陶瓷的生产流程分为几个步骤(图)
- Ubuntu 设置程序开机启动(以指定用户身份)
- 网站导航颜色停留_做好这几点是建设营销型网站的关键
- java bootclasspath
- 解决loaded more than 1 DLL from .libs和No metadata found in lib\site-packages两个错误
- linux入门指令 详解,Linux基础命令之mktemp详解
- BaseAudioContext
- 如果要学习web前端,需要学习什么
- AcWing 829. 模拟队列
- 钉钉企业内部H5微应用开发
- python runtime错误_使用Django框架遇到RuntimeError: populate() isn't reentrant错误
- matlab结构体与元胞,元胞数组与结构体数组
- Linux部署docker容器(使用root用户登录)
- 卸载 windows 2003 自带 .NET Framework (dotnetfx cleanup tool)
- 【ccf2021训练赛】图书推荐算法赛道(SASRec序列推荐模型 | 序列推荐模型分类)
- 作为一个项目经理,这七个项目管理经验你掌握了吗?
- 你知道怎么测试搜索框吗?
- ArrayList这篇就够了
- 韩国KT/LG/SK机房服务器比较