Processingをはじめよう

Similar documents
スライド 1

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

Processingをはじめよう

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

課題


pp2018-pp4base

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

課題

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

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

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

課題

Processing入門マニュアル17


slide

課題

Taro-テキスト.jtd

<4D F736F F D B B83578B6594BB2D834A836F815B82D082C88C60202E646F63>

pp2018-pp9base

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

スライド 1

課題

課題

<4D F736F F D2089A E838D815B838B B838082C582C D834F F08A7782D42E646F6378>

PowerPoint プレゼンテーション

設問 println はそこで指定されている内容を出力して改行するものである. 一方,print は内容を出力して改行しないものである. 下記のプログラムそれぞれについて出力結果がどうなるか回答せよ. 下記のプログラム - を実行すると, fms という文字列が 回表示される. プログラム - vo

PowerPoint Presentation

年組番号名前点数 設問 設問 設問 設問 設問 設問

課題

Microsoft Word - 92.doc

配付資料

CG

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

piyo0702a.rtfd

CG

2 個の円の移動サンプル 9-2 float y0,y1; // 円の中心の Y 座標 float x0,x1; // 円の中心の X 座標 float v0,v1; // 円の縦方向の移動速度 int radius; size(300,400); radius = 10; v0 = random(

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

学習のライフサイクルを支援する史跡学習システムの開発 松江工業高等専門学校 藤井諭後田真希南葉恵美子

レコード class Point attr_accessor("x", "y") インスタンス変数の宣言 point.rb

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

1222-A Transform Function Order (trsn

Computer Graphics

レコード class Point attr_accessor("x", "y") インスタンス変数の宣言 point.rb

講習会 Arduino

Microsoft PowerPoint - diip ppt

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

Graphics with Processing モデリング 塩澤秀和 1

教材ドットコムオリジナル教材 0から始めるiアフ リ リファレンス i アプリ簡易リファレンス ver i アプリ Java 独自のメソッド (1)iアプリの命令を使えるようにする import com.nttdocomo.ui.*; (2) 乱数を使う import java.u

基本作図・編集

もう少し数学っぽい関数もあります 関数名 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

8 / 0 1 i++ i 1 i-- i C !!! C 2

課題

謗域・ュ逕ィppt

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

謗域・ュ逕ィppt

プログラミング入門1

Microsoft PowerPoint - 講義資料-mlib


大容量情報検索論

基本作図・編集

基本作図・編集


スライド 1

PowerPoint プレゼンテーション

tn_soturon_sjis.dvi

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

前回のあらすじ 物理演算ライブラリ chipmunk を使って チキンが地面に落ちるところまで


Microsoft Word - BouncingBall.doc

Microsoft PowerPoint - 4.pptx

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

Graphical User Interface 描画する

断面の諸量

スライド 1

1222-A Transform Function Order (trsn

スライド 1

Javaプログラムの実行手順

Microsoft Word - SU1204教本(Driver)原稿.docx

transform: skewx(x 軸の傾斜角度 ) transform: skewy(y 軸の傾斜角度 ) transform: skew(x 軸の傾斜角度, Y 軸の傾斜角度 ) skewx( ) は X 軸に沿って傾斜します skewy( ) は Y 軸に沿って傾斜します skew( ) は

まず,13 行目の HardwareTimer Timer(1); は,HardwareTimer というクラスを利用するという宣言である. この宣言によって Timer というインスタンスが生成される.Timer(1) の 1 は,OpenCM に 4 個用意されているタイマのうち,1 番のタイマ

sinfI2005_VBA.doc

ルーレットプログラム

次に プログラム中の定数について解説する PINNO は圧電スピーカーと接続されたピンの番号に対応している FL,FR,BL,BR はそれぞれ 前面左, 前面右, 背面左, 背面右に設置されたスイッチに接続されているピンの番号に対応している スイッチ回路のプルアップ抵抗は Arduino 内部のもの

Microsoft Word - VBA基礎(3).docx

演算増幅器

ネコでもわかるインタラクティブサウンド by ちゃーりー

Javaによるアルゴリズムとデータ構造

untitled

untitled


Microsoft PowerPoint 電子情報理工学特論.pptx

ToDo: 今回のタイトル

(C) 2011 amenbo the 3rd New MQL4(Build 600 以降 ); 基礎 ( その 2)OnTimer() を使う アメンボです New_MQL4 の特徴とはなんでしょう? 極論を言うと MQL5 から受け継いだ OOP つまり On***() 関

PowerPoint プレゼンテーション

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

_福島GamejamCRI・ミドルウェア事前セミナー資料

Java KK-MAS チュートリアル

Taro-Basicの基礎・条件分岐(公

高等学校学習指導要領

Transcription:

Processing をはじめよう 第 7 章 動きその 2

目次 フレームレート スピードと方向 移動 回転 拡大 縮小 2 点間の移動 乱数 タイマー 円運動 今回はここまで 2

2 点間の移動 Example 7-6 (EX_08_06) 始点 (startx, starty) から終点 (stopx, stopy) まで移動する 座標更新の計算方法は後述 始点と終点を変更しても動作する 変更して確認 始点 (0,0), 終点 (width, height) 始点 (0, height) 終点 (0, width) 3

2 点間の移動 (0,0) (startx, starty) 始点と終点を変更して 移動する距離が変わっても 0~100% の間をフレーム移動量だけ移動することに変わりない 始点から終点まで移動する移動量を始点 0%, 終点 100% として始点 ~ 終点間をステップ移動量の間隔で分けて 1 ステップずつ移動する (stopx, stopy) 4

Example 7-6 int startx = 20; // 始点のx 座標 int stopx = 160; // 終点のx 座標 int starty = 30; // 始点のy 座標 int stopy = 80; // 終点のy 座標 float x = startx; // 現在のx 座標 float y = starty; // 現在のy 座標 float step = 0.005; // 1フレームの移動量 (0.0 ~ 1.0で設定する ) float pct = 0.0; // 移動量 (0.0 ~ 1.0の範囲の値をとる ) void setup() { size(240, 120); void draw() { background(0); if (pct < 1.0) { // 移動量が100% より小さい場合 ( 終点まで移動していない ) x = startx + ((stopx-startx) * pct); // 現在のx 座標を更新 y = starty + ((stopy-starty) * pct); // 現在のy 座標を更新 pct += step; // 移動量を更新 ellipse(x, y, 20, 20); 5

2 点間の移動距離を計算 (0,0) 始点 (startx,starty) (stopy-starty)*pct stopy-starty 今のいる座標 (x, y) (stopx-startx)*pct 始点から移動量 pct (%) だけ移動した stopx-startx 今いる座標 (x, y) x = startx + (stopx - startx) * pct; y = starty + (stopy - starty) * pct; 始点 (stopx,stopy) 終点 始点から移動した距離 6

乱数 Example 7-7 Example 7-7 (EX_08_07) 乱数の生成 random() 命令 P205 random(low, high) low 以上 high 未満の乱数を生成する void draw() { float r = random(0, mousex); println(r); // 0 以上 mousex 未満の乱数生成 // 乱数を表示 7

乱数 Example 7-8 (EX_08_08) ランダムに描く 線の位置を乱数を使って少しずらす ずらす量は mousex を使って計算 float mx = mousex / 10; float offseta = random(-mx, mx); float offsetb = random(-mx, mx); line(x + offseta, 20, x - offsetb, 100); 8

Example 7-8 void setup() { size(240, 120); void draw() { background(204); for (int x = 20; x < width; x += 20) { float mx = mousex / 10; float offseta = random(-mx, mx); float offsetb = random(-mx, mx); line(x + offseta, 20, x - offsetb, 100); 9

線 (0,0) (x + offseta, 20) 直線を描く line() (x1, y1) から (x2, y2) に直線を引く 乱数によって位置が (-mx, mx) の範囲で変化 (x - offsetb, 100) 10

乱数 Example 7-9 (EX_08_09) x 方向 y 方向にランダムで移動する P102 NOTE 同じシーケンスを生成するように強制したい場合は randomseed() を使う 値を制限する constrain() P203 constrain(a, min, max) aの値をminとmaxの間に制限する 11

Example 7-9 float speed = 2.5; int diameter = 20; float x; float y; void setup() { size(240, 120); x = width/2; y = height/2; void draw() { x += random(-speed, speed); y += random(-speed, speed); ellipse(x, y, diameter, diameter); 円が画面外に出ないように constrain() で x と y を制限する 12

タイマー Example 7-10 Example 7-10 (EX_08_10) 時間の経過 経過時間 millis() 実行開始から経過した時間をミリ秒単位で取得する void draw() { int timer = millis(); println(timer); // 経過時間を取得し, 変数 timer に代入 // 経過時間を表示 13

タイマー Example 7-11 (EX_08_11) 時限式イベント millis() とif 文を使って時限式イベント 現在の経過時間を保存 int currenttime = millis(); イベントの設定時間と現在の経過時間を比較 if(currenttime > time2){ ~ 省略 ~ else if(currenttime > time1){ ~ 省略 ~ 14

Example 7-11 int time1 = 2000; // イベント1の設定時間 ( ミリ秒 ) int time2 = 4000; // イベント2の設定時間 ( ミリ秒 ) float x = 0; // 図形のx 座標 void setup() { size(480, 120); void draw() { int currenttime = millis(); // 現在の経過時間を保存する background(204); if (currenttime > time2) { // 現在の経過時間がイベント2の時間より大きい場合 x -= 0.5; // xを0.5 減らす ( 左に0.5 移動 ) else if (currenttime > time1) { // 条件 1が偽で イベント1の時間より大きい場合 x += 2; // xを2 増やす ( 右に2 移動 ) ellipse(x, 60, 90, 90); 15

フローチャート 条件の順序 条件 1 経過時間が4000ミリ秒より大きい (4 秒経過 ) 条件 2 条件 1が偽で 経過時間が2000ミリ秒より大きい (2 秒経過 ) 条件 1 4 秒経過? true 左へ 0.5 移動 (x -= 0.5;) false 条件 2 2 秒経過? true 右へ2 移動 (x += 2;) false

実行結果 currenttime が 0 ~ 1999 の場合画面左端で停止 x+=2; currenttime が 2000 ~ 3999 の場合右方向へ移動 x-=0.5; currenttime が 4000 以上左方向に移動

円運動 Example 7-12 (EX_08_12) 三角関数 sin() P204 sin() の値は-1から +1の範囲 map() を使って (-1,1) を (0,255) の範囲に変換 変換後の (0,255) の値で背景色を設定黒 ~ 灰 ~ 白の間を変化する 18

Example 7-12 float angle = 0.0; void draw() { float sinval = sin(angle); println(sinval); float gray = map(sinval, -1, 1, 0, 255); background(gray); angle += 0.1; 19

円運動 Example 7-13 (EX_08_13) sin() の値を動きに変換 角度 angle, sin() の値と円運動の関係は教科書 P104 図 7-2を参照 20

Example 7-13 float angle = 0.0; float offset = 60; float scalar = 40; float speed = 0.05; void setup() { size(240, 120); void draw() { background(0); float y1 = offset + sin(angle) * scalar; float y2 = offset + sin(angle + 0.4) * scalar; float y3 = offset + sin(angle + 0.8) * scalar; ellipse( 80, y1, 40, 40); ellipse(120, y2, 40, 40); ellipse(160, y3, 40, 40); angle += speed; 21

実行結果 (0,0) offset = width/2; offset scalar y1 y2 y3 scalar この高さは円の半径分 y1 = offset + sin(angle) * scalar; y2 = offset + sin(angle + 0.4) * scalar; y3 = offset + sin(angle + 0.8) * scalar; y1,y2,y3 はこの範囲を移動 22

円運動 Example 7-14 (EX_08_14) 円運動 sin() とcos() を使って円運動させる 変数 offsetで回転の中心を (0,0) から (offset, offset) に移す 変数 scalarは回転中心から円の中心までの距離 変数 angleは回転の角度 (x,y) を cos() と sin() で計算 float x = offset + cos(angle) * scalar; float y = offset + sin(angle) * scalar; 23

Example 7-14 float angle = 0.0; float offset = 60; float scalar = 30; float speed = 0.05; void setup() { size(120, 120); void draw() { float x = offset + cos(angle) * scalar; float y = offset + sin(angle) * scalar; ellipse( x, y, 40, 40); angle += speed; 24

実行結果 (0,0) offset 回転中心の移動量 offset cos(angle) * scalar 回転中心の移動量 offset offset 角度 angle (x,y) sin (angle) * scalar (x,y) 回転中心から円の中心までの距離 scalar x = offset + cos(angle) * scalar; y = offset + sin(angle) * scalar; 25

円運動 Example 7-15 (EX_08_15) らせん Example 7-14 とほぼ同じ scalarを増やす 回転中心から円の中心までの距離が延びる らせんを描く 26

Example 7-15 float angle = 0.0; float offset = 60; float scalar = 2; float speed = 0.05; void setup() { size(120, 120); fill(0); void draw() { float x = offset + cos(angle) * scalar; float y = offset + sin(angle) * scalar; ellipse( x, y, 2, 2); angle += speed; scalar += speed; // 回転中心から円の中心までの距離を増やす 27

実行結果 (0,0) offset 回転中心の移動量 offset cos(angle) * scalar 回転中心の移動量 offset offset (x,y) sin (angle) * scalar (x,y) 角度 angle 時計回りが正の方向 回転中心から円の中心までの距離 scalar 今回は値を増やしていく x = offset + cos(angle) * scalar; y = offset + sin(angle) * scalar; 28