11. ProcessingP5.js
masui@pitecan.com
20211223


Processing
P5.js

Processing
Gyazo

Ben Fry
Java
HTML
#ff1234
setup() , draw()

Java
, , , ...
public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello World!!");
}
}
public ? class ? static ? void ? main ? String ? System ? println ?

C
main(){
printf("Hello, World!\n");
}
main ? printf ?

Ruby
puts "Hello, World"
puts ?

JavaScript
console.log("Hello, World");
console ? log ?

Processing
line(0,0,100,100);

Ben Fry

Gyazo

,

Let's start Processing
by Casey Reas, Ben Fry

Gyazo Gyazo

Gyazo Gyazo

Processing

Processing
Note by

Gyazo
@ Facebook

Covid

3

Gyazo

Processing
processing.org
Windows, Mac, Linux, Chromebook

line(0,0,100,100);
Play
(0,0)(0,0)

(0, 0)
1?

fill(#ffff00);

ToolsCreateFont
loadFont(); textFont(); text();

for statement, if statement
...
Same syntax as C, Java

setup() draw()
setup()
draw() 1

160
24

mouseX , mouseY 使

mousePressed()

/

Web
HTML
Web
Gyazo

Processing
Java
Java

ProcessingJavaScript
Gyazo

P5
Gyazo

P5
Gyazo

ScrapboxP5使
Scrapbox
https://masui.github.io/runp5/?code=https://scrapbox.io/api/code/sfc-vis2020/11._P5.jsD3.js/

runp5
GitHubP5
JS
https://masui.github.io/runp5/?code=JSURL

function setup(){
createCanvas(400,400)
line(0,0,300,300)
}

function setup(){
createCanvas(400,400)
fill('#eee')
strokeWeight(0)
rect(0,0,400,400)
}
function draw(){
fill('blue')
rect(random(400),random(400),2,2)
}

function setup(){
createCanvas(200,200)
histogram = []
for(i=0;i<100;i++) histogram[i] = 0
strokeWeight(0)
}
function draw(){
val = 0
for(i=0;i<10;i++) val += random(1/10)
histogram[Math.floor(val * 100)] += 1
fill('#ff0')
rect(0,0,200,200)
fill('blue')
for(i=0;i<100;i++)
rect(i*2,200-histogram[i],2,histogram[i])
}

// MouseDragged
function setup() {
createCanvas(320, 240);
fill(0);
}
function mouseDragged(){
ellipse(mouseX, mouseY, 20, 20);
}

Follow
var x = [0,0],
y = [0,0],
segLength = 50;
function setup() {
createCanvas(710, 400);
strokeWeight(20.0);
stroke(255, 100);
}
function draw() {
background(0);
dragSegment(0, mouseX, mouseY);
dragSegment(1, x[0], y[0]);
}
function dragSegment(i, xin, yin) {
var dx = xin - x[i];
var dy = yin - y[i];
var angle = atan2(dy, dx);
x[i] = xin - cos(angle) * segLength;
y[i] = yin - sin(angle) * segLength;
segment(x[i], y[i], angle);
}
function segment(x, y, a) {
push();
translate(x, y);
rotate(a);
line(0, 0, segLength, 0);
pop();
}

STRATEGY1 = 0; //
STRATEGY2 = 1; //
lspeedfactor = 1.0;
lgapfactor = 1.0;
rspeedfactor = 2.0;
rgapfactor = 3.0;
strategy = STRATEGY2;
var pair = location.search.substring(1).split('&');
for(var i=0; pair[i]; i++){
var kv = pair[i].split('=');
if(kv[0] == 'ls') lspeedfactor = kv[1];
if(kv[0] == 'lg') lgapfactor = kv[1];
if(kv[0] == 'rs') rspeedfactor = kv[1];
if(kv[0] == 'rg') rgapfactor = kv[1];
}
MOVING_LOWER = 0;
WAITING_LOWER = 1;
ASCENDING = 2;
UPPER = 3;
LEFT = 0;
RIGHT = 1;
llane = 220.0;
rlane = 250.0;
escheight = 460.0;
WINWIDTH = 500;
WINHEIGHT = 500;
NPERSONS = 50;
NSTAIRS = 15;
STAIRHEIGHT = 60;
STEPUNIT = 1;
steppos = 0;
waiting_l = 0;
waiting_r = 0;
done = false;
xspeed = 1.0;
persons = [];;
loops = 0;
var Person = function(){
this.x = 0.0;
this.y = 0.0;
this.status = MOVING_LOWER;
this.lr = LEFT;
};
function setup(){
createCanvas(WINWIDTH,WINHEIGHT);
frameRate(60);
for(var i=0;i<NPERSONS;i++){
persons[i] = new Person();
}
}
function can_ascend_l(n){
var result = true;
for(var i=0;i<n;i++){
if(persons[i].status == ASCENDING &&
persons[i].lr == LEFT &&
persons[i].y - persons[n].y < STAIRHEIGHT * lgapfactor){
return false;
}
}
return true;
}
function can_ascend_r(n){
for(var i=0;i<n;i++){
if(persons[i].status == ASCENDING &&
persons[i].lr == RIGHT &&
persons[i].y - persons[n].y < STAIRHEIGHT * rgapfactor){
return false;
}
}
return true;
}
function can_forward_lower(n){
for(var i=0;i<n;i++){
if(persons[i].status == MOVING_LOWER &&
persons[i].x - persons[n].y < 30.0){
return false;
}
}
return true;
}
function can_forward_upper(n){
for(var i=0;i<NPERSONS;i++){
if(persons[i].status == UPPER &&
persons[i].x - persons[n].x > 0.0 &&
persons[i].x - persons[n].x < 30.0){
return false;
}
}
return true;
}
function all_upper(){
for(var i=0;i<NPERSONS;i++){
if(persons[i].status != UPPER) return false;
}
return true;
}
function draw(){
if(done) return;
background(213,200,255);
for(var i=0;i<NSTAIRS;i++){
y = i * STAIRHEIGHT + steppos;
//line(llane-10+10,WINHEIGHT-y,rlane+10+20+10,WINHEIGHT-y);
fill(200,200,200);
strokeWeight(0);
rect(llane-10+10,WINHEIGHT-y,rlane-llane+40,STAIRHEIGHT/2);
}
steppos += STEPUNIT;
if(steppos >= STAIRHEIGHT){
steppos = 0;
}
for(var i=0;i<NPERSONS;i++){ //
switch(persons[i].status){
case MOVING_LOWER: //
if(persons[i].x >= llane && //
persons[i].lr == LEFT){
if(strategy == STRATEGY1){
if(waiting_l == 0 || waiting_l < waiting_r){
persons[i].status = WAITING_LOWER;
persons[i].x = llane;
waiting_l++;
}
else {
persons[i].lr = RIGHT; //
}
}
else if(strategy == STRATEGY2){
if(waiting_l < waiting_r){
persons[i].status = WAITING_LOWER;
persons[i].x = llane;
waiting_l++;
}
else {
persons[i].lr = RIGHT; //
}
}
}
else if(persons[i].x >= rlane && //
persons[i].lr == RIGHT){
persons[i].status = WAITING_LOWER;
persons[i].x = rlane;
waiting_r++;
}
if(can_forward_lower(i)){ //
persons[i].x += xspeed;
}
break;
case UPPER: //
if(can_forward_upper(i)){ //
persons[i].x += xspeed;
}
break;
case WAITING_LOWER: //
if(persons[i].lr == LEFT && //
can_ascend_l(i) //
){
persons[i].status = ASCENDING;
waiting_l--;
}
else if(persons[i].lr == RIGHT && //
can_ascend_r(i) //
){
persons[i].status = ASCENDING;
waiting_r--;
}
break;
case ASCENDING: //
if(persons[i].y >= escheight){ //
persons[i].status = UPPER;
persons[i].y = escheight;
}
else {
if(persons[i].lr == LEFT){
persons[i].y += STEPUNIT * lspeedfactor; // 1
}
else {
persons[i].y += STEPUNIT * rspeedfactor; // 1
}
}
break;
}
}
strokeWeight(1);
for(var i=NPERSONS-1;i>=0;i--){
fill(255,255,0);
rect(persons[i].x+10,WINHEIGHT-30-persons[i].y,20,20);
fill(0,0,0);
text(i+1,persons[i].x+10+3,WINHEIGHT-30-persons[i].y+14);
}
if(! all_upper()){
loops++;
}
else {
done = true;
}
fill(0,0,0);
// text(millis(),20,20);
text(loops,20,20);
}

Example: Yuki-san
T=0
function setup(){
createCanvas(600,600)
noStroke()
}
function draw() {
fill('#000')
rect(0,0,600,600);
N=100
S=300
for (n=1; n<N; n++) {
r=n*2
fill('#fff')
R=(N-n)/10
t=T*n
ellipse(S+r*cos(t),S-r*sin(t),R,R)
T+=0.00001
console.log(T)
}
}

EXPO2025
const spots = []
function newSpot(deg, r) {
return {
deg,
dx: random(-10, 10),
dy: random(-10, 10),
r,
r2: r*random(0.5,1.5),
vx: random(-20, 20) / 10,
vy: random(-20, 20) / 10,
}
}
function setup() {
createCanvas(640, 640);
colorMode(RGB)
angleMode(DEGREES)
noStroke()
for (i = 0; i < 360;) {
const r = random(30, 150)
spots.push(newSpot(i, r))
i += r / 4
}
}
function move(spot) {
spot.vx = random(-40, 40) / 10 - spot.dx / 2
spot.vy = random(-40, 40) / 10 - spot.dy / 2
spot.dx += spot.vx
spot.dy += spot.vy
spot.deg += .3
}
function origin(spot) {
return {
ox: width / 2 + cos(spot.deg) * width / 3,
oy: height / 2 + sin(spot.deg) * height / 3,
}
}
function drawSpot(spot) {
fill(color(255, 0, 0))
const {
ox,
oy
} = origin(spot)
ellipse(ox + spot.dx, oy + spot.dy, spot.r,spot.r2);
}
function drawEye(spot) {
const {
ox,
oy
} = origin(spot)
const {
r
} = spot
const dx = norm(mouseX - ox, 0, width) * r
const dy = norm(mouseY - oy, 0, height) * r
fill('white')
ellipse(ox + dx / 3, oy + dy / 3, r / 2);
fill('black')
ellipse(ox + dx / 2, oy + dy / 2, r / 4);
}
function draw() {
background(0)
spots.forEach(spot => {
drawSpot(spot)
move(spot)
});
[0, 3, 7, 12].forEach(i => {
drawEye(spots[i])
})
}

unicode
Gyazo
@nagayama
t=0//#Processing
draw=_=>{createCanvas(W=600,W)
t++
textAlign(CENTER, CENTER)
textSize(25)
for(y=0;y<30;y++)for(x=0;x<30;x++)text(String.fromCodePoint(9632+int(noise(x/20,y/20,t/200)*30)),x*20+10,y*20+10)}

Processing
Twitter140Processing