Processingに投稿されたコード一覧

Processing Rpples on Processing

ArrayList <Ripple>ripples;

void setup() {
  size(500, 500);
  ripples = new ArrayList();
  ripples.add(new Ripple());
}
int a=255;
int radius = 10;

int c = 0;
void draw() {
  background(100);
  noFill();
  strokeWeight(2);

  for(int i = 0; i < ripples.size(); i++){
    ripples.get(i).draw();
  }

  if( ( c % 40 ) == 0 ){
    ripples.add(new Ripple());
  }

  c++;
}

public class Ripple{
  float radius = 0;
  int lineColor = 255;

  public Ripple(){
    this.radius = 0;
    this.lineColor = 255;
  }

  public void draw(){
    stroke(255, this.lineColor);
    ellipse(width/2, height/2, radius, radius);
    this.radius += 2;
    this.lineColor -= 2;
  }
}

Processing キャンバスの左右反転

final int WIDTH=300,HEIGHT=200;
int x=WIDTH/2,y=HEIGHT/3,r=10;
int xdirection = 1; 

void setup() {
  size(WIDTH, HEIGHT,P2D);
  textSize(32);
}

void draw() {

  background(0);
  text("ABCDE", WIDTH/4, HEIGHT/2);
  x += xdirection ;
  if(x+r>WIDTH || x-r <0){
    xdirection *= -1;
  }
  ellipse(x,y,r*2,r*2);

  //以下の3つを追加することで、既存のキャンバスを反転させる
  PImage img = g.get();//既に描画しているキャンバスのイメージ画像を取得する
  scale(-1,1);          //以降のものは反転させる
  image(img,-WIDTH,0);  //
}

Processing シェーダバージョンチェック

import javax.media.opengl.*;
PShader sd;  //  シェーダ

void setup() {
  size(600, 600, P2D);
  println(((PGraphicsOpenGL )g).pgl.gl.glGetString(GL.GL_VERSION));
  println(((PGraphicsOpenGL )g).pgl.gl.glGetString(GL2.GL_SHADING_LANGUAGE_VERSION));

  sd = loadShader("FragmentShader.glsl");
}

void draw() {
  shader(sd);

  rect(0, 0, width, height);
}

//---以降はGLSLファイルの内容です。dataディレクトリにFragmentShader.glslと言う名称で保存してください。
const float NEON_WIDTH = 50.0;  // 基準点からネオンが有効な距離

void main()
{
  vec4 col = vec4(0, 0, 0, 1);

  //  基準の位置を決定
  float h = 100f;

  //  cは、座標が基準位置ぴったりであれば1.0。そこからNEON_WIDTHの範囲内であれば、距離に応じて1.0~0.0となる。
  float t = abs(gl_FragCoord.y - h) / NEON_WIDTH;
  float c = 1.0 - t;

  //  結果が0より大きければ、色を加算する。
  if(c > 0.0)
  {
    c = pow(c, 3.0);
    vec3 rc = vec3(c, c, c);
    col += vec4(rc, 1);
  }
  gl_FragColor = vec4(col);
}

Processing キー入力

//---------------------------------------------------------
// キー入力
//---------------------------------------------------------
// int KEY_CODE_MAX キーコードの最大数
// boolean key_state[] キーの入力状態を保存する配列
// void keyInit() 初期化
// boolean keyCheck(int key_code) キーが押されているか
/*
  使う前にどこかでkeyInit()を1度だけ呼んで初期化して下さい。
  あとは好きな場所でkeyCheck(int key_code)を使えばキー入力の判定ができます。
*/

int KEY_CODE_MAX = 256;
boolean key_state[];

void keyInit()
{
  key_state = new boolean[KEY_CODE_MAX];
  for(int i=0; i<KEY_CODE_MAX; ++i){
    key_state[i] = false;
  }
}

boolean keyCheck(int key_code)
{
  return key_state[key_code % KEY_CODE_MAX];
}

void keyPressed()
{
  if(0 <= key && key < KEY_CODE_MAX){
    key_state[key] = true;
  }else if(0 <= keyCode && keyCode < KEY_CODE_MAX){
    key_state[keyCode] = true;
  }
}

void keyReleased()
{
  if(0 <= key && key < KEY_CODE_MAX){
    key_state[key] = false;
  }else if(0 <= keyCode && keyCode < KEY_CODE_MAX){
    key_state[keyCode] = false;
  }
}

Processing FPS描画

//---------------------------------------------------------
// FPS描画
//---------------------------------------------------------
// int TEXT_SIZE テキストサイズ
// color TEXT_COLOR_G テキストカラー 緑
// color TEXT_COLOR_Y テキストカラー 黄
// color TEXT_COLOR_R テキストカラー 赤
// void Update() 更新
// void Drawing(float x, float y) 描画
/*
  使うときはFPS FPS = new FPS(FRAME_RATE);
  ゲームのフレームレートを渡してインストラクタ呼んでくださいな。
  Update()は毎フレーム呼んで下さい。
  Drawing(float x, float y)のx, yはFPSの描画座標です。
*/

class FPS
{
  int TEXT_SIZE = 24;
  color TEXT_COLOR_G = color(0, 255, 0);
  color TEXT_COLOR_Y = color(255, 255, 0);
  color TEXT_COLOR_R = color(255, 0, 0);

  int FRAME_RATE;
  float FPS, sumFPS;
  int cntFPS;
  FPS(int _FRAME_RATE){
    FRAME_RATE = _FRAME_RATE;
    FPS = _FRAME_RATE;
  }
  void Update(){
    if(cntFPS < FRAME_RATE){
      sumFPS += frameRate;
      cntFPS++;
    }else{
      FPS = round(sumFPS / FRAME_RATE * 10) / 10.0;
      sumFPS = cntFPS = 0;
    }
  }
  void Drawing(float x, float y){
    if(FPS < FRAME_RATE / 2){
      fill(TEXT_COLOR_R);
    }else if(FPS < FRAME_RATE / 3 * 2){
      fill(TEXT_COLOR_Y);
    }else{
      fill(TEXT_COLOR_G);
    }
    textSize(TEXT_SIZE);
    text("" + FPS, x, y);
  }
}

Processing Processing で 1次元セルオートマトン ルール30

//1次元セルオートマトン? あってるかどうかはわかりまっせん

int NUM = 100; //細胞数

int [] cell = new int[NUM];//細胞が生きているかどうかのフラグ 0:死 1:生

int [] dcell = new int[NUM];//直前の細胞の生死フラグを判定する

int Rsize = 2;//四角形のサイズ

int right=0, left=0;//セルの右左の配列の添字を入れる変数

int size = 0;

void setup() {

  size(200, 500);
  smooth();
  background(255);

  for (int i=0; i<NUM; i++) {//細胞のフラグを初期化する

    //randomの帰り値はfloatなのでキャスト 0 - 2 の乱数を発生させ intにキャストすると 0 か 1 という値が入るので初期化できる
    //cell[i] = int(random(0, 2));

    cell[i] = 0;
    if(i == 49){
      cell[i] = 1;
    }

    //値を直前の細胞の配列にコピーする
    dcell[i] = cell[i];

    }
}

void draw() {

  drawCells(cell, size);//細胞を描画する

  for (int i=0; i<NUM; i++) {//ここから配列の処理

    //配列の添字関係の処理
    //変数 leftは現在のセルの左の配列 つまり i - 1 変数rightは現在のセルの右の配列 つまり i + 1でアクセスできる
    if (i == 0) {//配列が左端の場合,最後の配列とを参照することで配列が円状になっているようにする
      left = NUM - 1;
      right = i + 1;
    }

    else if (i == 99) {//配列が右端まで来た場合、最初の配列要素を参照する elseをつけないとダメ
      left = i - 1;
      right = 0;
    }

    else {//それ以外の場合 上でelseを付けないと i = 0のとき 0 - 1 で -1の添字ができてしまう
      left = i - 1;
      right = i + 1;
      println("配列添え字"+"["+left+"]");
    }
    //配列の添字処理修了

    //現在のセルが死んでいる場合の処理
    if (dcell[i] == 0) {

      deadecell(i);
    }//現在のセルが死んでいる場合の処理修了

    else if (dcell[i] == 1) {//現在のセルが生きている場合の処理 条件は玲のごとくもっとスマートに書けると思われ

      alivecell(i);
    }

  }

  for(int i=0; i<NUM; i++){//判定したcellの値を直前の値として保存する
    dcell[i] = cell[i];
  }

  size = size + Rsize;//細胞の描画開始位置を 1段下へする
}

void drawCells(int[] cells, int size) {//セルを生死フラグを元に描画する関数 引数は生死フラグが入った配列 sizeは細胞を描画するy軸を決める

  for (int i=0; i<NUM; i++) {//細胞の生死フラグを元に四角形を描画する
    fill(0);//細胞の色 黒

    if (cells[i] == 0) {//死んでいるなら白くする

      fill(255);
    }

    //細胞を描画する
    rect(i*Rsize,size, Rsize, Rsize);
  }
}

void deadecell(int i) {//セルが死んでいる時の判定を行う関数 iはforループ時の変数 比較は直前の細胞のフラグが入ってる配列に対して行う、

  if (dcell[left] == 1 && dcell[right] == 1) {//両隣とも生きている場合 過密 なのでセルは死んだまま

    cell[i] = 0;
  }
  else if (dcell[left] == 1 && dcell[right] == 0 || dcell[left] == 0 && dcell[right] == 1) {//右左どちらかが生きている場合は 誕生する

    cell[i] = 1;
  }

  else if (dcell[left] == 0 && dcell[right] == 0) {//両隣とも死んでいる場合 過疎 なので セルは死んだまま

    cell[i] = 0;
  }
}

void alivecell(int i) {//セルが生きている場合の判定を行う関数 iはforループ時の変数

  if (dcell[left] == 1 && dcell[right] == 1) {//両隣のセルが生きていると過密なので セルは死ぬ

    cell[i] = 0;
  }

  else if (dcell[left] == 1 && dcell[right] == 0 ) {//左のセルが生きている場合 セルは死ぬ

    cell[i] = 0;
  }

  else if (dcell[right] == 1 && dcell[left] == 0) {//右のセルが生きている場合 セルは生き続ける

    cell[i] = 1;
  }

  else if (dcell[left] == 0 && dcell[right] == 0) {//両隣のセルが死んでいる場合でも セルは生き続ける

    cell[i] = 1;
  }
}//修了

Processing csvファイルを2次元配列に格納

// 列数
int NUMBER = 5;

// ファイルの読み込み
// 1行毎に配列に格納する。
String file[] = loadStrings("file.csv");

// 2次元配列。data[行][列]
String[][] data = new String[file.length][NUMBER];

// file[]の内容を","で区切って2次元配列に格納
for(int i=0; i < file.length; i++){
  String tmp[] = split(file[i], ",");
  for(int j=0; j < tmp.length; j++){
    data[i][j] = tmp[j];
  }
}

// 出力
for(int i=0; i < file.length; i++){
  for(int j=0; j < NUMBER; j++){
    print(" " + data[i][j]);
  }
  println();
}

Processing 画像の左右反転

PImage a;
void setup() {
  size(200, 200);
  a = loadImage("jelly.jpg");//好きな画像を
  noLoop();
}

void draw() {
  scale(-1,1);//画面を反転させる。
  image(a, -width, 0); 

  scale(-1,1);//もとに戻す
  image(a, 100, 100);//分かりやすいように100,100の位置に重ねて描いてみる
}

Processing シャネルのロゴ2(言語をProcessingにして貼り付け)

int DIAMETER = 70;
int STROKE_WIGHT = 12;
int Y = 100;
 
size(200, 200);
 
noFill();
smooth();
strokeWeight(STROKE_WIGHT);
strokeCap(SQUARE);
 
arc(120, Y, DIAMETER, DIAMETER, radians(30), radians(330));
arc(80, Y, DIAMETER, DIAMETER, radians(210), radians(360+150));
 
filter(BLUR, 6);
 
arc(120, Y, DIAMETER, DIAMETER, radians(30), radians(330));
arc(80, Y, DIAMETER, DIAMETER, radians(210), radians(360+150));

Processing Processing

/**
 * Animated Sprite (Shifty + Teddy)
 * by <a href="http://www.presstube.com">James Patterson</a>.
 *
 * Press the mouse button to change animations.
 * Demonstrates loading, displaying, and animating GIF images.
 * It would be easy to write a program to display
 * animated GIFs, but would not allow as much control over
 * the display sequence and rate of display.
 *
 * Created 28 January 2003
 */

AniSprite animation1, animation2;
float xpos, ypos;
float drag = 30.0;

void setup() {
  size(200, 200);
  background(255, 204, 0);
  frameRate(24);
  animation1 = new AniSprite("PT_Shifty_00", 38);
  animation2 = new AniSprite("PT_Teddy_00", 60);
}

void draw() {
  float difx = mouseX - xpos;
  if (abs(difx) > 1.0) {
    xpos = xpos + difx/drag;
    xpos = constrain(xpos, 0, width);
  }

  // Display the sprite at the position xpos, ypos
  if (mousePressed) {
    background(153, 153, 0);
    animation1.display(xpos-animation1.getWidth()/2, ypos);
  } else {
    background(255, 204, 0);
    animation2.display(xpos-animation1.getWidth()/2, ypos);
  }
}

よく投稿されているコード

タグ

最近投稿されたコード