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

相关推荐
Anastasiozzzz6 分钟前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
骇客野人8 分钟前
通过脚本推送Docker镜像
java·docker·容器
刘琦沛在进步10 分钟前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
铁蛋AI编程实战25 分钟前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python
晚霞的不甘36 分钟前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
SunnyDays101138 分钟前
使用 Java 冻结 Excel 行和列:完整指南
java·冻结excel行和列
摇滚侠1 小时前
在 SpringBoot 项目中,开发工具使用 IDEA,.idea 目录下的文件需要提交吗
java·spring boot·intellij-idea
我在人间贩卖青春1 小时前
C++之this指针
c++·this
云姜.1 小时前
java多态
java·开发语言·c++
李堇1 小时前
android滚动列表VerticalRollingTextView
android·java