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

相关推荐
跟着珅聪学java2 分钟前
Spring Boot 中整合 MySQL 并打印 SQL 日志
java·spring boot
ᐇ9595 分钟前
Java集合框架实战:HashMap与HashSet的妙用
java·开发语言
阿智智5 分钟前
用Maven的quickstart archetype创建项目并结合JUnit5单元测试
java·单元测试·maven·junit5
乂爻yiyao10 分钟前
设计模式思想——从单例模式说起
java·单例模式·设计模式
q***116518 分钟前
SpringBoot创建动态定时任务的几种方式
java·spring boot·spring
by__csdn21 分钟前
微服务与单体那些事儿
java·后端·微服务·云原生·架构
权泽谦28 分钟前
Java 在机器学习中的应用:基于 DL4J 与 Weka 的完整实战案例
java·机器学习·数据挖掘
q***239239 分钟前
nginx简单命令启动,关闭等
java·服务器·nginx
拾忆,想起40 分钟前
Dubbo负载均衡全解析:五种策略详解与实战指南
java·运维·微服务·架构·负载均衡·dubbo·哈希算法
shayudiandian41 分钟前
【Java】关键字 native
java