Processingの基本文法まとめ

# processingの基本文法まとめ
大学の授業でProcessingを扱っており、テスト対策のために文法を煩雑ですがまとめましたので、誰かのお役に立てればと思いあげておきます。

## 基本文法

**関数の定義**

    戻り値の型 関数名(仮引数の宣言){
    処理
    return文(戻り値)
    }

**画面サイズを決定する**
`size(x, y);`

**コメント**

1. その行のみ

`// コメント`

2. 内部全体
    /*
    コメント
    */

**変数の型**

    int 整数
    double, float 小数
    bool 真偽値
    color 色データ
    String 文字列
    

**キャスト**

    a = (型) 式

**繰り返し**

    for( 初期化の式1; 繰り返すかどうか調べる式2; 変化のための式3){
      繰り返す処理;
    }
    
    while( 繰り返すかどうか調べる式){
      繰り返す処理;
    }
    
    do{
      最低1回は処理し，繰り返す処理;
    } while( 繰り返すかどうか調べる式);

**ランダム**

    random(最大値)
    random(最低値, 最大値)
    random() ０以上１未満で乱数を発生

**2点間の距離を求める**

    dist(x1, y1, x2, y2)

**map関数**

    map(a, b, c, d, e) //aを範囲b-cから別の範囲d-eへ変換する

**演算子**

| 記号 | 名前   |
| -- | ---- |
| += | 加算代入 |
| -= | 減算代入 |
| *= | 乗算代入 |
| /= | 除算代入 |
| %= | 剰余代入 |

**インクリメント演算子**

    ++a  // a=a+1のこと
    b = ++a //a=a+1, b=a のこと。先にインクリメントする（a=3の時、b=4となる）
    b = a++ // b=a, a=a+1 のこと。　代入後にインクリメントする（a=3の時、b=3となる）



## 絵画関数


**線を描く**

     line(始点のx座標, 始点のy座標, 終点のx座標,終点のy座標); 

**点を描く**

    point(x座標, y座標);

**矩形（長方形、正方形）を描く**

    rect(左上角のx座標, 左上角のy座標, 矩形の幅, 矩形の高さ);

※[rect()関数の座標指定方法の変更]

    rectMode(CORNER); → 左上角の座標で指定(指定なしと同様)
    rectMode(CENTER); → 中心の座標で指定

**四辺形を描く**

    quad(点1のx座標, 点1のy座標,点2のx座標, 点2のy座標,点3のx座標, 点3のy座標,点4のx座標, 点4のy座標);

**三角形を描く**

    triangle(角1のx座標, 角1のy座標,角2のx座標, 角2のy座標,角3のx座標, 角3のy座標);

**円を描く**

    ellipse(中心のx座標, 中心のy座標, 楕円の幅, 楕円の高さ);

**弧を描く**

    arc(中心x座標, 中心y座標, 幅, 高さ, 始まり角度，終わり角度);

**曲線を描く**

    bezier(点1のx座標(x1), 点1のy座標(y1),制御点1のx座標(cx1), 制御点1のy座標(cy1),制御点2のx座標(cx2), 制御点2のy座標(cy2),点2のx座標(x2), 点2のy座標(y2));

**点を打って繋げる**

    beginShape();
    vertex(点のx座標，点のy座標)
    curveVertex(点のx座標，点のy座標)
    endShape(CLOSE);
    endShape();

**色をつける**
(グレースケール・RGB・HSBが使える)

1. 背景に色を付ける
    background(選択したい色);
2. 縁の色を指定する
    stroke(選択したい色);
3. 塗りつぶしの色を指定する
    fill(選択したい色);

**色の取り消しと線の太さ**

1. 線を取り消す
    noStroke()
2. 線の太さを指定
    strokeWeight()
3. 塗りつぶしをなくす（線だけ表示）
    noFill()

**色の各値の最大値を指定**

    colorMode(RGB, 255); //RGBの各値の最大値を255に設定
    colorMode(HSB, 360, 100, 100); //HSBの各値の最大値を、H360,S100,B100に設定

**文字を書く**

    text("文字列", x, y)

**文字の大きさなど**

    //文字の大きさ
    textSize(大きさ)
    textAlign(文字の位置)



## 移動系


**座標移動**

    translate(x軸方向の移動量, y軸方向の移動量);

**座標回転**

    rotate(角度のラジアン値);
    rotate(radians(角度));

**座標系を保存する**

    pushMatrix(); 座標系を保存
    popMatrix(); 座標系を取り出す



## アニメーション


**基本関数**

    void setup() {  
      一度だけ実行される
    }
    
    void draw() {
      停止するまで繰り返される
    }

**フレームレート**

    frameRate(フレーム数)




## イベントハンドラ


**マウスを追跡**

    //現在のマウスの位置
    mouseX, mouseY
    
    //一つ前のフレームのマウスの位置
    pmouseX, pmouseY

**マウスをクリック**

    mousePressed
    
    //押されたボタンを判別
    mouseButton == LEFT //(LEFT, CENTER, RIGHT)

**キーを押す**

    keyPressed //キーが押されているときだけtrue
    keyReleased //キーを話しているときだけtrue
    
    //最も新しく押されたキーを判別する変数
    Key == 'n' 
    
    //カーソルキーを判別
    keyCode == LEFT // (UP，DOWN，LEFT，RIGHT，ALT，CONTROL，SHIFT)




## クラスなど


**クラスの定義**

    class クラス名 {
      処理
    }

**イニシャライザ（コンストラクタ）**

    コンストラクタ名 (引数){
      ステートメント;
    }

**オブジェクト変数の宣言**

    クラス名 変数名; //参照型の変数の型という
    変数名 = new コンストラクタ名(引数) //newを使ってインスタンスを初期化する

**画像の利用**

    PImage 変数名;
    変数名 = loadImage("画像URL");
    image(変数名, x座標, y座標);
    
    //svgの場合はこれ
    loadShape("URL.svg");
    
    //スケッチフォルダーの中に「data」というファイルがあるのでそこに入れる

**CSVファイルの読み込み**

    loadStrings("ファイル名");
    data = int(split(temp[0], ",")); //データをコンマdで分割して配列dataに代入

**画像の書き出し**

    // 現在のウィンドウを画像として書きだす
    save(ファイル名を指定); //.png, .jpg, .tif に対応　
    saveFrame()

**ファイル出力**

    saveStrings("ファイル名", data);




## 3DCG


**3Dライブラリ**

    P3D
    OpenGL
    
    import processing.opengl.*;

**３次元座標系**

    size(x座標, y座標, P3D);

**描画**

    sphere(半径) //星を作成
    vertex(
    

**照明**

    ambientLight() – 環境光源
    directionalLight() –指向性光源
    pointLight() – 点光源
    spotLight() – スポットライト，スポット光源

**カメラ**

    camera(mouseX, mouseY, 200,          //Camera location
           width/2.0, height/2.0, 0,     //Camera target
           0, 1, 0);                     //Camera orientation