<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Processing 学習ノート</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/" />
    <link rel="self" type="application/atom+xml" href="http://www.d-improvement.jp/learning/processing/atom.xml" />
    <id>tag:www.d-improvement.jp,2009-04-26:/learning/processing//1</id>
    <updated>2010-02-03T03:59:01Z</updated>
    <subtitle>「メディア制作1a,1b」サポートブログ。テキストは「Built with Processing（改訂版）」です。</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/" version="4.25">Movable Type</generator>

<entry>
    <title>アップグレードふくい Vol.25 「Processingではじめるインタラクティブデザイン」</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/topics/ugf-vol25-processing-interactive-design.html" />
    <id>tag:www.d-improvement.jp,2010:/learning/processing//1.118</id>

    <published>2010-01-30T07:30:00Z</published>
    <updated>2010-02-03T03:59:01Z</updated>

    <summary> 2010年1月30日、アップグレードふくい Vol.25 | アップグレードふ...</summary>
    <author>
        <name>masa</name>
        
    </author>
    
        <category term="トピックス" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.d-improvement.jp/learning/processing/">
        <![CDATA[<a href="http://www.flickr.com/photos/mathatelle/4315806904/" title="20100130-162712 by mathatelle, on Flickr"><img src="http://farm5.static.flickr.com/4039/4315806904_265be3aa29_m.jpg" width="240" height="174" alt="20100130-162712" style="float:right;margin-left:20px;" /></a>

2010年1月30日、<a href="http://www.fisc.jp/ugf_detail.php?eid=00027">アップグレードふくい Vol.25 | アップグレードふくい</a>でのセッション「Processingではじめるインタラクティブデザイン」の発表資料を公開します。]]>
        <![CDATA[## 発表資料

- [スライドPDF（Googleドキュメント）](https://docs.google.com/fileview?id=0B5KbU7T3z7sSMzM3OWQ5MmQtY2IxMi00MmFkLWI0M2EtZTBkYTZmZDVhM2Zh&hl=ja)

## 発表のアウトライン

※発表前に準備したものです。実際の発表内容と若干異なるところもあります。

- イントロ（雑談）
- 今日のお話の対象は「デザイナー」「デザインに興味のある方」を想定しています。
- デザイナーとしての「表現の領域」について、考えてみたい。
- 次の事例をご覧ください（弊社の実績より）
 - [http://knaplus.com/en/](http://knaplus.com/en/)
 - [http://knaplus.com/](http://knaplus.com/)
- どちらの表現が優れているかということは別として、両方つくれる技術は持っていた方がいい。
- でも...
 - リアクティブ（反応する）な実装をするには、プログラミングの知識が必要になる。
 - プログラミングは、未経験者にとって苦手意識が高い（難しそう！）。
- とはいえ...
 - 目的のためには、越えなければいけない壁（あきらめたら試合終了）。
 - 登山をイメージすると： 山の頂上をめざすのに、最短距離で行くには強靱な脚力が必要。ぐるぐる周りながら登れば、時間はかかるけど、足腰にかかる負担は少ない（苦手なら、迂回コースを進もう）。
 - 迂回コース → Processing
- Processing とは
 - オープンソースのプログラミング言語
 - 画像、アニメーション、インタラクションをプログラムしたい人向けの開発環境
 - 利用対象は、学生、アーティスト、デザイナーなど
 - 詳しくは公式サイトを参照 → [http://processing.org/](http://processing.org/)
- Processing のここが好き
 - 短いソースコードで動いてくれる
 - ActionScriptやC++に、Processingライクに記述できるライブラリがあるので、他言語の学習の足がかりになる
- Processing デモ
 - 円を描く → [http://www.openprocessing.org/visuals/?visualID=7007](http://www.openprocessing.org/visuals/?visualID=7007)
 - マウスを使ってお絵描き → [http://www.openprocessing.org/visuals/?visualID=7008](http://www.openprocessing.org/visuals/?visualID=7008)
- Frocessing デモ
 - [Frocessing](http://www.libspark.org/wiki/nutsu/Frocessing) ... Processingライクに記述することができるActionScriptのライブラリ
 - お試しには wonderfl がおすすめ！ [http://wonderfl.net/](http://wonderfl.net/)
 - 円を描く → [http://wonderfl.net/code/653b4b2d317c8ae0863df2970979dccab61264e0](http://wonderfl.net/code/653b4b2d317c8ae0863df2970979dccab61264e0)
 - マウスを使ってお絵描き → [http://wonderfl.net/code/3e7a5aab128985e3d3fc65fdaf563573e9753002](http://wonderfl.net/code/3e7a5aab128985e3d3fc65fdaf563573e9753002)
 - Flash CS5 では iPhoneアプリがパブリッシュできる！
- OpenFrameworks デモ
 - [OpenFrameworks](http://www.openframeworks.cc/) ... Processingライクに記述することができるC++のライブラリ
 - iPhoneアプリもつくれる！
 - 円を描く
 - マウスを使ってお絵描き
- Android デモ
 - Processing for Android を利用する（Androidエミュレーターにインストールしたものを実行）
 - 詳しくは、ブログ記事にまとめました → <a href="http://www.d-improvement.jp/learning/processing/android/processing-for-android.html">Processing for Android を試してみた</a>
- 推薦図書
 - <a href="http://www.amazon.co.jp/exec/obidos/ASIN/0262182629/dimprovement-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51UPLtYbwkL._SL160_.jpg" alt="Processing: A Programming Handbook for Visual Designers and Artists" style="border: none;" /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/0262182629/dimprovement-22/ref=nosim/" name="amazletlink" target="_blank">Processing: A Programming Handbook for Visual Designers and Artists</a>
 - <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4862670776/dimprovement-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51IaCC25TGL._SL160_.jpg" alt="ブラウザで無料ではじめるActionScript 3.0 ―It's a wonderfl world―" style="border: none;" /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4862670776/dimprovement-22/ref=nosim/" name="amazletlink" target="_blank">ブラウザで無料ではじめるActionScript 3.0 ―It's a wonderfl world―</a>
 - <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4861006708/dimprovement-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51tD4xchDpL._SL160_.jpg" alt="Beyond Interaction ―メディアアートのためのopenFrameworksプログラミング入門" style="border: none;" /></a>
 <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4861006708/dimprovement-22/ref=nosim/" name="amazletlink" target="_blank">Beyond Interaction ―メディアアートのためのopenFrameworksプログラミング入門</a>
- 参考サイト
 - <a href="http://www.d-improvement.jp/learning/processing/">Processing 学習ノート</a>
 - <a href="http://www.iphoneart.org/">iPhoneArt | Software Art for the iPhone</a>
- まとめ
 - デザイナー向けの開発環境が整いつつある。始めるなら今！（無料だし！）
 - インタラクティブデザインは面白い！
 - Processing ではじめよう！
- ありがとうございました！]]>
    </content>
</entry>

<entry>
    <title>1b-13 課題「時計」制作のヒント</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/notebook/1b-13.html" />
    <id>tag:www.d-improvement.jp,2010:/learning/processing//1.119</id>

    <published>2010-01-25T05:40:00Z</published>
    <updated>2010-01-25T01:04:25Z</updated>

    <summary>課題「時計」の参考作品 ...</summary>
    <author>
        <name>masa</name>
        
    </author>
    
        <category term="1b" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ノート" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.d-improvement.jp/learning/processing/">
        課題「時計」の参考作品
        <![CDATA[## 自作した画像でデジタル時計をつくる

<iframe width="348" height="560" scrolling="no" frameborder="0" src="http://www.openprocessing.org/visuals/iframe.php?visualID=7120&width=320&height=480"></iframe>

数字が「かな」におきかわると、今何時なのかが瞬時に理解できなくなる。

    int numNumbers = 10;
    PImage[] images = new PImage[numNumbers];
    
    void setup() {
      size(320, 480);
      background(255);
      frameRate(1);
      // 画像の読み込み
      for (int i = 0; i < numNumbers; i++) {
          images[i] = loadImage(i + ".png");
      }
    }
    
    void draw() {
      background(255);
      
      int h = hour(); // 時
      int h10 = int(h / 10); // 時の10の位
      int h1 = h % 10; // 時の1の位
      image(images[h10], 75, 60); // 時の10の位を表示
      image(images[h1], 175, 60); // 時の1の位を表示
      
      int m = minute(); // 分
      int m10 = int(m / 10); // 分の10の位
      int m1 = m % 10; // 分の1の位
      image(images[m10], 75, 180); // 分の10の位を表示
      image(images[m1], 175, 180); // 分の1の位を表示
      
      int s = second(); // 秒
      int s10 = int(s / 10); // 秒の10の位
      int s1 = s % 10; // 秒の1の位
      image(images[s10], 75, 300); // 秒の10の位を表示
      image(images[s1], 175, 300); // 秒の1の位を表示
      //println(s10 + " " + s1 + " | " + s);
    }]]>
    </content>
</entry>

<entry>
    <title>Processing for Android を試してみた</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/android/processing-for-android.html" />
    <id>tag:www.d-improvement.jp,2009:/learning/processing//1.116</id>

    <published>2009-12-28T13:03:40Z</published>
    <updated>2009-12-30T00:12:02Z</updated>

    <summary>Processing for Android をMac OS10.6で試してみた...</summary>
    <author>
        <name>masa</name>
        
    </author>
    
        <category term="android" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.d-improvement.jp/learning/processing/">
        Processing for Android をMac OS10.6で試してみた。
        <![CDATA[## ダウンロード

- <a href="http://android.processing.org/">android.processing.org</a> からAdnroidのビルドに対応したProcessingをダウンロード
 - そのままアプリケーションフォルダに入れると、元々あるProcessingを上書きしてしまうので、「Processing for Android」のようにリネームしてから配置する。
- <a href="http://developer.android.com/intl/ja/sdk/index.html">Android SDK | Android Developers</a> からAndroid SDKをダウンロード
 - 解凍したフォルダ「android-sdk-mac_86」をアプリケーションフォルダに配置

## Android SDK のセットアップ

- Android SDK を起動する
 - android-sdk-mac\_86フォルダ内toolsフォルダ内のandroidをダブルクリック（これで起動しない場合は、ターミナルから「/Applications/android-sdk-mac\_86/tools/android 」入力して起動する）

- サイドメニューの「Available Packages」を選び、Processing for Android に必要な以下4つのPackageをインストールする
 - SDK Platform Android 1.6, API 4
 - SDK Platform Android 2.0, API 5
 - Google APIs by Google Inc., Android API 4
 - Google APIs by Google Inc., Android API 5

<a href="http://www.flickr.com/photos/mathatelle/4221542493/" title="Processing for Android by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2655/4221542493_18def5790b_o.png" width="818" height="460" alt="Processing for Android" /></a>

※ダウンロードができない場合は、Settingを以下のようにしてみる。

<a href="http://www.flickr.com/photos/mathatelle/4222303750/" title="Processing for Android by mathatelle, on Flickr"><img src="http://farm5.static.flickr.com/4022/4222303750_21acc6e4bd_o.png" width="818" height="460" alt="Processing for Android" /></a>

## Android Mode の設定

- Processing (for Android) を起動し、「Android Mode」を設定する

<a href="http://www.flickr.com/photos/mathatelle/4221542551/" title="Processing for Android by mathatelle, on Flickr"><img src="http://farm5.static.flickr.com/4041/4221542551_d1e2e2d66c_o.png" width="528" height="343" alt="Processing for Android" /></a>

設定が完了すると「Done loading Android tools.」と表示される。

※初回の設定時に Android SDK の場所を聞かれるので、「android-sdk-mac\_86」フォルダを指定する。指定先を間違えた場合は、ライブラリフォルダ内Processingフォルダ内のpreferences.txtに「android.sdk.path=/Applications/android-sdk-mac\_86」と直接設定すればよい。

## Android emulator で sketch を実行する

- Android Mode 設定後、Run する。
- Android emulator が起動しsketch が実行される。

<a href="http://www.flickr.com/photos/mathatelle/4221542621/" title="Processing for Android by mathatelle, on Flickr"><img src="http://farm5.static.flickr.com/4038/4221542621_7e10a43f77_o.png" width="791" height="556" alt="Processing for Android" /></a>

※Processing と Android emulator の連携が不安定っぽく、何度かリトライすることで正常に実行された。]]>
    </content>
</entry>

<entry>
    <title>1b-10 ライブカメラを使う</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/notebook/1b-10.html" />
    <id>tag:www.d-improvement.jp,2009:/learning/processing//1.113</id>

    <published>2009-12-14T05:40:00Z</published>
    <updated>2009-12-13T11:26:02Z</updated>

    <summary>ライブカメラの映像を加工した作品をつくってみる。 ...</summary>
    <author>
        <name>masa</name>
        
    </author>
    
        <category term="1b" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ノート" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="camera" label="camera" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="for" label="for" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="loadpixels" label="loadPixels" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="video" label="video" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.d-improvement.jp/learning/processing/">
        ライブカメラの映像を加工した作品をつくってみる。
        <![CDATA[## ライブカメラの映像を表示する

### そのまま表示する

<a href="http://www.flickr.com/photos/mathatelle/4180018215/" title="sketch_1b_10_1 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2590/4180018215_c756b6b601.jpg" width="480" height="320" alt="sketch_1b_10_1" /></a>

    import processing.video.*; // Videoを扱うライブラリをインポート
    Capture camera; // ライブカメラの映像をあつかうCaptureの変数
    
    void setup() {
      size(480, 320);
      camera = new Capture(this, width, height, 12); // Captureオブジェクトを生成
    }
    
    void draw() {
      image(camera, 0, 0); // 画面に表示
    } 
    
    //カメラの映像が更新されるたびに、最新の映像を読み込む
    void captureEvent(Capture camera) {
      camera.read();
    }

### 同じ映像を4分割で表示する

<a href="http://www.flickr.com/photos/mathatelle/4180018279/" title="sketch_1b_10_2 by mathatelle, on Flickr"><img src="http://farm5.static.flickr.com/4005/4180018279_50715a7934.jpg" width="480" height="320" alt="sketch_1b_10_2" /></a>

    import processing.video.*;
    Capture camera;
    
    void setup() {
      size(480, 320);
      camera = new Capture(this, width, height, 12);
    }
    
    void draw() {
      image(camera, 0, 0, width/2, height/2); // 画面に表示　左上に1/2サイズで
      image(camera, width/2, 0, width/2, height/2); // 画面に表示　右上に1/2サイズで
      image(camera, 0, height/2, width/2, height/2); // 画面に表示　左下に1/2サイズで
      image(camera, width/2, height/2, width/2, height/2); // 画面に表示　右下に1/2サイズで
    } 
    
    void captureEvent(Capture camera) {
      camera.read();
    }

### 色情報を取得して再描画する

<a href="http://www.flickr.com/photos/mathatelle/4180018327/" title="sketch_1b_10_3 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2641/4180018327_242575d31d.jpg" width="480" height="320" alt="sketch_1b_10_3" /></a>

    import processing.video.*;
    Capture camera;
    
    void setup() {
      size(480, 320);
      colorMode(HSB, 100);
      smooth();
      noStroke();
      camera = new Capture(this, width, height, 12);
    }
    
    void draw() {
      background(0);
      camera.loadPixels(); //カメラ画像のpixel情報を読み込み
      int d = 10; //円の直径を定義
      // ライブカメラの映像から、円の直径の間隔ごとに、色情報を取得し、その色で円を描く
      for(int y = d / 2 ; y < height ; y += d) {
        for(int x = d / 2 ; x < width ; x += d) {
          int pos = (y * width) + x; // pixelの位置
          color c = camera.pixels[pos]; // pixelの色情報
          fill(c);
          ellipse(x, y, d, d);
        }
      }
    } 
    
    void captureEvent(Capture camera) {
      camera.read();
    }

#### pixels 配列とは

- 画面全体またはPImageオブジェクトを1次元の配列として表したもの
- color型の配列
- (x,y)の情報は pixels[(y*width)+x)] で得られる

#### 練習
- 円の大きさをランダムにしてみる
- 色情報を加工してみる

<!--
### ライブカメラの映像を表示する（差分を調べる）

    import processing.video.*;
    Capture camera;
    PImage pCamera;
    
    void setup() {
      size(480, 320);
      camera = new Capture(this, width, height, 12);
      pCamera = new PImage(width, height);
    }
    
    void draw() {
      pCamera.loadPixels();
      tint(255,64);
      image(camera,0,0);
      
      int d = 40;
      for(int y=d/2 ; y < height ; y+=d/2) {
        for(int x=d/2 ; x < width ; x+=d/2) {
          int pos = (y * width) + x;
          color c = camera.pixels[pos];
          float diff = abs(brightness(pCamera.pixels[pos])-brightness(camera.pixels[pos]));
          if (diff > 50) {
            fill(c);
            ellipse(x, y, diff/2, diff/2);
          }
        }
      }
      pCamera.copy(camera, 0, 0, width, height, 0, 0, width, height);
    } 
-->

## 参考：OpenCV（画像処理ライブラリ）を使う

### 準備：OpenCVのインストール
- <a href="http://ubaa.net/shared/processing/opencv/">OPENCV \ library</a>
 - OpenCVのインストール
 - OpenCVの Processing ライブラリを、書類 ＞ Processing ＞ libraries 内に配置

※Mac室では、インストールの権限制限があり、みなさん自身ではインストールができません。利用したい場合は事前に相談ください。

### そのまま表示する

<a href="http://www.flickr.com/photos/mathatelle/4180781066/" title="sketch_1b_10_5 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2678/4180781066_d7c1ea3178.jpg" width="480" height="320" alt="sketch_1b_10_5" /></a>

    import hypermedia.video.*; //OpenCVライブラリをインポート
    OpenCV opencv; //OpenCV型の変数
    
    void setup() {
      size(480, 320);
      opencv = new OpenCV(this);
      opencv.capture(width, height); ////映像読み込みの初期化
    }
    
    void draw() {
      opencv.read(); //映像を読み込む
      image(opencv.image(), 0, 0); //映像を表示
    }

- videoライブラリを使用するときよりも、コードがシンプルになる

### 加工して表示する

<a href="http://www.flickr.com/photos/mathatelle/4180781156/" title="sketch_1b_10_6 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2543/4180781156_0db8f54230.jpg" width="480" height="320" alt="sketch_1b_10_6" /></a>

    import hypermedia.video.*;
    OpenCV opencv;
    
    void setup() {
      size(480, 320);
      opencv = new OpenCV(this);
      opencv.capture(width, height);
    }
    
    void draw() {
      opencv.read();
      //左上
      opencv.convert(OpenCV.GRAY); //グレースケールに変換  
      image(opencv.image(), 0, 0, width/2, height/2); //画面に表示　左上に1/2サイズで
      //右上
      opencv.invert(); //色を反転
      image(opencv.image(), width/2, 0, width/2, height/2); // 画面に表示　右上に1/2サイズで
      //左下
      opencv.restore(); //オリジナルの映像に戻す
      opencv.flip(OpenCV.FLIP_HORIZONTAL); //映像を水平方向に反転する
      image(opencv.image(), 0, height/2, width/2, height/2); // 画面に表示　左下に1/2サイズで
      //右下
      image(opencv.image(OpenCV.SOURCE), width/2, height/2, width/2, height/2); // 画面に表示　オリジナルの映像を右下に1/2サイズで
    }

### そのほかOpenCVでできること
- 顔認識 → <a href="http://ubaa.net/shared/processing/opencv/opencv_cascade.html">OpenCV::cascade() \ language (API)</a>
- 輪郭検出 → <a href="http://ubaa.net/shared/processing/opencv/opencv_blobs.html">OpenCV::blobs() \ language (API)</a>]]>
    </content>
</entry>

<entry>
    <title>Box2D を Processing で使う</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/libraries/box2d/box2d-processing-jbox2d-boxwrap2d.html" />
    <id>tag:www.d-improvement.jp,2009:/learning/processing//1.114</id>

    <published>2009-12-13T09:04:45Z</published>
    <updated>2009-12-20T14:14:53Z</updated>

    <summary>物理エンジンBox2DをProcessingで使ってみる。 ...</summary>
    <author>
        <name>masa</name>
        
    </author>
    
        <category term="box2d" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="box2d" label="box2d" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="library" label="library" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.d-improvement.jp/learning/processing/">
        物理エンジンBox2DをProcessingで使ってみる。
        <![CDATA[## インストール

<!--- JBox2D をダウンロード
 - <a href="http://sourceforge.net/projects/jbox2d/files/">Browse JBox2D Files on SourceForge.net</a> から最新版をダウンロードする（本エントリー執筆時は2.0.1）
 - 解凍したフォルダ名を「JBox2D」として、次のフォルダ内に配置：書類 ＞ Processing ＞ libraries
-->

- BoxWrap2Dをダウンロード
 - <a href="http://jbox2d.nfshost.com/processing/">BoxWrap2D</a>ページ内の「Get the library」をクリックしてダウンロード
 - 解凍したフォルダ「boxwrap2d」を、次のフォルダ内に配置：書類 ＞ Processing ＞ libraries ※Macの場合
- Processing を起動していた場合は、再起動する

## Box2D を使ってみる

- 「画面をクリックすると、マウスポインタの位置から円が落ちる」プログラムを書いてみる

<iframe width="508" height="400" scrolling="no" frameborder="0" src="http://www.openprocessing.org/visuals/iframe.php?visualID=6523&width=480&height=320"></iframe>

    import org.jbox2d.p5.*;
    
    Physics physics;
    
    void setup() {
      size(500, 500);
      frameRate(60);
      physics = new Physics(this, width, height);
      physics.setDensity(1.0);
    }
    
    void draw() {
      background(204);
    }
    
    void mousePressed() {
      physics.createCircle(mouseX, mouseY, 15);
    }

- 参考にしたページ：<a href="http://processing.org/discourse/yabb2/YaBB.pl?num=1247034244">Processing 1.0 - JBox2D with BoxWrap2D Tutorial</a>
- メモ：BoxWrap2Dフォルダに入っているサンプル「SwingingDemo」を実行すると「The package "org.jbox2d.testbed.tests" does not exist. You might be missing a library.」とエラーが出た。以下のimport文を削除したら動いた。

　

    import org.jbox2d.testbed.tests.*;  
    import org.jbox2d.testbed.*;  
    import org.jbox2d.util.blob.*;  
    import org.jbox2d.testbed.timingTests.*;]]>
    </content>
</entry>

<entry>
    <title>1b-09 アニメーション</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/notebook/1b-09.html" />
    <id>tag:www.d-improvement.jp,2009:/learning/processing//1.109</id>

    <published>2009-12-07T05:40:00Z</published>
    <updated>2009-12-07T05:38:39Z</updated>

    <summary>画像シーケンスからアニメーションを作成する方法を学ぶ ...</summary>
    <author>
        <name>masa</name>
        
    </author>
    
        <category term="1b" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ノート" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.d-improvement.jp/learning/processing/">
        画像シーケンスからアニメーションを作成する方法を学ぶ
        <![CDATA[## 画像シーケンスでアニメーションをつくる

- 下記プログラムを実行する前に、画像データをsketchのdataフォルダ内に読み込んでおく
- [ここをクリックして素材をダウンロード](http://dl.dropbox.com/u/446018/sq_iinaiina.zip)

### for文をつかわずに、画像を読み込む

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="320" height="240" title="iinaiina6">
  <param name="movie" value="../uploads/iinaiina6.swf" />
  <param name="quality" value="high" />
  <embed src="../uploads/iinaiina6.swf" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="320" height="240"></embed>
</object>

    int numFrames = 12; //アニメーションのフレーム数
    int frame = 0; // 表示するフレーム番号
    PImage[] images = new PImage[numFrames]; //アニメーション画像の配列
    
    void setup() {
      size(320, 240);
      frameRate(6);
      // 画像の読み込み
      images[0] = loadImage("animation-000.jpg");
      images[1] = loadImage("animation-005.jpg");
      images[2] = loadImage("animation-010.jpg");
      images[3] = loadImage("animation-015.jpg");
      images[4] = loadImage("animation-020.jpg");
      images[5] = loadImage("animation-025.jpg");
      images[6] = loadImage("animation-030.jpg");
      images[7] = loadImage("animation-035.jpg");
      images[8] = loadImage("animation-040.jpg");
      images[9] = loadImage("animation-045.jpg");
      images[10] = loadImage("animation-050.jpg");
      images[11] = loadImage("animation-055.jpg");
    }
    
    void draw() {
      frame++; 
      // ループ処理
      if (frame == numFrames) {
        frame = 0;
      }
      image(images[frame], 0, 0); //画像を表示
    }

### for文を使ってたくさんの画像を読み込む

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="320" height="240" title="iinaiina30">
  <param name="movie" value="../uploads/iinaiina30.swf" />
  <param name="quality" value="high" />
  <embed src="../uploads/iinaiina30.swf" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="320" height="240"></embed>
</object>

    int numFrames = 60; //アニメーションのフレーム数
    PImage[] images = new PImage[numFrames]; //アニメーション画像の配列
    
    void setup() {
      size(320, 240);
      frameRate(30);
      // 画像の読み込み
      for (int i = 0; i < images.length; i++) {
        images[i] = loadImage("animation-" + nf(i, 3) + ".jpg");
      }
    }
    
    void draw() {
      int frame = frameCount % numFrames; //現在のフレームをアニメーションのフレーム数で割った余りを代入
      image(images[frame], 0, 0); //画像を表示
    }

### 練習：動きを加える

1. 表示の際、画像をほんの少しランダムに配置する
2. 表示の際、画像を1pxずつ下げて表示する
3. 表示の際、不透明度を設定し、残像のように見せる

<!--
int numFrames = 60; //アニメーションのフレーム数
PImage[] images = new PImage[numFrames]; //アニメーション画像の配列
float opacity = 0; //不透明度

void setup() {
  size(320, 240);
  frameRate(30);
  // 画像の読み込み
  for (int i = 0; i < images.length; i++) {
    images[i] = loadImage("animation-" + nf(i, 3) + ".jpg");
  }
}

void draw() {
  if (opacity < 255) {
      opacity += 0.5;
    }
  tint(255, opacity); //画像に不透明度を設定
  int frame = frameCount % numFrames; //現在のフレームをアニメーションのフレーム数で割った余りを代入
  image(images[frame], 0, 0); //画像を表示
}
-->

## マウスの動きで、アニメーションをコントロールする

    int numFrames = 60; //アニメーションのフレーム数
    PImage[] images = new PImage[numFrames]; //アニメーション画像の配列
    
    void setup() {
      size(320, 240);
      frameRate(30);
      // 画像の読み込み
      for (int i = 0; i < images.length; i++) {
        images[i] = loadImage("animation-" + nf(i, 3) + ".jpg");
      }
    }
    
    void draw() {
    }
    
    void mouseMoved() {
      int frame = int(map(mouseX, 0, width, 0, numFrames)); //マウスポインタのx座標を0以上60未満の値へマッピング
      image(images[frame], 0, 0);
    }

## 練習：おみくじ（画像版）をつくってみる

- おみくじの画像（大吉、中吉、小吉、吉）をイラストレータまたはPhotoshopで作成する。画像形式はPNG形式を推奨。
- 以下の演出を入れる
 - プログラムを実行すると、おみくじのアニメーションがスタートする。大吉、中吉、小吉、吉の順
 - 画面をマウスでクリックすると、アニメーションがストップする。
 - キーボードを押すと、おみくじのアニメーションがスタートする。]]>
    </content>
</entry>

<entry>
    <title>1b-08 課題「おみくじをつくる」</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/notebook/1b-08.html" />
    <id>tag:www.d-improvement.jp,2009:/learning/processing//1.75</id>

    <published>2009-11-30T05:40:00Z</published>
    <updated>2009-11-30T06:29:21Z</updated>

    <summary>これまでの授業で学んだことをもとにして、「おみくじ」を作成してください。 ...</summary>
    <author>
        <name>di</name>
        
    </author>
    
        <category term="1b" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ノート" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.d-improvement.jp/learning/processing/">
        これまでの授業で学んだことをもとにして、「おみくじ」を作成してください。
        <![CDATA[## 課題概要

### おみくじをつくる
- 大吉、中吉、小吉、吉の4つとする
 - 表示方法は、text関数を使う場合はローマ字で、image関数を使う場合は任意とする
- ウィンドウサイズは自由とする

## 作り方のヒント

- どのタイミングでおみじくを表示するか？
 - ユーザーがアクションを起こしたとき
- どうやってユーザーにアクションを起こしてもらうか？
 - マウスやキーボードからの入力
 - ヒント：<a href="http://www.d-improvement.jp/learning/processing/notebook/1b-04.html">1b-04 反応させる（マウスからの入力に）</a>
 - ヒント：<a href="http://www.d-improvement.jp/learning/processing/notebook/1b-05.html">1b-05 反応させる（キーボードからの入力に）</a>
- おみくじデータの用意方法は？
 - 配列を利用する
 - ヒント：<a href="http://www.d-improvement.jp/learning/processing/notebook/1b-07.html">1b-07 配列を使う</a>の「用意したデータを選ぶ」
- おみくじをランダムに選ぶには？
 - random関数を利用する
 - ヒント：<a href="http://www.d-improvement.jp/learning/processing/notebook/1a-05.html">1a-05 繰り返し（ループ）とランダム</a>
- 大吉が出にくく、吉が出やすくするには？
 - 100本のくじのうち、大吉は10本、中吉は20本、小吉は30本、吉は40本、と考える
 - ヒント：<a href="http://www.d-improvement.jp/learning/processing/notebook/1a-06.html">1a-06 条件と分岐</a>
 - if(...){...}else if(...){...}else if(...){...}else{}

## 手順のヒント
- 基本的な機能が動作するシンプルな「プロトタイプ」を作る
- プロトタイプが出来てから、細部を作り込んでいく

## 評価のポイント
- おみくじとして成立しているか
- おみくじの面白さを客観的に理解し、ビジュアル・演出等で表現できているか
- シンプルでわかりやすいプログラムを書いているか]]>
    </content>
</entry>

<entry>
    <title>1b-07 配列を使う</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/notebook/1b-07.html" />
    <id>tag:www.d-improvement.jp,2009:/learning/processing//1.74</id>

    <published>2009-11-16T05:40:00Z</published>
    <updated>2009-11-16T05:32:15Z</updated>

    <summary>配列とは番号の付いた変数。1つの名前の変数で複数の値を持つことができる。 ...</summary>
    <author>
        <name>di</name>
        
    </author>
    
        <category term="1b" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ノート" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="array" label="array" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="length" label="length" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.d-improvement.jp/learning/processing/">
        配列とは番号の付いた変数。1つの名前の変数で複数の値を持つことができる。
        <![CDATA[## 配列を使わないプログラムと配列を使ったプログラムの比較

5つの点A,B,C,D,Eを順に直線で結ぶ

<a href="http://www.flickr.com/photos/mathatelle/4104579749/" title="1b-07-1 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2555/4104579749_a6b5a9373d_o.png" width="100" height="100" alt="1b-07-1" /></a>

### 配列を使わないプログラム（変数を使わない）

    void setup() {
      size(100, 100);
      noLoop();
    }
    
    void draw() {
      // 5つの点A,B,C,D,Eを順に直線で結ぶ
      beginShape(); 
      vertex(50, 18); //点Aの座標を指定
      vertex(29, 82); //点Bの座標を指定
      vertex(83, 43); //点Cの座標を指定
      vertex(17, 43); //点Dの座標を指定
      vertex(71, 82); //点Eの座標を指定
      endShape(CLOSE);
    }

### 配列を使わないプログラム（変数を使う）

    void setup() {
      size(100, 100);
      noLoop();
    }
    
    void draw() {
      int x0 = 50, y0 = 18; //点Aのx座標, y座標
      int x1 = 29, y1 = 82; //点Bのx座標, y座標
      int x2 = 83, y2 = 43; //点Cのx座標, y座標
      int x3 = 17, y3 = 43; //点Dのx座標, y座標
      int x4 = 71, y4 = 82; //点Eのx座標, y座標
      // 5つの点A,B,C,D,Eを順に直線で結ぶ
      beginShape();
      vertex(x0, y0);
      vertex(x1, y1);
      vertex(x2, y2);
      vertex(x3, y3);
      vertex(x4, y4);
      endShape(CLOSE);
    }

### 配列を使ったプログラム

    void setup() {
      size(100, 100);
      noLoop();
    }
    
    void draw() {
      int[] x = {50, 29, 83, 17, 71}; //点A,B,C,D,Eのx座標
      int[] y = {18, 82, 43, 43, 82}; //点A,B,C,D,Eのy座標
      // 5つの点A,B,C,D,Eを順に直線で結ぶ
      beginShape();
      for (int i = 0; i < x.length; i++) {
        vertex(x[i], y[i]);
      }
      endShape(CLOSE);
    }

- プログラムが短くシンプルに
- 点の数を増やしたいとき、プログラムの書き換えが簡単

#### 配列宣言

- 《配列データ型》[] 《配列の名前》　例）int[] x
- 《配列データ型》[] 《配列の名前》 =  new 《配列の設定》　例）int[] x = new int[5]

#### 配列への代入

- 一度にまとめて　例）x = {50, 29, 83, 17, 71}
- 個別に: x[0] = 50, x[1] = 29, x[2] = 83, x[3] = 17, x[4] = 71　※0番目から始まることに注意

#### **length** 配列の長さ

- 上記サンプルで、x.length は 5 となる

## 配列の使い方1 「過去のデータを記憶する」

<a href="http://www.flickr.com/photos/mathatelle/3751895920/" title="1b-06-1 by mathatelle, on Flickr"><img src="http://farm4.static.flickr.com/3531/3751895920_207cbcf667.jpg" width="500" height="375" alt="1b-06-1" /></a>

    int length = 50; //配列の個数
    int[] x = new int[length]; //x座標を記録する配列
    int[] y = new int[length]; //y座標を記録する配列
    
    void setup() {
      size(800, 600);
      smooth();
      frameRate(60);
    }
    
    void draw() {
       background(204); //画面をリセット
      //配列を参照して円を描画する
      for(int i=0 ; i < length ; i++) {
        fill(i * 3);
        ellipse(x[i], y[i], i, i);
      }
    }
    
    //マウスが動いたときの処理：マウスの座標を記録する
    void mouseMoved() {
      //配列の値をひとつ後ろへ移動する
      for(int i = length - 1 ; i >= 1 ; i--) {
        x[i] = x[i-1];
        y[i] = y[i-1];
      }
      x[0] = mouseX;
      y[0] = mouseY;
    }

## 配列の使い方2 「複数の動きを処理する」

<a href="http://www.flickr.com/photos/mathatelle/3751895952/" title="1b-07-1-[I@8ab08f by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2671/3751895952_fb1cf6108a_o.png" width="400" height="400" alt="1b-07-1-[I@8ab08f" /></a> <a href="http://www.flickr.com/photos/mathatelle/3751106081/" title="1b-07-1-[I@4fe91e by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2576/3751106081_c8be4546a8_o.png" width="400" height="400" alt="1b-07-1-[I@4fe91e" /></a>

    int length = 20;
    float[] x = new float[length];
    float[] speed = new float[length];
    
    void setup() {
      size(400, 400);
      for (int i = 0; i < length; i++){
        x[i] = width / 2;
        speed[i] = random(-1, 1);
      }
    }
    
    void draw() {
      background(204);
      for (int i = 0; i < length; i++){
        x[i] = x[i] + speed[i];
        rect(x[i], (height / length) * i, 10, 10);
      }
    }

※ 上のプログラムは、以下のプログラムを応用したもの

    float x;
    float speed;
    
    void setup() {
      size(400, 400);
      x = width / 2;
      speed = 1;
    }
    
    void draw() {
      background(204);
      x = x + speed;
      rect(x, height/2, 10, 10);
    }

## 配列の使い方3 「用意したデータを選ぶ」

<a href="http://www.flickr.com/photos/mathatelle/3751896096/" title="1b-07-3-1 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2512/3751896096_26ef2bd8a8_m.jpg" width="240" height="240" alt="1b-07-3-1" /></a> <a href="http://www.flickr.com/photos/mathatelle/3751896138/" title="1b-07-3-2 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2480/3751896138_2e53ff67a9_m.jpg" width="240" height="240" alt="1b-07-3-2" /></a> <a href="http://www.flickr.com/photos/mathatelle/3751896180/" title="1b-07-3-3 by mathatelle, on Flickr"><img src="http://farm4.static.flickr.com/3466/3751896180_1e32ea2f69_m.jpg" width="240" height="240" alt="1b-07-3-3" /></a>

    String[] message = {"how","are","you?","I","am","fine","thank","you!"};
    PFont font;
    int count = 0;
    
    void setup(){
      size(400, 400);
      colorMode(HSB, 100);
      background(99);
      font = loadFont("sample.vlw");
      textFont(font);
      textAlign(CENTER);
      frameRate(3);
    }
    
    void draw() {
      background(99);
      fill(random(100), 99, 99);
      text(message[count], width/2, height/2);
      count++;
      count %= message.length;
    }

## 練習
- 「おみくじ」を作る]]>
    </content>
</entry>

<entry>
    <title>1b-06 時間を表示する</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/notebook/1b-06.html" />
    <id>tag:www.d-improvement.jp,2009:/learning/processing//1.102</id>

    <published>2009-11-09T05:40:00Z</published>
    <updated>2009-12-06T05:43:20Z</updated>

    <summary>現在の時間を表示する。 ...</summary>
    <author>
        <name>masa</name>
        
    </author>
    
        <category term="1b" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ノート" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="framerate" label="frameRate" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="hour" label="hour" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="minute" label="minute" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="nf" label="nf" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="println" label="println" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="second" label="second" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.d-improvement.jp/learning/processing/">
        現在の時間を表示する。
        <![CDATA[## **hour, minute, second** 時、分、秒

### コンソールに日時を表示する

<a href="http://www.flickr.com/photos/mathatelle/4074593515/" title="1b-06 時間 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2531/4074593515_54a26ce2d3_o.png" width="365" height="600" alt="1b-06 時間" /></a>

    void setup() {
      size(100, 100);
      frameRate(1); //フレームレートを1に設定（毎秒1回draw関数を実行）
    }
    
    void draw() {
      int s = second(); //秒
      int m = minute(); //分
      int h = hour(); //時
      println(h + ":" + m + ":" + s); //コンソールに日時を表示
    }

### コンソールに日時を表示する（分と秒は2ケタで表示）

<a href="http://www.flickr.com/photos/mathatelle/4074593579/" title="1b-06 時間 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2515/4074593579_5664bac28b_o.png" width="365" height="600" alt="1b-06 時間" /></a>

    void setup() {
      size(100, 100);
      frameRate(1);
    }
    
    void draw() {
      int s = second();
      int m = minute();
      int h = hour();
      String t = h + ":" + nf(m, 2) + ":" + nf(s, 2);
      println(t);
    }

### ウィンドウに日時を表示する

<a href="http://www.flickr.com/photos/mathatelle/4084882758/" title="1b-06-6 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2627/4084882758_7cb8d38bc8_o.png" width="100" height="100" alt="1b-06-6" /></a>

    PFont font;
    
    void setup() {
      size(100, 100);
      frameRate(1);
      font = loadFont("Monaco-18.vlw");
      textFont(font);
      textAlign(RIGHT);
    }
    
    void draw() {
      background(0);
      int s = second();
      int m = minute();
      int h = hour();
      String t = h + ":" + nf(m, 2) + ":" + nf(s, 2);
      //println(t);
      text (t, 93, 55);
    }

## 時間を視覚化する

### 長方形の長さで、時計を表現する

<a href="http://www.flickr.com/photos/mathatelle/4082784780/" title="1b-06-3 by mathatelle, on Flickr"><img src="http://farm4.static.flickr.com/3504/4082784780_2afda7eb5f_o.png" width="240" height="240" alt="1b-06-3" /></a>

19:45:06

    void setup() {
      size(240, 240);
      frameRate(1);
    }
    
    void draw() {
      background(204);
      int s = second();
      int m = minute();
      int h = hour();
      //長方形の長さで時計を表現する
      rect(0, 0, h*10, height/3); 
      rect(0, height/3, m*4, height/3);
      rect(0, height*2/3, s*4, height/3);
    }

### 三針時計をつくる

<a href="http://www.flickr.com/photos/mathatelle/4083182064/" title="1b-06-4_21:10:24 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2651/4083182064_96b7685948_o.png" width="240" height="240" alt="1b-06-4_21:10:24" /></a>

※針の描画を理解するには、三角関数の知識が必要。

    void setup() {
      size(240, 240);
      frameRate(1);
      smooth();
    }
    
    void draw() {
      background(204);
      noStroke();
      ellipse (120, 120, 200, 200);
      int s = second();
      int m = minute();
      int h = hour();
      stroke(0);
      strokeWeight(4);
      line(120, 120 , 60*cos(h % 12 * TWO_PI / 12 - HALF_PI) + 120, 60*sin(h % 12 * TWO_PI / 12 - HALF_PI) +120); //時針の描画
      strokeWeight(2);
      line(120, 120 , 80*cos(m * TWO_PI / 60 - HALF_PI) + 120, 80*sin(m * TWO_PI / 60 - HALF_PI) +120); //分針の描画
      strokeWeight(1);
      line(120, 120 , 90*cos(s * TWO_PI / 60 - HALF_PI) + 120, 90*sin(s * TWO_PI / 60 - HALF_PI) +120); //秒針の描画
    }

## 練習
- second関数を利用し、時間（秒）に反応したアニメーションを作成する

## 参考資料：時計を用いたビジュアル・インタラクティブ表現
- <a href="http://book.mycom.co.jp/wd/teraclock/gallery.html">Web Designing: TeraClockでFlash時計を作ろう「みんなのオリジナル時計」ギャラリー</a>
  - <a href="http://physiclock.com/">physiclock</a>
- <a href="http://scr.sc/products/dropclock/">SCR | DROPCLOCK by tha</a>
- <a href="http://scr.sc/products/crashclock/">SCR | CRASHCLOCK by tha</a>
- <a href="http://yugop.com/ver3/index.asp?id=3">INDUSTRIOUS CLOCK - SURFACE.YUGOP.COM || MONO*crafts 3.0</a>
- <a href="http://yugop.com/ver3/index.asp?id=29">CLOCKBLOCK1.0 - SURFACE.YUGOP.COM || MONO*crafts 3.0</a>
- <a href="http://www.uniqlo.jp/uniqlock/">UNIQLOCK</a>

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="424" height="278" codebase="http://fpdownload.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"><param name="allowScriptAccess" value="always" /><param name="movie" value="http://www.uniqlo.jp/uniqlock/swf/blog_large.swf?user_id=gysxOBGLZl444fIg" /><param name="base" value="." /><param name="quality" value="high" /><param name="wmode" value="transparent" /><embed src="http://www.uniqlo.jp/uniqlock/swf/blog_large.swf?user_id=gysxOBGLZl444fIg" width="424" height="278" allowScriptAccess="always" base = "." quality="high" wmode="transparent" pluginspage="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" /></object>]]>
    </content>
</entry>

<entry>
    <title>1b-05 反応させる（キーボードからの入力に）</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/notebook/1b-05.html" />
    <id>tag:www.d-improvement.jp,2009:/learning/processing//1.72</id>

    <published>2009-11-02T05:40:00Z</published>
    <updated>2009-11-04T14:35:09Z</updated>

    <summary>キーボードからの入力に反応して、画面が変化するプログラムを学ぶ。 ...</summary>
    <author>
        <name>di</name>
        
    </author>
    
        <category term="1b" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ノート" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="key" label="key" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="keypressed" label="keyPressed" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="keyreleased" label="keyReleased" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.d-improvement.jp/learning/processing/">
        キーボードからの入力に反応して、画面が変化するプログラムを学ぶ。
        <![CDATA[## **keyPressed** キーが押されている（== true）、押されていない（== false）

キーが押されているとき、円が左から右にすすむ

<a href="http://www.flickr.com/photos/mathatelle/4064133130/" title="1b_05_1 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2627/4064133130_204065a7cd_o.png" width="400" height="400" alt="1b_05_1" /></a>

    int x = 0;
    
    void setup() {
      size(400, 400);
    }
    
    void draw() {
      background(204);
      if (keyPressed == true) {
        x++;
        //println(key);
      }
      ellipse(x, height/2, 60, 60);
    }

## **key** 押されたキーの文字や記号を納める変数

キーのa（小文字のエー）が押されているとき、円が左から右にすすむ

    int x = 0;
    
    void setup() {
      size(400, 400);
    }
    
    void draw() {
      background(204);
      if ((keyPressed == true) && (key == 'a')) {
        x++;
      }
      ellipse(x, height/2, 60, 60);
    }

※大文字小文字を問わないようにするためには、次のように「aまたはAが押されているとき」で条件を設定する

    int x = 0;
    
    void setup() {
      size(400, 400);
    }
    
    void draw() {
      background(204);
      if ((keyPressed == true) && ((key == 'a') ||  (key == 'A'))) {
        x++;
      }
      ellipse(x, height/2, 60, 60);
    }

## **void keyPressed() {...}** キーが押されたときに1回だけ {...} の中を実行する

※キーを押しっぱなしにして一定時間経つと、キーの連続入力状態になり、そのスピードに合わせ連続して実行される。

キーが押されると、円が1ピクセルだけ左から右にすすむ

    int x = 0;
    
    void setup() {
      size(400, 400);
    }
    
    void draw() {
    }
    
    void keyPressed() {
      background(204);
      x++;
      ellipse(x, height/2, 60, 60);
      //println(key);
    }

## **void keyReleased() {...}** キーが離されたときに1回だけ {...} の中を実行する

キーが離されると、円が止まる

    int x = 0;
    int speed = 1;
    
    void setup() {
      size(400, 400);
    }
    
    void draw() {
      background(204);
      x = x + speed;
      ellipse(x, height/2, 60, 60);
    }
    
    void keyReleased() {
      speed = 0;
    }

## 押されたキーの文字を表示する

<a href="http://www.flickr.com/photos/mathatelle/4064413872/" title="1b_05_2 by mathatelle, on Flickr"><img src="http://farm4.static.flickr.com/3480/4064413872_c137491925_o.png" width="400" height="400" alt="1b_05_2" /></a>

※事前に「Tools」の「Create Font...」でフォントデータを生成しておく。（教科書86ページまたは<a href="http://www.d-improvement.jp/learning/processing/notebook/1a-07.html">1a-07 画像や文字を使う</a>を参照）

    int x = 0, y = 50;
    PFont font;
    
    void setup() {
      size(400, 400);
      background(0);
      fill(255, 128);
      font = loadFont("Serif-48.vlw");
      textFont(font, 48);
      //textAlign(CENTER);
    }
    
    void draw() {
    }

    void keyPressed() {
      text(key, x, y);
    }
    
    void keyReleased() {
      x += 10;
      if (x > width) {
        x = 0;
        y += 50;
      }
    }

### 練習

1. 文字の出現位置をランダムにしてみる
2. 文字の色をランダムにしてみる
3. スペースキーを押すと、画面がリセットされる


<!--
## キーボードを使う

<a href="http://www.flickr.com/photos/mathatelle/3751105913/" title="1b-05-1 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2565/3751105913_e1aca37a3b_o.png" width="400" height="400" alt="1b-05-1" /></a>

    boolean doDraw = false;
    
    void setup() {
      size(400, 400);
      frameRate(30);
    }
    
    void draw() {
      if(doDraw) {
        ellipse(random(width),random(height),30,30);
      }
    }
    
    void keyPressed() {
       doDraw = true;
    }
    
    void keyReleased() {
       doDraw = false;
    }

### 練習

1. 教科書サンプル 3-4-e（129ページ）
2. 教科書サンプル 3-4-f （130ページ）

## 課題

- マウスの動き、マウスのボタン入力、キーボードの入力のいずれか最低1つを使って、小品を作る。
-->]]>
    </content>
</entry>

<entry>
    <title>1b-04 反応させる（マウスからの入力に）</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/notebook/1b-04.html" />
    <id>tag:www.d-improvement.jp,2009:/learning/processing//1.71</id>

    <published>2009-10-26T05:40:00Z</published>
    <updated>2009-11-04T14:34:42Z</updated>

    <summary>マウスからの入力（移動、クリック）に反応して、画面が変化するプログラムを学ぶ。 ...</summary>
    <author>
        <name>di</name>
        
    </author>
    
        <category term="1b" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ノート" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mousepressed" label="mousePressed" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mousereleased" label="mouseReleased" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mousex" label="mouseX" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mousey" label="mouseY" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pmousex" label="pmouseX" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pmousey" label="pmouseY" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.d-improvement.jp/learning/processing/">
        マウスからの入力（移動、クリック）に反応して、画面が変化するプログラムを学ぶ。
        <![CDATA[## **mouseX**, **mouseY** マウスポインタの位置（座標）

現在のマウスポインタの位置に円が描かれる。

<a href="http://www.flickr.com/photos/mathatelle/4042847176/" title="ib_4_0 by mathatelle, on Flickr"><img src="http://farm4.static.flickr.com/3519/4042847176_ff5fb23651_o.png" width="400" height="400" alt="ib_4_0" /></a>

    void setup() {
      size(400, 400);
    }

    void draw() {
      //background(204);
      //fill(0);
      ellipse(mouseX, mouseY, 60, 60);
    }

### 練習
- マウスポインタの位置に円がくっついて動く
- マウスポインタの位置に「10pxの黒い円」を描く

<!--
- 枠線を消す
- マウスのy座標に合わせて円の大きさを変える
- マウスのx座標に合わせて円の塗り色を変える
-->

##  **pmouseX**, **pmouseY** 前フレームのマウスポインタの位置（座標）

前フレームのマウスポインタの位置から現フレームのマウスポインタの位置に線が描かれる。（マウスを動かすと、線が描かれるように見える）

<a href="http://www.flickr.com/photos/mathatelle/4042811440/" title="1b_4_1 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2788/4042811440_9166433d9e_o.png" width="400" height="400" alt="1b_4_1" /></a>

    void setup() {
      size(400, 400);
      //strokeWeight(10);
    }

    void draw() {
      line(mouseX, mouseY, pmouseX, pmouseY);
    }

### 練習
- マウスポインタの位置が、画面の左側のときは線の太さを5, 画面の右側のときは線の太さを10にする

## **mousePressed** マウスボタンが押されている（== true）、押されていない（== false）

マウスボタンを押している間、線が描かれる。

<a href="http://www.flickr.com/photos/mathatelle/4042066879/" title="1b_4_2 by mathatelle, on Flickr"><img src="http://farm4.static.flickr.com/3535/4042066879_1f8a45c85a_o.png" width="400" height="400" alt="1b_4_2" /></a>

    void setup() {
      size(400, 400);
      strokeWeight(10);
    }

    void draw() {
      if (mousePressed == true){
        line(mouseX, mouseY, pmouseX, pmouseY);
      }
    }

## **void mousePressed() {...}** マウスボタンが押されたときに1回だけ {...} の中を実行する

マウスボタンを押すと、円が描かれる。

<a href="http://www.flickr.com/photos/mathatelle/4042811566/" title="1b_4_3 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2488/4042811566_d4db1bb85e_o.png" width="400" height="400" alt="1b_4_3" /></a>

    void setup() {
      size(400, 400);
    }

    void draw() {
    }

    void mousePressed() {
      ellipse(mouseX, mouseY, 60, 60);
    }

## **void mouseReleased() {...}** マウスボタンが離されたときに1回だけ {...} の中を実行する

マウスボタンを押している間、線が描かれる。ボタンが離されると線が消える。

    void setup() {
      size(400, 400);
      strokeWeight(10);
    }

    void draw() {
      if (mousePressed == true){
        line(mouseX, mouseY, pmouseX, pmouseY);
      }
    }

    void mouseReleased() {
      background(204); //マウスボタンが離されると画面がリセットされる
    }

<!--
<a href="http://www.flickr.com/photos/mathatelle/3751895792/" title="1b-04-3 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2667/3751895792_ce7a4d6b77_o.png" width="400" height="400" alt="1b-04-3" /></a>

    int r = 10;
    
    void setup() {
      size(400, 400);
      frameRate(30);
    }

    void draw() {
      ellipse(mouseX, mouseY, r, r);
    }
    
    void mousePressed(){
      if (mouseButton==LEFT){
        r = 60;
      }
    }
    
     void mouseReleased(){
      if (mouseButton==LEFT){
        r = 10;
      }
    }
-->

## 練習：次のような動作をするプログラムを書く

マウスポインタの位置に赤い円が描かれる。マウスボタンを押すと、円の塗り色が変わる。

<a href="http://www.flickr.com/photos/mathatelle/4042847224/" title="ib_4_5 by mathatelle, on Flickr"><img src="http://farm4.static.flickr.com/3511/4042847224_3db1e9d009_o.png" width="400" height="400" alt="ib_4_5" /></a>

    int h=0;
    
    void setup() {
      size(400, 400);
      colorMode(HSB,100);
      background(99);
      noStroke();
    }
    
    void draw() {
      fill(h,99,99);
      ellipse(mouseX, mouseY, 60, 60);
    }
    
    void mousePressed(){
      h+=5;
      h%=100;
    }

マウスボタンを押すと、前回マウスボタンを押した位置からの折れ線が描ける。

<a href="http://www.flickr.com/photos/mathatelle/4042811620/" title="ib_4_4 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2729/4042811620_d4e3f9b399_o.png" width="400" height="400" alt="ib_4_4" /></a>

    float pX, pY;
    
    void setup() {
      size(400, 400);
      strokeWeight(10);
    }
    
    void draw() {
    }
    
    void mousePressed() {  
      line(pX, pY, mouseX, mouseY);
    }
    
    void mouseReleased() {
      pX = mouseX; //マウスボタンが離されたときのx座標を記憶する
      pY = mouseY; //マウスボタンが離されたときのy座標を記憶する
    }]]>
    </content>
</entry>

<entry>
    <title>1b-03 関数を定義し利用する</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/notebook/1b-03.html" />
    <id>tag:www.d-improvement.jp,2009:/learning/processing//1.70</id>

    <published>2009-10-19T05:40:00Z</published>
    <updated>2009-10-25T14:15:30Z</updated>

    <summary>よく利用する処理は「関数」を利用することで、見渡しの良いプログラムにすることがで...</summary>
    <author>
        <name>di</name>
        
    </author>
    
        <category term="1b" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ノート" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="draw" label="draw" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="setup" label="setup" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.d-improvement.jp/learning/processing/">
        よく利用する処理は「関数」を利用することで、見渡しの良いプログラムにすることができる。
        <![CDATA[## 矩形を2つ描く

<a href="http://www.flickr.com/photos/mathatelle/4021824789/" title="1b_03_1 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2501/4021824789_bfe7e512c4_o.png" width="100" height="100" alt="1b_03_1" /></a>

    void setup() {
      size(100, 100);
      colorMode(HSB, 100);
      background(0);
      noLoop(); // draw関数を繰り返さない
    }
    
    void draw() {
      // 左に赤の矩形
      fill(0, 99, 99);
      rect(20, 40, 20, 20);
      // 右にオレンジの矩形
      fill(10, 99, 99);
      rect(60, 40, 20, 20);
    }

## 矩形を2つ描く（関数を使って）

    void setup() {
      size(100, 100);
      colorMode(HSB, 100);
      background(0);
      noLoop();
    }
    
    void draw() {
      drawBox(20, 40, 0); // 左に赤の矩形
      drawBox(60, 40, 10); // 右にオレンジの矩形
    }
    
    void drawBox(float x, float y, int h) {
      fill(h, 99, 99);
      rect(x, y, 20, 20);
    }

## 練習 - 上記（関数を使った方）のプログラムを改変してみる

1. 黄色の矩形を追加し、矩形を3個にする。
2. 矩形のサイズを、一辺15pxの正方形に変更する。
3. 矩形を、直径が20pxの円に変更する。関数名も変更する。
4. 幅400px高さ400pxのウィンドウに、任意のイラストを3つ表示する。
5. 4で描いたイラストを動かしてみる。]]>
    </content>
</entry>

<entry>
    <title>1b-02 動きを制御する - 直線の動き</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/notebook/1b-02.html" />
    <id>tag:www.d-improvement.jp,2009:/learning/processing//1.69</id>

    <published>2009-10-05T05:40:00Z</published>
    <updated>2009-10-25T09:26:23Z</updated>

    <summary>画面を連続して書き替えることで、「動き」を表現してみる。 ...</summary>
    <author>
        <name>di</name>
        
    </author>
    
        <category term="1b" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ノート" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="draw" label="draw" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="setup" label="setup" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.d-improvement.jp/learning/processing/">
        画面を連続して書き替えることで、「動き」を表現してみる。
        <![CDATA[## 直線の動き

<a href="http://www.flickr.com/photos/mathatelle/3751895598/" title="1b-02-1-26 by mathatelle, on Flickr"><img src="http://farm4.static.flickr.com/3456/3751895598_f87be1b1c6_o.png" width="200" height="200" alt="1b-02-1-26" /></a> <a href="http://www.flickr.com/photos/mathatelle/3751105739/" title="1b-02-1-52 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2638/3751105739_52e6f74327_o.png" width="200" height="200" alt="1b-02-1-52" /></a> <a href="http://www.flickr.com/photos/mathatelle/3751895668/" title="1b-02-1-79 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2542/3751895668_b8e7122029_o.png" width="200" height="200" alt="1b-02-1-79" /></a>

    float x; // 物体の位置
    float speed; // 物体のスピード
    
    void setup() {
      size(200, 200);
    
      // 位置とスピードの初期化
      x = 0;
      speed = 1;
    }
    
    void draw() {
      background(255); // 画面をリセット
      x = x + speed; // 位置の計算
    
      // 矩形の描画
      rect(x, height/2, 10, 10);
    }

## 練習 - 上記のプログラムを改変してみる

1. スピードを速くする
2. 右から左に動かす
3. 上から下に動かす
4. 矩形の描画をバスの描画に置き換え、左から右に動かす
5. バスの描画部分を関数にする
6. 自分で考えたものの形を動かす（例：乗り物、動物）
7. 左から右に動かし、右端まで行ったら、左端から出てくるようにする。（ヒント：if文を使う）]]>
    </content>
</entry>

<entry>
    <title>1b-01 プログラムの構造化 - 初期化関数とメインループ関数</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/notebook/1b-01.html" />
    <id>tag:www.d-improvement.jp,2009:/learning/processing//1.68</id>

    <published>2009-09-28T05:40:00Z</published>
    <updated>2009-09-27T15:58:22Z</updated>

    <summary>後期の授業では、これまでのような静止画を生成する表現から、アニメーションやマウス...</summary>
    <author>
        <name>di</name>
        
    </author>
    
        <category term="1b" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ノート" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="draw" label="draw" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="setup" label="setup" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.d-improvement.jp/learning/processing/">
        後期の授業では、これまでのような静止画を生成する表現から、アニメーションやマウスの動きに反応する表現に挑戦する。
        <![CDATA[## おさらい

### バスを描く

<a href="http://www.flickr.com/photos/mathatelle/3950036520/" title="processing 1b-1 by mathatelle, on Flickr"><img src="http://farm4.static.flickr.com/3418/3950036520_670b63e9ff_o.png" width="400" height="400" alt="processing 1b-1" /></a>

    size(400,400);
    
    rectMode(CENTER);
    rect(200,200,120,60); // ボディ
    ellipse(165,230,30,30); // 後輪・外側
    ellipse(235,230,30,30); // 前輪・外側
    ellipse(165,230,20,20); // 後輪・内側
    ellipse(235,230,20,20); // 前輪・内側
    rectMode(CORNER);
    rect(245,180,15,20);// 窓・前
    rect(195,180,30,20); // 窓・中
    rect(150,180,30,20); // 窓・後

### バスを描く（変数を使って）

<a href="http://www.flickr.com/photos/mathatelle/3950036520/" title="processing 1b-1 by mathatelle, on Flickr"><img src="http://farm4.static.flickr.com/3418/3950036520_670b63e9ff_o.png" width="400" height="400" alt="processing 1b-1" /></a>

    size(400,400);
    
    int x=200; // ボディの中心のx座標
    int y=200; // ボディの中心のy座標
    int h=60; // ボディの高さ、幅の基準
    int d=30; // 車輪の直径の基準
    
    rectMode(CENTER);
    rect(x,y,h*2,h); // ボディ
    ellipse(x-35,y+h/2,d,d); // 後輪・外側
    ellipse(x+35,y+h/2,d,d); // 前輪・外側
    ellipse(x-35,y+h/2,d-10,d-10); // 後輪・内側
    ellipse(x+35,y+h/2,d-10,d-10); // 前輪・内側
    rectMode(CORNER);
    rect(x+45,y-20,h/4,h/3); // 窓・前
    rect(x-5,y-20,h/2,h/3); // 窓・中
    rect(x-50,y-20,h/2,h/3); // 窓・後

## 初期化関数とメインループ関数を使う

###関数とは

プログラムを「構造化」する際に用意する「部品」のようなもの。

###初期化関数（setup）

    void setup(){
      ＜初期化の内容＞
    }

###メインループ関数（draw）

    void draw(){
      ＜プログラムの内容＞
    }

###バスを描く（初期化関数とメインループ関数を使って）

<a href="http://www.flickr.com/photos/mathatelle/3950036520/" title="processing 1b-1 by mathatelle, on Flickr"><img src="http://farm4.static.flickr.com/3418/3950036520_670b63e9ff_o.png" width="400" height="400" alt="processing 1b-1" /></a>

    int x=200; // ボディの中心のx座標
    int y=200; // ボディの中心のy座標
    int h=60; // ボディの高さ、幅の基準
    int d=30; // 車輪の直径の基準

    void setup(){
      size(400,400);
      noLoop(); // 繰り返さない
    }

    void draw(){
      rectMode(CENTER);
      rect(x,y,h*2,h); // ボディ
      ellipse(x-35,y+h/2,d,d); // 後輪・外側
      ellipse(x+35,y+h/2,d,d); // 前輪・外側
      ellipse(x-35,y+h/2,d-10,d-10); // 後輪・内側
      ellipse(x+35,y+h/2,d-10,d-10); // 前輪・内側
      rectMode(CORNER);
      rect(x+45,y-20,h/4,h/3); // 窓・前
      rect(x-5,y-20,h/2,h/3); // 窓・中
      rect(x-50,y-20,h/2,h/3); // 窓・後
    }

####グローバル変数
- 関数の外で定義された変数
- どの関数からでもアクセスできる

####noLoop
drawの処理を繰り返さない（1回だけdrawの処理を行う）
 
##自分で定義した関数を使う

###3台のバスを描く（関数を使わずに1つ1つ描く）

<a href="http://www.flickr.com/photos/mathatelle/3949256217/" title="processing 1b-1 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2562/3949256217_e6a87006e7_o.png" width="400" height="400" alt="processing 1b-1" /></a>

    int x=200; // ボディの中心のx座標
    int y=200; // ボディの中心のy座標
    int h=60; // ボディの高さ、幅の基準
    int d=30; // 車輪の直径の基準

    void setup(){
      size(400,400);
      noLoop(); // 繰り返さない
    }

    void draw(){
      // 中央のバス
      rectMode(CENTER);
      rect(x,y,h*2,h); // ボディ
      ellipse(x-35,y+h/2,d,d); // 後輪・外側
      ellipse(x+35,y+h/2,d,d); // 前輪・外側
      ellipse(x-35,y+h/2,d-10,d-10); // 後輪・内側
      ellipse(x+35,y+h/2,d-10,d-10); // 前輪・内側
      rectMode(CORNER);
      rect(x+45,y-20,h/4,h/3); // 窓・前
      rect(x-5,y-20,h/2,h/3); // 窓・中
      rect(x-50,y-20,h/2,h/3); // 窓・後
      
      // 左上のバス
      rectMode(CENTER);
      rect(x-100,y-100,h*2,h); // ボディ
      ellipse(x-35-100,y+h/2-100,d,d); // 後輪・外側
      ellipse(x+35-100,y+h/2-100,d,d); // 前輪・外側
      ellipse(x-35-100,y+h/2-100,d-10,d-10); // 後輪・内側
      ellipse(x+35-100,y+h/2-100,d-10,d-10); // 前輪・内側
      rectMode(CORNER);
      rect(x+45-100,y-20-100,h/4,h/3); // 窓・前
      rect(x-5-100,y-20-100,h/2,h/3); // 窓・中
      rect(x-50-100,y-20-100,h/2,h/3); // 窓・後
      
      // 右下のバス
      rectMode(CENTER);
      rect(x+100,y+100,h*2,h); // ボディ
      ellipse(x-35+100,y+h/2+100,d,d); // 後輪・外側
      ellipse(x+35+100,y+h/2+100,d,d); // 前輪・外側
      ellipse(x-35+100,y+h/2+100,d-10,d-10); // 後輪・内側
      ellipse(x+35+100,y+h/2+100,d-10,d-10); // 前輪・内側
      rectMode(CORNER);
      rect(x+45+100,y-20+100,h/4,h/3); // 窓・前
      rect(x-5+100,y-20+100,h/2,h/3); // 窓・中
      rect(x-50+100,y-20+100,h/2,h/3); // 窓・後
    }

※draw関数の中に、同じようなプログラムが繰り返されている。これを効率よく書き換えることで、プログラムの入力を楽にすることができる。

###3台のバスを描く（自分で定義した関数を使って）

<a href="http://www.flickr.com/photos/mathatelle/3949256217/" title="processing 1b-1 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2562/3949256217_e6a87006e7_o.png" width="400" height="400" alt="processing 1b-1" /></a>

    int h=60; // ボディの高さ、幅の基準
    int d=30; // 車輪の直径の基準

    void setup() {
      size(400, 400);
      noLoop(); // 繰り返さない
    }
    
    void draw() {
      drawBus(200, 200); //中央のバス
      drawBus(100, 100); //左上のバス
      drawBus(300, 300); //右下のバス
    }
    
    void drawBus(int x, int y) {
      rectMode(CENTER);
      rect(x, y, h*2, h); // ボディ
      ellipse(x-35, y+h/2, d, d); // 後輪・外側
      ellipse(x+35, y+h/2, d, d); // 前輪・外側
      ellipse(x-35, y+h/2, d-10, d-10); // 後輪・内側
      ellipse(x+35, y+h/2, d-10, d-10); // 前輪・内側
      rectMode(CORNER);
      rect(x+45, y-20, h/4, h/3); // 窓・前
      rect(x-5, y-20, h/2, h/3); // 窓・中
      rect(x-50, y-20, h/2, h/3); // 窓・後
    }

 - drawBus：バスの描画を定義した関数（わかりやすい任意の名前を付ける）

###バスを走らせる

<a href="http://www.flickr.com/photos/mathatelle/3949256255/" title="processing 1b-1 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2425/3949256255_41f0b14177_o.png" width="400" height="400" alt="processing 1b-1" /></a>

<a href="http://www.flickr.com/photos/mathatelle/3950036612/" title="processing 1b-1 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2467/3950036612_38339de31a_o.png" width="400" height="400" alt="processing 1b-1" /></a>

<a href="http://www.flickr.com/photos/mathatelle/3950036650/" title="processing 1b-1 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2479/3950036650_a1665813b9_o.png" width="400" height="400" alt="processing 1b-1" /></a>

<div style="text-align:center;width:465px;"><iframe title="バスを走らせる - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/821aed50a8cf91603d67e2c88d28fedad3c1b98a" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.net/code/821aed50a8cf91603d67e2c88d28fedad3c1b98a" title="バスを走らせる - wonderfl build flash online">バスを走らせる - wonderfl build flash online</a></div>

    int x; // ボディの中心のx座標
    int y; // ボディの中心のy座標
    int h = 60; // ボディの高さ、幅の基準
    int d = 30; // 車輪の直径の基準
    int speed = 1; // 進む速さ

    void setup() {
      size(400, 400);
      x = -h; // ボディの中心のx座標
      y = height / 2; // ボディの中心のy座標
      //noLoop(); // 繰り返さない
    }
    
    void draw() {
      background(255); // 画面をリセットする
      drawBus(x, y); // バスを描く
      x = x + speed; // 進む
      if(x > width + h){ 
        x = -h; // バスが右端まで行ったら左端に戻る
      }
    }
    
    void drawBus(int x, int y) {
      rectMode(CENTER);
      rect(x, y, h*2, h); // ボディ
      ellipse(x-35, y+h/2, d, d); // 後輪・外側
      ellipse(x+35, y+h/2, d, d); // 前輪・外側
      ellipse(x-35, y+h/2, d-10, d-10); // 後輪・内側
      ellipse(x+35, y+h/2, d-10, d-10); // 前輪・内側
      rectMode(CORNER);
      rect(x+45, y-20, h/4, h/3); // 窓・前
      rect(x-5, y-20, h/2, h/3); // 窓・中
      rect(x-50, y-20, h/2, h/3); // 窓・後
    }

####画面のリセット
draw関数の最初で背景を白で塗る（background(255);）ことで、画面をリセットしている

### バスを走らせる（キーボードを押したときに）

    int x; // ボディの中心のx座標
    int y; // ボディの中心のy座標
    int h = 60; // ボディの高さ、幅の基準
    int d = 30; // 車輪の直径の基準
    int speed = 1; // 進む速さ

    void setup() {
      size(400, 400);
      x = -h; // ボディの中心のx座標
      y = height / 2; // ボディの中心のy座標
      //noLoop(); // 繰り返さない
    }
    
    void draw() {
      background(255); // 画面をリセットする
      drawBus(x, y); // バスを描く
      if (keyPressed == true) {
        x = x + speed; // 進む
      }
      if (x > width + h) { 
        x = -h; // バスが右端まで行ったら左端に戻る
      }
    }
    
    void drawBus(int x, int y) {
      rectMode(CENTER);
      rect(x, y, h*2, h); // ボディ
      ellipse(x-35, y+h/2, d, d); // 後輪・外側
      ellipse(x+35, y+h/2, d, d); // 前輪・外側
      ellipse(x-35, y+h/2, d-10, d-10); // 後輪・内側
      ellipse(x+35, y+h/2, d-10, d-10); // 前輪・内側
      rectMode(CORNER);
      rect(x+45, y-20, h/4, h/3); // 窓・前
      rect(x-5, y-20, h/2, h/3); // 窓・中
      rect(x-50, y-20, h/2, h/3); // 窓・後
    }

## 練習

1. line、ellipse、rectなどを使ってものの形を描く（例：乗り物、動物）
2. 変数や自分で定義した関数を使って、1と同じ形を3つ描く
3. 描いた形を左から右へ動かす
4. 描いた形を上から下へ動かす]]>
    </content>
</entry>

<entry>
    <title>1a-13 Adobe Illustrator で作成した素材を Processing で利用する</title>
    <link rel="alternate" type="text/html" href="http://www.d-improvement.jp/learning/processing/notebook/1a-13.html" />
    <id>tag:www.d-improvement.jp,2009:/learning/processing//1.64</id>

    <published>2009-07-13T05:40:00Z</published>
    <updated>2009-07-24T05:00:58Z</updated>

    <summary>Adobe Illustrator で作成した素材を Processing で利...</summary>
    <author>
        <name>masa</name>
        
    </author>
    
        <category term="1a" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ノート" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="illustrator" label="illustrator" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="photoshop" label="photoshop" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.d-improvement.jp/learning/processing/">
        Adobe Illustrator で作成した素材を Processing で利用したい人のために、手順を解説する。

- Adobe Illustrator で素材を作成
- 書き出し（背景が透過のPNG形式）
- フォトショップでトリミング、保存

解説に利用した Adobe Illustrator のバージョンは「CS3」なので、バージョンの違いにより用語の違いがある場合がある。

Adobe Photoshop で作成した素材を利用したい場合は、メニューの「ファイル ＞ Webおよびデバイス用に保存」でPNG形式を選択し、保存する。
        <![CDATA[## Adobe Illustrator で素材を作成

幅1280px、高さ800pxで新規ドキュメントを作成する。（作品のサイズがこの大きさなので、素材の大きさを確認するために）

カラーモードは「RGB」、単位は「ピクセル」とする。

<a href="http://www.flickr.com/photos/mathatelle/3711704636/" title="0. 新規ドキュメント by mathatelle, on Flickr"><img src="http://farm4.static.flickr.com/3533/3711704636_698b4668e0.jpg" width="500" height="171" alt="0. 新規ドキュメント" /></a>

自由に素材を描き、名前をつけて保存する。保存形式は「ai形式」とする。

<a href="http://www.flickr.com/photos/mathatelle/3710892755/" title="1. イラレで作成 by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2534/3710892755_1c5bcb9e2e.jpg" width="500" height="340" alt="1. イラレで作成" /></a>

## 書き出し（背景が透過のPNG形式）

背景が透過のPNG形式の画像を書き出す。

メニューの「ファイル > 書き出し」を選択する。

<a href="http://www.flickr.com/photos/mathatelle/3710892807/" title="2. ファイル-書き出し by mathatelle, on Flickr"><img src="http://farm4.static.flickr.com/3496/3710892807_789b7ee2ab_o.png" width="309" height="432" alt="2. ファイル-書き出し" /></a>

ファイルに名前をつけ、**フォーマットをPNG**にして、任意の場所（例えばデスクトップ）に書き出しする。

<a href="http://www.flickr.com/photos/mathatelle/3710892847/" title="3. 書き出し by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2592/3710892847_ea170c48a5.jpg" width="488" height="500" alt="3. 書き出し" /></a>

書き出しオプションで、解像度は「**スクリーン**」、背景は「**カラー：透明**」を選択する。OK を押すと、背景の透過処理されたPNGファイルが作成される。

<a href="http://www.flickr.com/photos/mathatelle/3711704410/" title="4. 書き出しオプション by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2428/3711704410_16e24c6364_o.png" width="349" height="405" alt="4. 書き出しオプション" /></a>

## Adobe Photoshop でトリミング、保存

書き出したままの画像では、背景の余計な部分が多いのでトリミングする。

上の手順で作ったPNG ファイルを、Adobe Photoshop で開く。

<a href="http://www.flickr.com/photos/mathatelle/3710892935/" title="5. フォトショで開く by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2658/3710892935_79ac3e6de5.jpg" width="500" height="323" alt="5. フォトショで開く" /></a>

メニューの「イメージ > トリミング」を選択する。

<a href="http://www.flickr.com/photos/mathatelle/3710893011/" title="6. イメージ-トリミング by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2539/3710893011_165cc222bd_o.png" width="206" height="361" alt="6. イメージ-トリミング" /></a>

トリミング対象カラーは「透明ピクセル」を選択、「トリミングする部分」は全部にチェックを入れる。

<a href="http://www.flickr.com/photos/mathatelle/3710893101/" title="7. トリミングオプション by mathatelle, on Flickr"><img src="http://farm3.static.flickr.com/2451/3710893101_d9b9ea8562_o.png" width="282" height="213" alt="7. トリミングオプション" /></a>

トリミングされた画像を確認し、保存する。

i<a href="http://www.flickr.com/photos/mathatelle/3710893149/" title="8. トリミング-完成 by mathatelle, on Flickr"><img src="http://farm4.static.flickr.com/3429/3710893149_0cb6f86efe_o.png" width="511" height="189" alt="8. トリミング-完成" /></a>]]>
    </content>
</entry>

</feed>
