Processingをはじめよう

Similar documents
スライド 1

Processingをはじめよう


情報システム設計論II ユーザインタフェース(1)

<4D F736F F D B B83578B6594BB2D834A836F815B82D082C88C60202E646F63>

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2

課題

プログラミング演習 Ⅰ 第 14 回 2017/6/5( 月 ) ゲームを作る クイズ 担当 : 紅林林

Microsoft PowerPoint P演習 第10回 関数.ppt [互換モード]

情報システム設計論II ユーザインタフェース(1)

Microsoft PowerPoint P演習 第5回 当たり判定(2)【課題】.pptx

Processing入門マニュアル17

CG

課題

もう少し数学っぽい関数もあります 関数名 abs(x) sqrt(x) sq(x) pow(x,n) exp(x) log(x) dist(x1, y1, x2, y2) constrain(v, m0, m1) lerp(v0,v1,t) map(v, low1, high1, low2, hig

課題

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

情報システム設計論II ユーザインタフェース(1)

PsychoPy Builderにおける 実験の動的な制御の方法

課題

画像参照画像送り 5 画像下部に再生ボタンが表示されます 再生ボタンをクリックすると 自動コマ送りされます 1

slide

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

情報システム設計論II ユーザインタフェース(1)

Microsoft Word - Grspes…~…j…}…j…–…A…‰6.0.doc

関数の定義域を制限する 関数のコマンドを入力バーに打つことにより 関数の定義域を制限することが出来ます Function[ < 関数 >, <x の開始値 >, <x の終了値 > ] 例えば f(x) = x 2 2x + 1 ( 1 < x < 4) のグラフを描くには Function[ x^

Microsoft PowerPoint - 【HB-1000】キーボードマウス操作マニュアル.ppt [互換モード]

スライド 1

プログラミング実習I

( 注 )Safari (webkit 系ブラウザ ) と Chrome(webkit にも対応 ) は テキストの輪郭や色を -webkit-text-stroke-width -webkit-text-stroke-color -webkit-text-fill-color のプロパティで描くこ

< 目次 > 1. 練習ファイルのダウンロード 表計算ソフト Excel の基本 Excel でできること Excel の画面 セル 行 列の選択 セルにデータを入力する ( 半角英数字の場合 )

スライド 1

PowerPoint プレゼンテーション

中綴じ3・4級.ren

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

課題

フローチャートの書き方

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

画像 images/ SpaceShuttle.png を指定します <!DOCTYPE html> <html> <head> <title>circleanime1</title> <meta charset="utf-8"> <link rel="stylesheet" type="text/

医用工学概論  Medical Engineering (ME)   3年前期の医用工学概論実習と 合わせ、 医療の現場で使用されている 医用機器を正しく安全に使用するために必要な医用工学(ME)の 基礎知識を習得する。

Microsoft Word - zoom-it-man.doc

Microsoft PowerPoint - [150421] CMP実習Ⅰ(2015) 橋本 CG編 第1回 幾何変換.pptx

基本作図・編集

挙動チェックポイントなどセミコロン ; を忘れていませんか? 黄色なんだか動かないで表示されている部分またはその少し前 Syntax error, maybe a missing にセミコロンを忘れている場所はありま semicolon? などと表示されます せんか? なんだか動作がおかしい の部分

背景の線形グラデーションをアニメーションのように見せる方法は 前章の #div4 ボックスと同じ方法です ( 注 )Safari (webkit 系ブラウザ ) と Chrome(Webkit にも対応 ) は テキストの輪郭や色を -webkit-text-stroke-width -webkit

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

サンプル CSS OutlineAnimation.html の説明 HTML の記述 (OutlineAnimation.html) id 属性 stage の div 要素を作り その中に div 要素でボックスを記述します id 属性 div1 の div 要素を記述し 中にテキストで Out

第2章 Macintoshの基本操作

JavaプログラミングⅠ

目次 1. ログイン ログアウト デスクトップ ( 例 :Word Excel 起動中 ) Dock( 例 :Word Excel 起動中 ) Finder ウィンドウ メニューバー ( 例 :Word 起動中 )...

Taro-ポインタ変数Ⅰ(公開版).j

Raster Link Pro

4 横髪と模様を描きます (1) 基本図形 月 を選び 図形を描きます 調整ハンドルを横方向いっぱいまでドラッグします 図形を細長く変形します 塗りつぶしの色 黒 (2) 線 曲線 を選び 下図の図形を描きます 黒い頂点の位置を確認しましょう 図形の塗りつぶし 標準の色 赤 コピー 変形 縮小 を繰

Microsoft Word - macマニュアル【 】.doc

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

Taro-テキスト.jtd

Javaプログラムの実行手順

サンプル CSS web ページを開くと同時にピエロの玉乗りが動き出すアニメーションを作ってみましょう AnimeAuto の説明 HTML の記述 (AnimeAuto.html) ピエロの画像に pierrot という id を 玉の画像に ball という id を付けておきます <!DOCT

Transcription:

Processing をはじめよう 第 5 章 反応

目次 繰り返されるdrawと一度だけのsetup 追いかける クリック カーソルの位置 キーボードからの入力 マッピング Robot 3: Response

繰り返される draw と一度だけの setup Example 5-1 draw() 関数 println("i'm drawing"); println(framecount); draw() 関数 ブロック内のコードを繰り返し実行 変数 framecount 以下繰り返し 教科書 P225 プログラムから何フレーム表示したかを保持する変数 ( 何回繰り返したか )

繰り返される draw と一度だけの setup Example 5-2 setup() 関数 println("i'm starting"); println("i'm running"); 以下繰り返し setup() 関数 ブロック内のコードを時 1 回だけ実行

setup() と draw() の使い方 Processing がコードを実行する順番 1. setup() とdraw() の外側で宣言された変数 ( グローバル変数 ) を作成 2. setup() 内のコードを一度だけ実行 3. draw() 内のコードを繰り返し実行 グローバル変数の宣言 setup() draw()

繰り返される draw と一度だけの setup Example 5-3 setup() と draw() int x = 280; int y = -100; int diameter = 380; グローバル変数の宣言 int x = 280; int y = -100; int diameter = 380; size(480, 120); fill(102); setup() draw() size(480, 120); fill(102); ellipse(x, y, diameter, diameter); ellipse(x, y, diameter, diameter);

追いかける Example 5-4 マウスを追跡 size(480, 120); fill(0, 102); nostroke(); mousex, mousey 教科書 P256 // 塗り色 透明度指定 // 輪郭線を消す ellipse(mousex, mousey, 9, 9); マウスのカーソル位置を表す変数 Example 5-5 背景を塗ると size(480, 120); fill(0, 102); nostroke(); ellipse(mousex, mousey, 9, 9); 実行ウィンドウでマウスを動かすと円の軌跡が表示

追いかける Example 5-6 連続的に描く size(480, 120); strokeweight(4); // 輪郭線の太さ 4 stroke(0, 102); // 輪郭線の色 透明度設定 line(mousex, mousey, pmousex, pmousey); pmousex, pmousey 教科書 P256 前フレームのマウスのカーソル位置を表す変数 size(480, 120); strokeweight(4); stroke(0, 102); line(mousex, mousey, pmousex, pmousey); マウスを動かすと前フレームと現在のカーソル位置の間に線を引く

追いかける Example 5-7 太さを変えながら描く size(480, 120); stroke(0, 102); size(480, 120); stroke(0, 102); float weight = dist(mousex, mousey, pmousex, pmousey); strokeweight(weight); line(mousex, mousey, pmousex, pmousey); dist(x1, y1, x2, y2) 教科書 P230 (x1, y1) と (x2, y2) の間の距離を求める float weight = dist(mousex, mousey, pmousex, pmousey); strokeweight(weight); line(mousex, mousey, pmousex, pmousey); 2 点が遠い ( マウスを早く移動する ) と太い線

追いかける Example 5-8 ゆっくり行こう float x; float easing = 0.01; size(220, 120); float x; float easing = 0.01; size(220, 120); float targetx = mousex; x += (targetx - x) * easing; ellipse(x, 40, 12, 12); println(targetx + " : " + x); // イージング float targetx = mousex; x += (targetx - x) * easing; ellipse(x, 40, 12, 12); println(targetx + " : " + x); easing = 0.01 マウスにゆっくり追いつく easing = 0.1 マウスにすぐ追いつく

イージング イージング (Easing) マウスの急激な動きを緩和する 変数 float easing = 0.01; 計算部分 x += (targetx - x) * easing; x 現在値 ( 円を表示する位置 ) targetx 目標値 ( マウスの位置 ) easing 緩和するための係数 0~1の間 係数を変えて 動きがどう変化するか確認

追いかける Example 5-9 イージングで線を滑らかに float x; //x 座標 float y; //y 座標 float px; // 前フレームのx 座標 float py; // 前フレームのy 座標 float easing = 0.05; size(480, 120); stroke(0, 102); float targetx = mousex; x += (targetx - x) * easing; float targety = mousey; y += (targety - y) * easing; float weight = dist(x, y, px, py); strokeweight(weight); line(x, y, px, py); py = y; //y 座標を前フレームの y 座標に代入 px = x; //x 座標を前フレームの x 座標に代入 float x; float y; float px; float py; float easing = 0.05; size(480, 120); stroke(0, 102); float targetx = mousex; x += (targetx - x) * easing; float targety = mousey; y += (targety - y) * easing; float weight = dist(x, y, px, py); strokeweight(weight); line(x, y, px, py); py = y; px = x;

追いかける Example 5-7 と 5-8 を合わせた処理 x 座標のイージング y 座標のイージング (x, y) と (px, py) の距離計算 線の太さ設定 (x, y) と (px, py) の 2 点に線を引く (px, py) に (x, y) を代入 次回に 1 フレーム前の x,y 座標として使うため easing = 0.05 easing = 0.5

クリック Example 5-10 マウスをクリック size(240, 120); strokeweight(30); stroke(102); line(40, 0, 70, height); if (mousepressed == ) { stroke(0); line(0, 70, width, 50); mousepressed 変数 教科書 P256 クリックすると しないと クリックした場合黒い線 size(240, 120); strokeweight(30); stroke(102); line(40, 0, 70, height); P64 確認 mousepressed == stroke(0); line(0, 70, width, 50);

クリック Example 5-11 クリックされていないことを検出する size(240, 120); strokeweight(30); stroke(102); line(40, 0, 70, height); if (mousepressed) { stroke(0); else { stroke(255); line(0, 70, width, 50); クリックしない場合白い線 クリックした場合黒い線 size(240, 120); strokeweight(30); stroke(102); line(40, 0, 70, height); mousepressed stroke(0); stroke(255); line(0, 70, width, 50);

クリック Example 5-12 複数のマウスボタン size(120, 120); strokeweight(30); クリックなし size(240, 120); strokeweight(30); stroke(102); line(40, 0, 70, height); if (mousepressed) { if (mousebutton == LEFT) { stroke(255); else { stroke(0); line(0, 70, width, 50); mousebutton 変数 P256 値 : LEFT, RIGHT, CENTER 左クリック 左以外をクリック stroke(102); line(40, 0, 70, height); P256 確認 mousepressed mousebutton == LEFT stroke(255); line(0, 70, width, 50); stroke(0);

条件とフローチャート 1 if 文 if ( 条件 ) { 処理 条件 条件 P46~47 参照 2 つの値を比べる式 処理実行する命令 逐次 条件が真 () の場合 処理を実行して次へ進む 処理 条件が偽 () の場合 処理を実行せず次に進む 条件分岐 繰り返し 関数の呼び出し 複数行でも可

条件とフローチャート 2 if ~ else 文 if ( 条件 ) { 処理 1 else { 処理 2 条件が真 () の場合 条件 条件が偽 () の場合 処理 1 を実行して次へ進む 処理 1 処理 2 処理 2 を実行して次に進む 条件が真と偽の場合で異なるの処理を実行

条件とフローチャート 3 if ~ else if ~ 文 if ( 条件 1) { 処理 1 else if ( 条件 2) { 処理 2 条件 1 が真 () の場合 条件 1 条件 2 条件 1 が偽 () で条件 2 が真 () の場合 処理 2 を実行して次に進む 処理 1 を実行して次へ進む 処理 1 処理 2 条件 1 が偽 () で条件 2 が偽 () の場合次に進む 2 の処理 2 に 1 のフローチャートが入った形

カーソル Example 5-13 カーソルを探せ float x; // 縦線のx 座標 int offset = 10; // 矢印の向き 大きさを表す変数 size(240, 120); x = width/2; // 縦線の初期位置は中央 矢印 1 if (mousex > x) { // マウスが縦線より右にある場合 x += 0.5; // 縦線を右に0.5 移動矢印 2 offset = -10; // 矢印を右向き if (mousex < x) { // マウスが縦線より左にある場合 x -= 0.5; // 縦線を左に0.5 移動 offset = 10; // 矢印を左向き line(x, 0, x, height); // 縦線 line(mousex, mousey, mousex + offset, mousey - 10); // 矢印 1 line(mousex, mousey, mousex + offset, mousey + 10); // 矢印 2 line(mousex, mousey, mousex + offset*3, mousey); // 矢印 3 縦線 矢印 3

カーソル Example 5-13 カーソルを探せ float x; int offset = 10; size(240, 120); x = width/2; mousex > x x += 0.5; offset = -10; mousex < x x -= 0.5; offset = 10; line(x, 0, x, height); line(mousex, mousey, mousex + offset, mousey - 10); line(mousex, mousey, mousex + offset, mousey + 10); line(mousex, mousey, mousex + offset*3, mousey);

カーソル Example 5-14 円の境界 int x = 120; int y = 60; int radius = 12; size(240, 120); ellipsemode(radius); float d = dist(mousex, mousey, x, y); if (d < radius) { radius++; fill(0); else { fill(255); ellipse(x, y, radius, radius); カーソルが円の内部にある場合黒い円が拡大

カーソル Example 5-14 円の境界 int x = 120; int y = 60; int radius = 12; float d = dist(mousex, mousey, x, y); size(240, 120); ellipsemode(radius); P230 確認 d < radius P245 確認 radius++; fill(0); fill(255); ellipse(x, y, radius, radius);

カーソルが円の内側にあるかどうか カーソルが円の内側 カーソルが円の外側 (x, y) (x, y) (mousex, mousey) (mousex, mousey) 距離 d が半径 radius より小さい条件 d < radius が真 距離 d が半径 radius より大きい条件 d < radius が偽

カーソル Example 5-15 長方形の境界 int x = 80; int y = 30; int w = 80; int h = 60; size(240, 120); カーソルが長方形の内部にある場合黒く塗る if ((mousex > x) && (mousex < x+w) && (mousey > y) && (mousey < y+h)) { fill(0); else { fill(255); rect(x, y, w, h);

カーソル Example 5-14 円の境界 int x = 80; int y = 30; int w = 80; int h = 60; size(240, 120); (mousex > x) && (mousex < x+w) && (mousey > y) && (mousey < y+h) fill(0); 4 つの式をすべて満たす fill(255); rect(x, y, w, h);

カーソルが長方形内部にあるかどうか カーソル (mousex, mousey) が長方形内部にあるための条件 mousex が x より大きく x + w より小さい mousey が y より大きく y + h より小さい (mousex > x) && (mousex < x+w) && (mousey > y) && (mousey < y+h) (x,y) (x+w,y) (mousex,mousey) 複数の式で条件をつなぐ場合 論理演算子を使う P229 参照 h 論理和 または論理積 && かつ w (x,y+h) (x+w,y+h)

キーボードからの入力 Example 5-16 キーを叩く size(240, 120); line(20, 20, 220, 100); if (keypressed) { line(220, 20, 20, 100); keypressed 変数 P257 キーを押した場合 押していない場合 size(240, 120); line(20, 20, 220, 100); P257 確認 keypressed line(220, 20, 20, 100); キーを押すともう 1 本線を描く

キーボードからの入力 Example 5-17 文字を描く size(120, 120); textsize(64); textalign(center); background(0); text(key, 60, 80); 半角英数一部の記号を表示 key 変数 P257 最後に押したキーを保存値は文字型 char P251~254 textsize() 文字の大きさを設定 textalign() 文字の揃え方を設定 text() 文字を表示する size(120, 120); textsize(64); textalign(center); P254 確認 background(0); text(key, 60, 80); P252 確認 表示できない文字は白い四角が表示

キーボードからの入力 Example 5-18 特定のキーに反応する size(120, 120); if (keypressed) { if ((key == 'h') (key == 'H')) { line(30, 60, 90, 60); if ((key == 'n') (key == 'N')) { line(30, 20, 90, 100); line(30, 20, 30, 100); line(90, 20, 90, 100); H または h を押すと表示 N または n を押すと表示 大文字 / 小文字どちらも対応できる size(240, 120); keypressed (key=='h') (key=='h') line(30, 60, 90, 60); (key=='n') (key=='n') line(30, 60, 90, 60); line(30, 20, 30, 100); line(90, 20, 90, 100);

キーボードからの入力 keycode P257 Example 5-19 カーソルキーで動かす int x = 215; size(480, 120); if (keypressed && (key == CODED)) { if (keycode == LEFT) { // 左矢印を押したら x--; else if (keycode == RIGHT) { // 右矢印 x++; rect(x, 45, 50, 50); 特別なキーが押された場合 int x = 215; size(480, 120); keypressed && (key == CODED) keycode == LEFT x--; keycode == LEFT X++; を押すと左に移動 を押すと右に移動 rect(x, 45, 50, 50);

CODED, keycode 変数 P257 最後に押したキーが特別なキーの場合 if (key == CODED) で確認 keycode 変数に保存 keycode 変数最後に押された特別なキーを保存 UP ( 上矢印 ) キー DOWN ( 下矢印 ) キー LEFT ( 左矢印 ) キー RIGHT ( 右矢印 ) キー ALT Altキー CONTROL Ctrlキー SHIFT Shiftキー

マッピング Example 5-20 値の範囲を変更 size(240, 120); strokeweight(12); size(240, 120); strokeweight(12); stroke(102); line(mousex, 0, mousex, height); stroke(0); float mx = mousex/2 + 60; line(mx, 0, mx, height); 計算して変換 stroke(102); line(mousex, 0, mousex, height); stroke(0); float mx = mousex/2 + 60; line(mx, 0, mx, height); 灰色の線 : 変換なし黒い線 : 値を変換

マッピング Example 5-21 map() 関数でマッピング size(240, 120); strokeweight(12); stroke(102); line(mousex, 0, mousex, height); stroke(0); float mx = map(mousex, 0, width, 60, 180); line(mx, 0, mx, height); map() 関数 P230 実行結果 Example 5-20 と同じ size(240, 120); strokeweight(12); stroke(102); line(mousex, 0, mousex, height); stroke(0); float mx = map(mousex, 0, width, 60, 180); line(mx, 0, mx, height);

Robot 3: Response float x = 60; float y = 440; int radius = 45; int bodyheight = 160; int neckheight = 70; float easing = 0.04; size(360, 480); ellipsemode(radius); strokeweight(2); int targetx = mousex; x += (targetx - x) * easing; if (mousepressed) { neckheight = 16; bodyheight = 90; else { neckheight = 70; bodyheight = 160; float necky = y - bodyheight - neckheight - radius; background(0, 153, 204); stroke(255); line(x+12, y-bodyheight, x+12, necky); line(x+12, necky, x-18, necky-43); line(x+12, necky, x+42, necky-99); line(x+12, necky, x+78, necky+15); nostroke(); fill(255, 204, 0); ellipse(x, y-33, 33, 33); fill(0); rect(x-45, y-bodyheight, 90, bodyheight-33); fill(0); ellipse(x+12, necky, radius, radius); fill(255); ellipse(x+24, necky-6, 14, 14); fill(0); ellipse(x+24, necky-6, 3, 3);

Robot 3: Response マウスで左右に移動イージング使用 クリックで首が縮む