我的processing学习笔记
- 格式:docx
- 大小:20.50 KB
- 文档页数:14
Processing中文开发教程Processing 是一种基于 Java 编程语言的开源编程环境和图形库。
它可以使用户方便地创建图形化应用程序、动态艺术作品和交互式图像。
Processing 由 Casey Reas 和 Ben Fry 在2001年推出,它的目标是为了帮助非专业编程人员学习编程,并且在视觉艺术领域中找到一个创造性的解决方案。
在这个中文开发教程中,我将介绍 Processing 的基础知识和用法,并提供一些常见的例子和项目来帮助你更好地理解和应用 Processing。
Processing 的程序最小单位是一个绘图窗口,你可以在其中画出各种形状、图形和动画。
在程序的起始位置,你需要定义一个 `setup(` 函数,该函数仅在程序开始时运行一次。
在 `setup(` 函数中,你可以设置你的绘图窗口的大小、背景颜色等。
例如,下面是一个简单的 Processing 程序,它创建了一个大小为500x500 像素的绘图窗口,并且将背景颜色设置为黑色:```void setusize(500, 500);background(0);```接下来,你可以在 `draw(` 函数中编写需要重复执行的代码,该函数在 `setup(` 执行完成后会反复执行。
你可以使用各种图形和颜色函数来绘制你想要的图形和效果。
例如,下面是一个绘制一个移动的圆的例子:```float x = 0;void setusize(500, 500);background(0);void drabackground(0);fill(255);ellipse(x, height/2, 50, 50);x+=1;```在这个例子中,`ellipse(` 函数用于绘制一个圆形,`fill(` 函数设置圆的填充颜色。
`x` 的值在每一次的 `draw(` 函数中增加 1,使得圆向右移动。
`height` 是一个全局变量,它代表绘图窗口的高度。
processingfor语句使用Processing是一种基于Java语言的编程语言和开发环境,它主要用于创作交互式的图形、音频、视频和动画等数字媒体作品。
在Processing中,for语句是一种常用的循环语句,它可以让程序重复执行一段代码,直到满足某个条件为止。
下面是一些使用Processing中for语句的例子。
1. 绘制图形在Processing中,我们可以使用for语句来绘制一些简单的图形,比如正方形、圆形、三角形等等。
例如,下面的代码可以绘制一个由多个小正方形组成的大正方形:```javavoid setup() {size(400, 400);}void draw() {background(255);for (int i = 0; i < 10; i++) {for (int j = 0; j < 10; j++) {rect(i * 40, j * 40, 40, 40);}}}```2. 计算数值在Processing中,我们也可以使用for语句来计算一些数值,比如阶乘、斐波那契数列等等。
例如,下面的代码可以计算1到10的阶乘:```javavoid setup() {size(400, 400);}void draw() {background(255);int result = 1;for (int i = 1; i <= 10; i++) {result *= i;text(i + "! = " + result, 50, i * 20);}}```3. 处理数组在Processing中,我们也可以使用for语句来处理数组,比如遍历数组、计算数组元素的和、查找数组中的最大值等等。
例如,下面的代码可以计算一个数组中所有元素的和:```javavoid setup() {size(400, 400);}void draw() {background(255);int[] nums = {1, 2, 3, 4, 5};int sum = 0;for (int i = 0; i < nums.length; i++) {sum += nums[i];}text("sum = " + sum, 50, 50);}```4. 控制动画在Processing中,我们也可以使用for语句来控制动画的播放,比如让一个图形在屏幕上移动、旋转、缩放等等。
Processing交互设计代码引言P r oc es si ng是一个简单易学的编程语言和开发环境,用于创作交互式艺术和设计作品。
通过处理数据、图形和声音等多媒体元素,P r oc es si ng可以帮助设计师实现各种交互设计效果。
本文将介绍一些基本的Pr oc es si ng代码技巧,帮助读者快速入门交互设计。
1.绘制基本图形P r oc es si ng提供了丰富的绘图函数,可以绘制各种基本图形,例如点、线、矩形、椭圆等。
s i ze(500,500);//设置画布大小b a ck gr ou nd(255);//设置画布背景色为白色s t ro ke(0);//设置画笔颜色为黑色f i ll(200,100,50);//设置填充色为橙色r e ct(100,100,200,200);//绘制一个矩形2.响应鼠标交互在P ro ce ss in g中,可以通过鼠标事件实现用户与作品之间的交互。
例如,当鼠标移动时改变图形的位置,当鼠标点击时改变图形的颜色。
v o id se tu p(){s i ze(500,500);b a ck gr ou nd(255);}v o id dr aw(){r e ct(m ou se X,mo use Y,50,50);}v o id mo us eP re ss ed(){f i ll(r an do m(255),r an do m(255),r and o m(255));}3.创建动画效果通过使用Pr oc es sin g的内置动画函数,可以创建出各种炫酷的动画效果。
例如,可以让图形在画布中移动、旋转或缩放。
f l oa tx=0;v o id se tu p(){s i ze(500,500);b a ck gr ou nd(255);}v o id dr aw(){b a ck gr ou nd(255);t r an sl at e(x,he igh t/2);r o ta te(f ra me Co unt*0.1);r e ct(-50,-50,100,100);x+=1;i f(x>w id th){x=0;}}4.制作交互界面通过结合基本图形、鼠标交互和动画效果,可以制作出交互式的界面。
Processing学习笔记(一)一、相关介绍:Processing是一门用来生成图片、动画和交互软件的编程语言。
它的思想是简单地谢一行代码,就会在屏幕上生成一个圆。
再增加一些代码,圆便能跟着鼠标走。
在增加一些代码,圆便会随着鼠标的点击而改变颜色。
我们把这称为用代码做草稿(Sketching).你写一行,再加一行,效果随之增加。
结果就是用一个个片段合成的程序。
Processing是一种具有革命前瞻性的新兴计算机语言,它的概念是在电子艺术的环境下介绍程序语言,并将电子艺术的概念介绍给程序设计师。
她是Java 语言的延伸,并支持许多现有的Java 语言架构,不过在语法(syntax) 上简易许多,并具有许多贴心及人性化的设计。
Processing 可以在Windows、MAC OS X、MAC OS 9 、Linux 等操作系统上使用。
本软件目前是处于初版测试的阶段,试用版听说最近真的快要出了!以Processing 完成的作品可在个人本机端作用,或以Java Applets 的模式外输至网络上发布。
虽然图形用户界面(GUI)早在二十年前成为主流,但是基础编程语言的教学到今天仍是以命令行接口为主,学习编程语言为什么要那么枯燥呢?人脑天生擅长空间辨识,图形用户界面利用的正是这种优势,加上它能提供各种实时且鲜明的图像式反馈(feedback),可以大幅缩短学习曲线,并帮助理解抽象逻辑法则。
举例来说,计算机屏幕上的一个像素(pixel) 就是一个变量值(the value of a variable) 的可视化表现。
Processing将Java的语法简化并将其运算结果“感官化”,让使用者能很快享有声光兼备的交互式多媒体作品。
二、详细操作1、基本形状:(1)直线line(x1,y1,x2,y2);(2)三角形triangle(x1,y1,x2,y2,x3,y3);(3)四边形quad(x1,y1,x2,y2,x3,y3,x4,y4);(4)长方形rect(x,y,width,height//正方形width=heigh);//(x,y)是左上角的顶点(5)圆/椭圆ellipse(x,y,width,height);(6)圆弧arc(x,y,width,height,start,stop);stop, start 表示为圆弧的起始位置与终止位置,用角度表示为:(0,PI,HALF_PI,QUARTER_PI,TWO_PI,radians(角度如:90,270等))例1:size(1000,600);//屏幕大小设定triangle(100,150,150,500,200,250); //三角形绘制triangle(900,150,850,500,800,250); //同上quad(100,10,200,250,100,350,400,450); //四边形绘制quad(900,10,800,250,900,350,600,450); //同上ellipse(500,400,500,100); //绘制椭圆ellipse(500,100,140,140); //绘制圆arc(500,200,400,400,-QUARTER_PI,PI+QUARTER_PI); //绘制弧形结果图:2、绘制顺序绘图顺序不同结果可能不一样,如绘画圆和长方形的先后顺序不同,如果有重合的部分,先后顺序不同,结果图不一样。
machine learning for signal processing 笔记:一、信号处理中的机器学习应用概述信号分类:使用监督学习技术(如SVM、决策树、随机森林、神经网络)对不同类型的信号进行识别和分类,例如在音频、图像、雷达信号等领域。
特征提取:通过无监督学习或深度学习自动从原始信号中学习并提取有意义的特征,例如使用自编码器、深度信念网络、卷积神经网络(CNN)等来学习声音或图像信号的特征表示。
预测与滤波:基于时间序列数据,利用循环神经网络(RNN)、长短时记忆网络(LSTM)或门控循环单元(GRU)进行信号预测或滤波操作。
降维与可视化:利用主成分分析(PCA)、独立成分分析(ICA)或流形学习方法降低信号维度,实现高效存储和可视化。
异常检测:通过训练模型识别正常信号模式,并据此定义异常情况,适用于工业监控、医疗诊断等场景。
二、具体应用场景示例通信系统:在无线通信中,ML可用于信道估计、符号检测、干扰抑制等问题。
生物医学信号:心电图(ECG)、脑电图(EEG)等信号处理中,ML用于疾病诊断、睡眠分期、癫痫发作预测等。
图像信号:图像去噪、超分辨率重建、图像分割和目标检测中广泛应用CNN 和其他深度学习方法。
语音信号:语音识别、说话人识别、语音增强等领域利用了ML的强大功能。
三、算法与框架Keras、TensorFlow、PyTorch:这些深度学习框架常被用来构建复杂的信号处理模型。
Scikit-learn:对于传统机器学习算法,在信号处理中的预处理阶段和部分简单的分类、回归任务非常有用。
四、挑战与优化小样本学习:在信号处理中,如何在有限的数据下训练出泛化能力强的模型是一大挑战。
实时性要求:某些信号处理任务需要实时响应,因此算法的计算效率至关重要。
解释性和鲁棒性:提升模型的可解释性以及对噪声和恶意攻击的抵抗能力也是研究重点。
以上只是一个概要性的笔记提纲,实际的学习过程中应深入每个点进行详细探讨和实践。
5/响应那些响应鼠标、键盘和其他设备输入的代码应该连续地运行。
要做到这样,在draw()函数中写下这些更新的代码。
示例5-1:draw()函数要看看draw()函数是怎么运行的,试着运行这个程序:void draw(){//在控制台显示帧数println("I'm drawing");println(frameCount);}将会看到:它是动态的示例5-2:setup()函数为了完成循环的draw()函数,Processing有一个setup()函数,在程序运行开始时运行一遍。
void setup(){println("I'm drawing");}void draw(){println("I'm running");}代码运行时,在控制台上会有如下输出:文本“I’m running”会一直持续地被写到控制台上,直到程序结束。
示例5-3:当setup()遇到draw()函数下面的例子把以上讲的两个函数都放在一起:int x=280;int y=-100;int diameter=380;void setup(){size(480,120);smooth();fill(102);}void draw(){background(204);ellipse(x,y,diameter,diameter);}图示:跟随既然我们可以让我们的程序持续地运行了,那么我们就可以跟踪鼠标的位置然后使用得到的这些数值来移动屏幕上的元素。
示例5-4:跟踪鼠标mouseX变量保存着X轴的值,mouseY变量保存着Y轴的值。
代码:void setup(){size(480,120);fill(0,152);smooth();noStroke();}void draw(){ellipse(mouseX,mouseY,9,9);}图示:当鼠标移动的很快时,圆圈会被放置的十分分散。
processing教程Processing是一种基于Java语言的开源编程语言和集成开发环境(IDE)。
它主要用于视觉艺术、计算艺术和计算机图形学的开发。
Processing易于学习和理解,并有着强大的2D和3D图形渲染功能,快速生成交互式可视化效果。
在本教程中,我们将介绍Processing的基本概念、语法和一些简单的项目示例。
1. Processing的基本概念:- Sketch:Processing中的程序被称为“Sketch”,它由setup()、draw()和其他函数组成。
- setup()函数:用于初始化程序,只在程序开始时运行一次。
- draw()函数:用于循环执行特定的代码块,用于绘制图形和实现交互等。
- Coordinates:Processing使用以左上角为原点的坐标系,x轴正方向向右,y轴正方向向下。
2. Processing的语法:- 变量和常量:可以用于存储和操作数据。
- 数据类型:包括整数型(int)、浮点型(float)、字符型(char)和布尔型(boolean)等。
- 运算符:用于数学和逻辑运算,如加法(+)、减法(-)和等于(==)等。
- 控制流程:使用条件语句(if-else)和循环语句(for、while)等来控制程序的流程和执行。
3. 示例项目:- 绘制几何图形:使用Processing的绘图函数和基本形状函数来绘制简单的几何图形,如矩形、圆形和线条等。
- 交互式动画:使用鼠标和键盘事件的处理来实现简单的交互效果,如拖动、点击和键盘控制等。
- 数据可视化:使用Processing的图形渲染和数据处理功能来创建漂亮的数据可视化效果,如柱状图和散点图等。
- 基本游戏:使用Processing的2D图形和输入处理功能来创建简单的游戏,如跳跃游戏和射击游戏等。
4. 进一步学习资源:- 官方网站:Processing官方网站上提供了详细的文档、教程和示例程序,以及社区论坛和图书推荐等。
processing !的用法Processing是一种编程语言和开发环境,被广泛应用于艺术、设计和互动媒体的创作中。
它是一种基于Java的开发工具,专注于可视化和互动设计,主要用于创建图形、动画和交互式作品。
在这篇文章中,我将详细介绍Processing的用法,以及它在创作中的重要性和应用领域。
一、Processing的基本介绍Processing是由Casey Reas和Ben Fry于2001年创建的一种开源编程语言和开发环境。
它的目标是使编程更加易学易用,同时提供丰富的图形和交互功能。
Processing的开发环境提供了一个称为Processing IDE的集成开发环境。
它包含一个文本编辑器、编译器和运行时环境,可以直接在其中编写、运行和调试Processing代码。
Processing的语法和Java非常相似,这使得学习Processing对于已经熟悉Java的开发者来说相对容易。
同时,Processing还提供了一系列简化的函数和库,使得可视化和互动设计更加直观和便捷。
二、Processing的基本语法和函数1. 变量和数据类型:和大多数编程语言一样,Processing支持各种常见的数据类型,例如整数(int)、浮点数(float)、字符串(String)等。
变量的声明和赋值也非常简单直接。
2. 条件语句和循环:Processing支持常见的条件语句(if-else语句)和循环结构(for循环、while循环等),这使得程序可以根据不同的条件执行不同的操作,或者重复执行一段代码块。
3. 图形绘制:Processing最大的特点之一是其强大的图形绘制功能。
它提供了一系列函数用于绘制各种形状、线条、颜色等,例如rect()、ellipse()、line()等。
开发者可以使用这些函数来创建自己的图形作品。
4. 动画和交互:Processing还可以轻松实现动画和交互功能。
通过使用不同的绘制函数和更新坐标等操作,可以在屏幕上创建动态的图像。
processing简单作品代码Processing是一种基于Java语言的编程工具,可以让用户通过编写简单代码来创建各种形式的图像、动画和交互式应用。
下面将介绍一些简单的Processing作品代码,希望能为初学者提供一些参考。
1. 简单的移动动画在Processing中,可以使用变量来实现图形的移动。
以下代码将创建一个椭圆并向右移动:```float x = 0;void setup() {size(400, 400);}void draw() {background(255);ellipse(x, 200, 50, 50);x += 2;}```2. 随机颜色方块下面这段代码可以创建一个在画布上随机出现的方块,每次颜色也不同:```void setup() {size(400, 400);}void draw() {rect(random(width), random(height), 50, 50);fill(random(255), random(255), random(255));}```3. 交互鼠标移动以下代码可创建一个圆,并在鼠标移动时跟随移动:```void setup() {size(400, 400);}void draw() {background(255);ellipse(mouseX, mouseY, 50, 50);}```4. 生成随机图形下面这段代码将生成一系列不同的随机图形,每次显示方式也不同:```void setup() {size(400, 400);}void draw() {background(255);int shapeType = int(random(3));int x = int(random(400));int y = int(random(400));int size = int(random(50, 100));if (shapeType == 0) {rect(x, y, size, size);} else if (shapeType == 1) {ellipse(x, y, size, size);} else {triangle(random(400), random(400), random(400),random(400), random(400), random(400));}}```以上是一些使用Processing编写的简单作品代码。
楼主作为一个纯粹的工科男,却阴差阳错到了机关坐办公室,沦落为天天写材料为生,内心实在是千万个草泥马在狂奔。
为了保持工科男的本性,也为了不被这些无聊的材料压成神经病,决定给自己找点乐趣。
去年先是接触了一下arduino,编程完成了一个遥控小车,利用appinventor编了个手机遥控软件,基本实现了在手机屏幕上画图形,小车就在地上按画的路径行走。
开始心挺大,想进一步学习做个小四轴,自平衡小车,激光雕刻机等,但是由于现在每天下班第一任务是陪孩子玩,加之学习硬件还是比较烧钱,结果就荒废了。
上个月无意中发现了processing,又看了一些大神的作品,觉得很有意思,而且学习软件比学习硬件时间上比较灵活(比如每天中午可以学习半小时),所以决定学习一下,丰富一下自己的业余生活。
为了避免再次半途而废特开此贴记录过程(不过还是很难说,哈哈)。
今天先补上前段时间零星学习的内容:学习用教材:《爱上processing》、《代码本色》。
一、已学习的常用简单命令1.设置屏幕尺寸:size(宽,高);2.画点:point(x,y);3.划线:line(x1,y1,x2,y2);4.画三角形:triangle(x1,y1,x2,y2,x3,y3);5.四边形:quad(x1,y1,x2,y2,x3,y3,x4,y4);6.角度换算为弧度:radians(角度);7.长方形:rect(x,y,宽,高);8.椭圆:ellipse(x,y,宽,高);//目前用这个命令用的最多,嘿嘿9.平滑曲线:smooth();10.关闭平滑曲线:noSmooth();11.设置线宽:strokeWeight(x);12.背景颜色:background(x,x,x);//只填一个参数为灰度,0为黑255为白;填三个参数为RGB颜色13.fill(x,x,x,x)//颜色同上,第四个参数为透明度14.鼠标当前坐标:mouseX,mouseY15.上一帧鼠标坐标:pmouseX,pmouseY16.测量两点之间的距离:dist(x1,y1,x2,y2);17.mousePressed:布尔量,鼠标按下后为真(true,false)18.mouseButton:返回值:LEFT,CENTER,RIGHT 用来判断哪个键按下。
还有一些图形命令,目前用的还很少,暂时没学。
二、编程格式1.首先创建不在setup()和draw()函数的变量(全局变量)2.setup(){…};内的命令执行一遍3.draw(){…}; 内的命令持续执行三、面向对象编程由于《代码本色》完全用的是面向对象的编程方式,而本人大学时学的计算机语言是老掉牙的FORTRAN,基本上就没听说过面向对象的编程,只有重新学习面向对象的编程方法,不过学习了两天,试着编了几个小程序,发现这种编程方法确实很强大。
这里就照搬一下《爱上processing》里的描述,具体的还是得自己编几个程才能体会:class xxx //1.创建一个类{int x;//2.添加值域。
float y;xxx(参数1,参数2.。
)//3.添加构建函数{…..}void xxxx() //4.添加方法{…..}…void yyyyy() //{…..}}5.用类声明一个对象:xxx aa;6.创建对象并传递参数aa=new xxx;先发几个前段时间练习的小程序:1.弹球:一个小球在屏幕里弹来弹去:class BouncBall{float x;float y;int d;float xspeed;float yspeed;BouncBall(float tempX,float tempY,int tempD,float tempXspeed,float tempYspeed) {x=tempX;y=tempY;d=tempD;xspeed=tempXspeed;yspeed=tempYspeed;}void move(){y+=yspeed;if(x>width||x<d/2){xspeed=xspeed*-1;}if(y>height||y<d/2){yspeed=yspeed*-1;}}void display(){ellipse(x,y,d,d);}}BouncBall ball;void setup(){size(480,480);smooth();ball=new BouncBall(width/2,height/2,20,2,2.5);}void draw(){ball.move();fill(255,10);rect(0,0,width,height);fill(255,0,0);ball.display();}2.加强版弹球,想起以前玩的一个弹砖块的游戏,试着编了一个不完全版的class BouncBall{float x;float y;int d;float xspeed;float yspeed;BouncBall(float tempX,float tempY,int tempD,float tempXspeed,float tempYspeed) {x=tempX;y=tempY;xspeed=tempXspeed;yspeed=tempYspeed;}void move(bangbang bang1){x+=xspeed;y+=yspeed;if(x>width||x<d/2){xspeed=xspeed*-1;}if((y>(height-30)&&(mouseX<x&&x<mouseX+bang1.ShapeWidth))) {xspeed=xspeed+(mouseX-pmouseX)*0.1;yspeed=yspeed*(-1);}if(y<d/2){yspeed=yspeed*(-1);}}void crash(brick bb,BouncBall BB){if(dist((bb.x+bb.w/2),(bb.y+bb.h/2),BB.x,BB.y)<(23+BB.d/2)){BB.yspeed=BB.yspeed*-1;bb.x=0;bb.y=0;bb.w=0;bb.h=0;}}void display(){ellipse(x,y,d,d);}}class bangbang{int ShapeWidth;//int ShapeHeight;//float x;//float y;//int x;bangbang(int tempW){//x=tempx;ShapeWidth=tempW;}void display(){fill(0);rect(mouseX,height-20,ShapeWidth,10);}}class brick{float x;float y;float w;float h;brick(float tmpx,float tmpy,float tmpw,float tmph) {x=tmpx;y=tmpy;w=tmpw;h=tmph;}void display(){fill(100);stroke(255);rect(x,y,w,h);}}BouncBall ball;bangbang bang;brick[] bks;//=new brick[24];void setup(){size(480,480);smooth();ball=new BouncBall(width/2,height/2,20,2,2.5);bang=new bangbang(120);bks=new brick[24];///int k=0;for(int i=0;i<6;i++){for(int j=0;j<4;j++){bks[k]=new brick(i*80,j*20,80,20);k++;}}}void draw(){for(int i=0;i<bks.length;i++){bks[i].display();ball.crash(bks[i],ball);}ball.move(bang);fill(255,10);noStroke();rect(0,0,width,height-20);noStroke();fill(255,255);rect(0,height-20,width,20);fill(255,0,0);//stroke(255);ball.display();bang.display();}3.学习使用noise()函数,修改自《代码本色》中的一个例子:一个随机游走的小球,颜色随时间变化class Walker{float x,y;float tx,ty;float r,b,g;float tr,tb,tg;Walker(){tx=0;ty=10000;tr=0;tb=1000;tg=2000;}void step(){x=map(noise(tx),0,1,0,width);y=map(noise(ty),0,1,0,height);tx+=0.01;ty+=0.01;}void c() //color{r=map(noise(tr),0,1,0,255);b=map(noise(tb),0,1,0,255);g=map(noise(tg),0,1,0,255);tr+=0.01;tb+=0.01;tg+=0.01;}}Walker w;void setup(){size(480,480);w=new Walker();}void draw(){w.step();w.c();fill(w.r,w.b,w.g);ellipse(w.x,w.y,20,20);}4.学习《代码本色》后编的两个相互吸引运动的小球,在边界会转到另一边去:class Mover{PVector location1,location2;PVector v1,v2;PVector acceleration1,acceleration2;Mover(){location1=new PVector(random(width),random(height)); v1=new PVector(random(-2,2),random(-2,2)); acceleration1=PVector.random2D();location2=new PVector(random(width),random(height)); v2=new PVector(random(-2,2),random(-2,2)); acceleration2=PVector.random2D();}void update(){// PVector mouse=new PVector(mouseX,mouseY); PVector dir1=PVector.sub(location2,location1); PVector dir2=PVector.sub(location1,location2);dir1.normalize();dir1.mult(0.5);acceleration1=dir1;v1.add(acceleration1);v1.limit(10);location1.add(v1);//acceleration2=PVector.mult(dir1,-0.1);dir2.normalize();dir2.mult(0.5);acceleration2=dir2;v2.add(acceleration2);v2.limit(10);location2.add(v2);}void display(){stroke(0);fill(175);ellipse(location1.x,location1.y,16,16);ellipse(location2.x,location2.y,16,16);}void checkEdges(){if(location1.x>width){location1.x=0;}else if(location1.x<0){location1.x=width;}if(location1.y>height){location1.y=0;}else if(location1.y<0){location1.y=height;}}}Mover mover;//s=new Mover[5];void setup(){mover=new Mover();size(480,480);smooth();//mover.acceleration.x=0.05;//mover.acceleration.y=0.05;}void draw(){mover.update();mover.checkEdges();mover.display();}5.学习数组,把上面两个小球的改为任意个数小球:int geshu=20; //修改个数,可实现任意多小球相互运动,边界条件随机。