Processing练习之自动绘制

案例代码如下:

import processing.pdf.*;

import java.util.Calendar;

boolean savePDF = false;

int maxCount = 5000;

int currentCount = 1;

float\[\] x=new floatmaxCount;

float\[\] y=new floatmaxCount;

float\[\] r=new floatmaxCount;

void setup(){

size(600,600);

smooth();

frameRate(10);

x0 = width/2;

y0 = height/2;

r0 = 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,xi,yi);

if(newDist <closestDist){

closestDist =newDist;

closestIndex=i;

}

}

float angle =atan2(newY-yclosestIndex,newX-xclosestIndex);

xcurrentCount =xclosestIndex+cos(angle)*(rclosestIndex+newR);

ycurrentCount =yclosestIndex+sin(angle)*(rclosestIndex+newR);

rcurrentCount = newR;

currentCount++;

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

fill(50);

ellipse(xi,yi,ri*2,ri*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

相关推荐
装不满的克莱因瓶9 小时前
基于 OpenResty 扩展开发实现动态服务注册与发现能力
java·开发语言·架构·openresty
程序员小羊!9 小时前
06Java 异常机制与常用类
java
weixin_5231853210 小时前
Java基础知识总结(四):引用数据类型与参数传递机制
java·开发语言·python
小欣加油10 小时前
leetcode994 腐烂的橘子
数据结构·c++·算法·leetcode·bfs
宸津-代码粉碎机10 小时前
Spring AI企业级实战|从RAG优化到Agent多工具调度
java·大数据·人工智能·后端·python·spring
噢,我明白了10 小时前
QueryWrapper的使用
java
Chase_______10 小时前
【Java基础 | 15】集合框架(中):Set、HashSet、TreeSet 与哈希表
java·windows·散列表
摇滚侠10 小时前
Maven 入门+高深 微服务案例 122-125
java·微服务·maven
.千余11 小时前
【C++】手写双向链表:list容器模拟实现
开发语言·c++·笔记·学习·其他
QuZero11 小时前
Guava Cache Deep Dive
java·后端·算法·guava