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

相关推荐
麻辣长颈鹿Sir4 分钟前
【Keil】C/C++混合编程的简单方法
c语言·c++·keil·c/c++融合编程·多语言混合编程
悠哉清闲5 分钟前
C++ 指针与引用
java·c++·算法
没有羊的王K38 分钟前
SSM框架学习DI入门——day2
java·spring boot·学习
公子绝38 分钟前
JAVA学习笔记 使用notepad++开发JAVA-003
java·学习·notepad++·java开发环境
似璟如你1 小时前
Java开发八股文之基础篇+spring+集合
java·开发语言·面试
本杰明1521 小时前
2025/7/14——java学习总结
java·开发语言·学习
洛克希德马丁1 小时前
QTableView鼠标双击先触发单击信号
c++·qt
星释1 小时前
优雅的Java:01.数据更新如何更优雅
java·开发语言·spring boot
LeonYangRyeon1 小时前
解锁SQL“密码”:SELECT DISTINCT END AS的深度剖析与实战指南
java·开发语言
ysa0510301 小时前
竞赛常用加速技巧#模板
c++·笔记·算法