SlideShare a Scribd company logo
1 of 19
プログラミング技法特論#09 N. Shimizu chikoski at kaetsu.ac.jp
前回まで float x, y, r, dx, dy; void setup(){    size(400, 400); noStroke();    fill(255, 0, 0, 255); x = width / 2; y = height / 2; r = 20; dx = 0.5; dy = 0.5; } void draw(){    background(0, 0, 0);  ellipse(x, y, r, r); x = constrain(x + dx, r / 2, width – r / 2); y = constrain(y + dy, r / 2, height – r /2); reflectByWall(); } void reflectByWall(){ if(x <= r / 2 || width – r / 2 <= x){ dx = dx * -1;    } if(y <= r / 2 || height– r / 2 <= y){ dy = dy * -1;    } } float dx(){    float ret = (mouseX – x) * 0.01;    return ret; } float dy(){ 	float ret = (mouseY – y) * 0.01;    return ret; } void mousePressed(){ dx = dx(); dy = dy(); }
円の動きに関する部分 float x, y, r, dx, dy; void setup(){    size(400, 400); noStroke();    fill(255, 0, 0, 255); x = width / 2; y = height / 2; r = 20; dx = 0.5; dy = 0.5; } void draw(){    background(0, 0, 0);  ellipse(x, y, r, r); x = constrain(x + dx, r / 2, width – r / 2); y = constrain(y + dy, r / 2, height – r /2); reflectByWall(); } void reflectByWall(){ if(x <= r / 2 || width – r / 2 <= x){ dx = dx * -1;    } if(y <= r / 2 || height– r / 2 <= y){ dy = dy * -1;    } } float dx(){    float ret = (mouseX – x) * 0.01;    return ret; } float dy(){ 	float ret = (mouseY – y) * 0.01;    return ret; } void mousePressed(){ dx = dx(); dy = dy(); }
クラスにまとめよう
クラス 変数とメソッドをまとめたもの なぜまとめるのか? プログラムが構造化される 抽象化できる->クラスの中身をしらなくても 他のプログラムが書ける->独立して開発ができる
クラスの定義方法 class クラス名{ 変数の宣言 メソッドの定義 }
ステップ1:まとめる部分を決める float x, y, r, dx, dy; void setup(){    size(400, 400); noStroke();    fill(255, 0, 0, 255); x = width / 2; y = height / 2; r = 20; dx = 0.5; dy = 0.5; } void draw(){    background(0, 0, 0);  ellipse(x, y, r, r); x = constrain(x + dx, r / 2, width – r / 2); y = constrain(y + dy, r / 2, height – r /2); reflectByWall(); } void reflectByWall(){ if(x <= r / 2 || width – r / 2 <= x){ dx = dx * -1;    } if(y <= r / 2 || height– r / 2 <= y){ dy = dy * -1;    } } float dx(){    float ret = (mouseX – x) * 0.01;    return ret; } float dy(){ 	float ret = (mouseY – y) * 0.01;    return ret; } void mousePressed(){ dx = dx(); dy = dy(); }
ステップ2:クラス名を決める 何を表しているものなのかを考えよう 今回の場合 まとめる部分では「円」を動かしたり、描いたりしている クラスは「円」を表す名前が良さそう Disk, Circle, BallいろいろあるがDiskにする
ステップ3:定義する class Disk{ }
ステップ4:クラス定義にまとめる class Disk{   float x, y, r, dx, dy;   void reflectByWall(){ if(x <= r / 2 || width – r / 2 <= x){ dx = dx * -1;    } if(y <= r / 2 || height– r / 2 <= y){ dy = dy * -1;    }   }   float dx(){    float ret = (mouseX – x) * 0.01;    return ret;   }   float dy(){ 	  float ret = (mouseY – y) * 0.01;     return ret;   } 	}
ステップ5:必要なメソッドを足す class Disk{   float x, y, r, dx, dy;   void reflectByWall(){ if(x <= r / 2 || width – r / 2 <= x){ dx = dx * -1;    } if(y <= r / 2 || height– r / 2 <= y){ dy = dy * -1;    }   }   void dx(){ dx= (mouseX – x) * 0.01;   }   void dy(){ dy = (mouseY – y) * 0.01;  }   void draw(){ ellipse(x, y, r, r); x = constrain(x + dx, r / 2, width – r / 2); y = constrain(y + dy, r / 2, height – r /2); reflectByWall();     } 	}
定義したクラスを使おう クラス:型の一種 変数の宣言で使える new 代入
定義したクラスを使った宣言 Disk d; void setup(){    size(400, 400);    smooth();  colorMode(RGB, 100, 100, 100, 100);    } void draw(){  background(0, 0, 0); } void mousePressed(){ }
new Disk d; void setup(){    size(400, 400);    smooth();  colorMode(RGB, 100, 100, 100, 100);    d  = new Disk(); } void draw(){  background(0, 0, 0); } void mousePressed(){ }
インスタンス Disk d; void setup(){    size(400, 400);    smooth();  colorMode(RGB, 100, 100, 100, 100);    d  = new Disk(); } void draw(){  background(0, 0, 0); } void mousePressed(){ }
インスタンスメソッドを使おう Disk d; void setup(){   size(400, 400);   smooth(); colorMode(RGB, 100, 100, 100, 100); d  = new Disk(); d.x = 200; d.y = 200; d.r = 20; d.r = 20; } void draw(){   background(0, 0, 0); d.draw(); } void mousePressed(){ d.dx(); d.dy(); }
問題その1:Diskを二つに増やそう
円と円との重なり 中心(x2, y2) 直径r2 中心(x1, y1), 直径r1  dist(x1, y1, x2, y2); <= (r2 + r1) / 2 2010.6.7 18 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>
問題その2:反射させてみよう これまでのプログラムを改良しよう 二つのDiskがぶつかったとき、二つともを反射させよう dxとdy両方に-1をかける 2010.6.7 19 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>

More Related Content

What's hot

K010 appstat201201
K010 appstat201201K010 appstat201201
K010 appstat201201t2tarumi
 
OpenGLと行列
OpenGLと行列OpenGLと行列
OpenGLと行列miyosuda
 
Rate-Distortion Function for Gamma Sources under Absolute-Log Distortion
Rate-Distortion Function for Gamma Sources under Absolute-Log DistortionRate-Distortion Function for Gamma Sources under Absolute-Log Distortion
Rate-Distortion Function for Gamma Sources under Absolute-Log Distortion奈良先端大 情報科学研究科
 
距離まとめられませんでした
距離まとめられませんでした距離まとめられませんでした
距離まとめられませんでしたHaruka Ozaki
 
パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化Miyoshi Yuya
 
20130921_曲面の微分幾何学
20130921_曲面の微分幾何学20130921_曲面の微分幾何学
20130921_曲面の微分幾何学matsumoring
 
ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)yutannihilation
 
D上の関数の極値の問題
D上の関数の極値の問題D上の関数の極値の問題
D上の関数の極値の問題nabeshimamasataka
 
奇関数・偶関数
奇関数・偶関数奇関数・偶関数
奇関数・偶関数yu_nahb219
 
D上の関数の極値の問題
D上の関数の極値の問題D上の関数の極値の問題
D上の関数の極値の問題nabeshimamasataka
 
D上の関数の極値の問題
D上の関数の極値の問題 D上の関数の極値の問題
D上の関数の極値の問題 政孝 鍋島
 

What's hot (16)

CG2013 07
CG2013 07CG2013 07
CG2013 07
 
K010 appstat201201
K010 appstat201201K010 appstat201201
K010 appstat201201
 
OpenGLと行列
OpenGLと行列OpenGLと行列
OpenGLと行列
 
Rate-Distortion Function for Gamma Sources under Absolute-Log Distortion
Rate-Distortion Function for Gamma Sources under Absolute-Log DistortionRate-Distortion Function for Gamma Sources under Absolute-Log Distortion
Rate-Distortion Function for Gamma Sources under Absolute-Log Distortion
 
ggplot2 110129
ggplot2 110129ggplot2 110129
ggplot2 110129
 
距離まとめられませんでした
距離まとめられませんでした距離まとめられませんでした
距離まとめられませんでした
 
パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化
 
20130921_曲面の微分幾何学
20130921_曲面の微分幾何学20130921_曲面の微分幾何学
20130921_曲面の微分幾何学
 
CG2013 06
CG2013 06CG2013 06
CG2013 06
 
ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)
 
D上の関数の極値の問題
D上の関数の極値の問題D上の関数の極値の問題
D上の関数の極値の問題
 
奇関数・偶関数
奇関数・偶関数奇関数・偶関数
奇関数・偶関数
 
D上の関数の極値の問題
D上の関数の極値の問題D上の関数の極値の問題
D上の関数の極値の問題
 
D上の関数の極値の問題
D上の関数の極値の問題 D上の関数の極値の問題
D上の関数の極値の問題
 
Pytorch 02
Pytorch 02Pytorch 02
Pytorch 02
 
CG2013 12
CG2013 12CG2013 12
CG2013 12
 

Similar to プログラミング技法特論

プログラミング技法特論第8回
プログラミング技法特論第8回プログラミング技法特論第8回
プログラミング技法特論第8回Noritada Shimizu
 
Processingによるプログラミング入門 第6回
Processingによるプログラミング入門 第6回Processingによるプログラミング入門 第6回
Processingによるプログラミング入門 第6回Ryo Suzuki
 
PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」
PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」
PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」reona396
 
線形識別モデル
線形識別モデル線形識別モデル
線形識別モデル貴之 八木
 
シェーダー伝道師 第二回
シェーダー伝道師 第二回シェーダー伝道師 第二回
シェーダー伝道師 第二回hixi365
 
Scalaによる型安全なエラーハンドリング
Scalaによる型安全なエラーハンドリングScalaによる型安全なエラーハンドリング
Scalaによる型安全なエラーハンドリングTanUkkii
 
JastAdd & JastAddJ クリックチュートリアル
JastAdd & JastAddJ クリックチュートリアルJastAdd & JastAddJ クリックチュートリアル
JastAdd & JastAddJ クリックチュートリアルFuminobu Takeyama
 
SICP
SICPSICP
SICPS W
 
プログラミング技法特論第6回
プログラミング技法特論第6回プログラミング技法特論第6回
プログラミング技法特論第6回Noritada Shimizu
 

Similar to プログラミング技法特論 (9)

プログラミング技法特論第8回
プログラミング技法特論第8回プログラミング技法特論第8回
プログラミング技法特論第8回
 
Processingによるプログラミング入門 第6回
Processingによるプログラミング入門 第6回Processingによるプログラミング入門 第6回
Processingによるプログラミング入門 第6回
 
PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」
PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」
PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」
 
線形識別モデル
線形識別モデル線形識別モデル
線形識別モデル
 
シェーダー伝道師 第二回
シェーダー伝道師 第二回シェーダー伝道師 第二回
シェーダー伝道師 第二回
 
Scalaによる型安全なエラーハンドリング
Scalaによる型安全なエラーハンドリングScalaによる型安全なエラーハンドリング
Scalaによる型安全なエラーハンドリング
 
JastAdd & JastAddJ クリックチュートリアル
JastAdd & JastAddJ クリックチュートリアルJastAdd & JastAddJ クリックチュートリアル
JastAdd & JastAddJ クリックチュートリアル
 
SICP
SICPSICP
SICP
 
プログラミング技法特論第6回
プログラミング技法特論第6回プログラミング技法特論第6回
プログラミング技法特論第6回
 

More from Noritada Shimizu

20150512 webgl-off-the-main-thread
20150512 webgl-off-the-main-thread20150512 webgl-off-the-main-thread
20150512 webgl-off-the-main-threadNoritada Shimizu
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesNoritada Shimizu
 
Mozilla とブラウザゲーム
Mozilla とブラウザゲームMozilla とブラウザゲーム
Mozilla とブラウザゲームNoritada Shimizu
 
2016 gunma.web games-and-asm.js
2016 gunma.web games-and-asm.js2016 gunma.web games-and-asm.js
2016 gunma.web games-and-asm.jsNoritada Shimizu
 
20151128 firefoxos-handson
20151128 firefoxos-handson20151128 firefoxos-handson
20151128 firefoxos-handsonNoritada Shimizu
 
Inspection & Tweak: Firefox を使ったフロント開発
Inspection & Tweak: Firefox を使ったフロント開発Inspection & Tweak: Firefox を使ったフロント開発
Inspection & Tweak: Firefox を使ったフロント開発Noritada Shimizu
 
20150829 firefox-os-handson
20150829 firefox-os-handson20150829 firefox-os-handson
20150829 firefox-os-handsonNoritada Shimizu
 
20150727 Development tools for Firefox OS apps
20150727 Development tools for Firefox OS apps20150727 Development tools for Firefox OS apps
20150727 Development tools for Firefox OS appsNoritada Shimizu
 
Firefox OS でアプリを作るときに気をつけたい N 個のこと
Firefox OS  でアプリを作るときに気をつけたい N 個のことFirefox OS  でアプリを作るときに気をつけたい N 個のこと
Firefox OS でアプリを作るときに気をつけたい N 個のことNoritada Shimizu
 
Firefox OSアプリ開発ハンズオン(Hello World編)
Firefox OSアプリ開発ハンズオン(Hello World編)Firefox OSアプリ開発ハンズオン(Hello World編)
Firefox OSアプリ開発ハンズオン(Hello World編)Noritada Shimizu
 
WebVR(html5j TV部、WebVRとかVRのUIとか勉強会)
WebVR(html5j TV部、WebVRとかVRのUIとか勉強会)WebVR(html5j TV部、WebVRとかVRのUIとか勉強会)
WebVR(html5j TV部、WebVRとかVRのUIとか勉強会)Noritada Shimizu
 
Application submission, management and manetization in Firefox Marketplace
Application submission, management and manetization in Firefox MarketplaceApplication submission, management and manetization in Firefox Marketplace
Application submission, management and manetization in Firefox MarketplaceNoritada Shimizu
 

More from Noritada Shimizu (20)

20160803 devrel
20160803 devrel20160803 devrel
20160803 devrel
 
20160713 webvr
20160713 webvr20160713 webvr
20160713 webvr
 
20160601 devtools
20160601 devtools20160601 devtools
20160601 devtools
 
20150512 webgl-off-the-main-thread
20150512 webgl-off-the-main-thread20150512 webgl-off-the-main-thread
20150512 webgl-off-the-main-thread
 
20160428 html5jwebplat
20160428 html5jwebplat20160428 html5jwebplat
20160428 html5jwebplat
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web games
 
Mozilla とブラウザゲーム
Mozilla とブラウザゲームMozilla とブラウザゲーム
Mozilla とブラウザゲーム
 
2016 gunma.web games-and-asm.js
2016 gunma.web games-and-asm.js2016 gunma.web games-and-asm.js
2016 gunma.web games-and-asm.js
 
20151224-games
20151224-games20151224-games
20151224-games
 
20151128 firefoxos-handson
20151128 firefoxos-handson20151128 firefoxos-handson
20151128 firefoxos-handson
 
20151117 devtools
20151117 devtools20151117 devtools
20151117 devtools
 
Inspection & Tweak: Firefox を使ったフロント開発
Inspection & Tweak: Firefox を使ったフロント開発Inspection & Tweak: Firefox を使ったフロント開発
Inspection & Tweak: Firefox を使ったフロント開発
 
20150822 osc-shimane
20150822 osc-shimane20150822 osc-shimane
20150822 osc-shimane
 
20150829 firefox-os-handson
20150829 firefox-os-handson20150829 firefox-os-handson
20150829 firefox-os-handson
 
20150829 firefox-os
20150829 firefox-os20150829 firefox-os
20150829 firefox-os
 
20150727 Development tools for Firefox OS apps
20150727 Development tools for Firefox OS apps20150727 Development tools for Firefox OS apps
20150727 Development tools for Firefox OS apps
 
Firefox OS でアプリを作るときに気をつけたい N 個のこと
Firefox OS  でアプリを作るときに気をつけたい N 個のことFirefox OS  でアプリを作るときに気をつけたい N 個のこと
Firefox OS でアプリを作るときに気をつけたい N 個のこと
 
Firefox OSアプリ開発ハンズオン(Hello World編)
Firefox OSアプリ開発ハンズオン(Hello World編)Firefox OSアプリ開発ハンズオン(Hello World編)
Firefox OSアプリ開発ハンズオン(Hello World編)
 
WebVR(html5j TV部、WebVRとかVRのUIとか勉強会)
WebVR(html5j TV部、WebVRとかVRのUIとか勉強会)WebVR(html5j TV部、WebVRとかVRのUIとか勉強会)
WebVR(html5j TV部、WebVRとかVRのUIとか勉強会)
 
Application submission, management and manetization in Firefox Marketplace
Application submission, management and manetization in Firefox MarketplaceApplication submission, management and manetization in Firefox Marketplace
Application submission, management and manetization in Firefox Marketplace
 

Recently uploaded

次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~Kochi Eng Camp
 
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラムKochi Eng Camp
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料Takayuki Itoh
 
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料Tokyo Institute of Technology
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 

Recently uploaded (8)

次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
 
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 

プログラミング技法特論