Processing练习之自动绘制

案例代码如下:

import processing.pdf.*;

import java.util.Calendar;

boolean savePDF = false;

int maxCount = 5000;

int currentCount = 1;

float[] x=new float[maxCount];

float[] y=new float[maxCount];

float[] r=new float[maxCount];

void setup(){

size(600,600);

smooth();

frameRate(10);

x[0] = width/2;

y[0] = height/2;

r[0] = 10;

}

void draw(){

if(savePDF)beginRecord(PDF,timestamp()+".pdf");

background(255);

strokeWeight(0.5);

float newR = random(1,7);

float newX = random(0+newR,width-newR);

float newY = random(0+newR,height-newR);

float closestDist = 100000000;

int closestIndex =0;

for(int i=0;i<currentCount;i++){

float newDist = dist(newX,newY,x[i],y[i]);

if(newDist <closestDist){

closestDist =newDist;

closestIndex=i;

}

}

float angle =atan2(newY-y[closestIndex],newX-x[closestIndex]);

x[currentCount] =x[closestIndex]+cos(angle)*(r[closestIndex]+newR);

y[currentCount] =y[closestIndex]+sin(angle)*(r[closestIndex]+newR);

r[currentCount] = newR;

currentCount++;

for(int i=0;i<currentCount;i++){

fill(50);

ellipse(x[i],y[i],r[i]*2,r[i]*2);

}

if(currentCount++>=maxCount) noLoop();

if(savePDF){

savePDF =false;

endShape();

}

}

void keyReleased(){

if(key=='s'||key=='S') saveFrame(timestamp()+"_##.png");

if(key=='p'||key=='P') savePDF=true;

}

String timestamp(){

Calendar now=Calendar.getInstance();

return String.format("%1ty%1tm%1td_%1tH%1tM%1tS",now);

}

保存并运行如图1

图1

相关推荐
twj_one20 小时前
Arthas使用
java
lizz3120 小时前
C++模板编程:从入门到精通
java·开发语言·c++
shoubepatien21 小时前
JAVA -- 05
java·开发语言
寰天柚子21 小时前
Java并发编程中的线程安全问题与解决方案全解析
java·开发语言·python
memgLIFE21 小时前
Springboot 分层结构
java·spring boot·spring
Queenie_Charlie21 小时前
HASH表
数据结构·c++·哈希算法
shoubepatien21 小时前
JAVA -- 08
java·后端·intellij-idea
kong790692821 小时前
Java新特性-(二)Java基础语法
java·新特性·java 基础语法
yangminlei21 小时前
springboot pom.xml配置文件详细解析
java·spring boot·后端
superman超哥21 小时前
仓颉语言中锁的实现机制深度剖析与并发实践
c语言·开发语言·c++·python·仓颉