Rをはじめる
Rをはじめようと思います。
Rというのは、
R is ‘GNU S’, a freely available language and environment for statistical computing and graphics which provides a wide variety of statistical and graphical techniques: linear and nonlinear modelling, statistical tests, time series analysis, classification, clustering, etc
だそうです。
以下のページからダウンロード。
http://cran.md.tsukuba.ac.jp/bin/windows/base/
そして以下のリンクをクリックするとダウンロードが始まります。
Download R 3.0.2 for Windows (52 megabytes, 32/64 bit)
ダウンロードしたものをクリック。
なにかサンプル的なものを実行しようとしたのですが、自前で読み込むファイルを用意した方がよいようなので次回はそれから行います。関数もたくさんあったり、事前にライブラリの取得、インストールがあったり、敷居が高そう。
なお、途中で接続するサーバーを決める必要がありますが、Tokyoを選ぶとうまくいかない。Tsukubaにするとうまくいきました。
processing ブロック崩しゲームの作り始め
processingにてブロック崩しゲームを作ろうと思います。
今回はまるとしかくを表示。そして動くまるとキー入力にて動くしかくの作成。
そして、しかくにあたるとまるが反射する処理を付け加えます。
なお、その反射の処理がうまくいかず。これは後日の課題とします。
//しかく float x = 200.0; float speed = 3.0; //まる float mx = 25; float my = 150; float mvx = 2.0; float mvy = 1.5; float space = 0; int c_type = 0; void setup() { size(400, 400); //これは何か noStroke(); smooth(); } void keyPressed() { if (key == CODED) { // コード化されているキーが押された if (keyCode == RIGHT) { // キーコードを判定 x += speed; if(x > 270){ //右の限界 四角の幅が120、枠の幅が400のため。 x = 270; } } else if (keyCode == LEFT) { x -= speed; if(x < 10){ //左の限界 x = 10; } } } } void draw() { background(204); //background(0); fill(255); //colorSet1(); rect(x, 360, 120, 30); mx = mx + mvx; my = my + mvy; if(mx <= 25 || mx >= width - 25){ mvx = - mvx; colorChange(); } if(my <= 25 || my >= height - 25){ mvy = - mvy; colorChange(); }else{ colorSet1(); } ellipse(mx,my,50,50); Conflict(); } void colorChange(){ c_type = c_type%7; switch(c_type) { case 0: //red fill(255,0,0); break; case 1: //yellow fill(255,255,0); break; case 2: //green fill(0,255,0); break; case 3: //lightblue fill(0,0,255); break; case 4: //blue fill(255,0,255); break; case 5: //purple fill(255,0,255); break; case 6: //whihe fill(255,255,255); break; default: println("None"); // どのcaseにも該当しなかったとき break; } c_type = c_type + 1; } void colorSet1(){ switch(c_type) { case 0: //red fill(255,0,0); break; case 1: //yellow fill(255,255,0); break; case 2: //green fill(0,255,0); break; case 3: //lightblue fill(0,0,255); break; case 4: //blue fill(255,0,255); break; case 5: //purple fill(255,0,255); break; case 6: //whihe fill(255,255,255); break; default: // どのcaseにも該当しなかったとき break; } } void Conflict(){ space = (x-mx)*(x-mx) + (360-my)*(360-my); // if(space < 50*50){ if(my + 25 > 360){ if((x <= mx) && (x+120 >= mx) ){ mvx = - mvx; mvy = - mvy; } } // } }
processing 、しかくの可動域
昨日の続き。
表示したしかくの可動域を指定します。
これはしかくが枠の外に行かないようにするため。
左の可動域は、x >= 10。
右の可動域は、X <= 270。
とする。
これは、しかくの横幅が、120、枠の幅が400であるため。
270 + 120 = 390。つまり枠から10左まで。
(しかくの左が270となる。)
float x = 200.0; float speed = 3.0; void setup() { size(400, 400); } void keyPressed() { if (key == CODED) { // コード化されているキーが押された if (keyCode == RIGHT) { // キーコードを判定 x += speed; if(x > 270){ //右の限界 四角の幅が120、枠の幅が400のため。 x = 270; } } else if (keyCode == LEFT) { x -= speed; if(x < 10){ //左の限界 x = 10; } } } } void draw() { background(204); rect(x, height*0.9, 120, 30); }
processing キー入力で左右にしかくを動かす。
processingにて四角を表示、そしてキー入力によって左右に動かす。
右矢印キーでしかくを右、左矢印キーでしかくを左に動かす。
キーをタイプすることで、keyPressed()が呼び出される。その中でキーの中身を判別。
float x = 200.0; float speed = 3.0; void setup() { size(400, 400); } void keyPressed() { if (key == CODED) { // コード化されているキーが押された if (keyCode == RIGHT) { // キーコードを判定 x += speed; } else if (keyCode == LEFT) { x -= speed; } } } void draw() { background(204); rect(x, height*0.9, 120, 30); }
衝突について
2つのまるの衝突処理について考える。
あまりにまるが速いとうまくいかない。
一ターンで動くまるの距離、つまり速度はまるの直径が限度だと思う。
そうでないとまるが通りぬけてしまい、衝突の処理がなされない。
//no1 float x1 = 50; float y1 = 150; float vx1 = 2; float vy1 = 2; //no2 float x2 = 150; float y2 = 50; float vx2 = 2; float vy2 = 2; int c_type1 = 0; int c_type2 = 0; float space = 0; void setup(){ size(600,300); background(0); noStroke(); fill(255); smooth(); } void draw(){ background(0); x1 = x1 + vx1; y1 = y1 + vy1; x2 = x2 + vx2; y2 = y2 + vy2; if(x1 <= 25 || x1 >= width - 25){ vx1 = - vx1; colorChange1(); c_type1 = c_type1 + 1; } if(y1 <= 25 || y1 >= height - 25){ vy1 = - vy1; colorChange1(); c_type1 = c_type1 + 1; } //no1の描画 colorSet1(); ellipse(x1,y1,50,50); if(x2 <= 25 || x2 >= width - 25){ vx2 = - vx2; colorChange2(); c_type2 = c_type2 + 1; } if(y2 <= 25 || y2 >= height - 25){ vy2 = - vy2; colorChange2(); c_type2 = c_type2 + 1; } //no2の描画 colorSet2(); ellipse(x2,y2,50,50); Conflict(); } void Conflict(){ space = (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1); if(space < 50*50){ vx1 = - vx1; vx2 = - vx2; vy1 = - vy1; vy2 = - vy2; } } void colorChange1(){ c_type1 = c_type1%7; } void colorSet1(){ switch(c_type1) { case 0: //red fill(255,0,0); break; case 1: //yellow fill(255,255,0); break; case 2: //green fill(0,255,0); break; case 3: //lightblue fill(0,0,255); break; case 4: //blue fill(255,0,255); break; case 5: //purple fill(255,0,255); break; case 6: //whihe fill(255,255,255); break; default: println("None"); // どのcaseにも該当しなかったとき break; } } void colorChange2(){ c_type2 = c_type2%7; } void colorSet2(){ switch(c_type2) { case 0: //red fill(255,0,0); break; case 1: //yellow fill(255,255,0); break; case 2: //green fill(0,255,0); break; case 3: //lightblue fill(0,0,255); break; case 4: //blue fill(255,0,255); break; case 5: //purple fill(255,0,255); break; case 6: //whihe fill(255,255,255); break; default: println("None"); // どのcaseにも該当しなかったとき break; } }
話の聞き方
日経SYSTEMSの2013年6月号に、「悪い聞き方、よい聞き方」という特集が載っていたのでそれについて。
大切なのは以下の3点。
- 傾聴 -- 相手の心の内も理解しようとする。
- アイスブレイク -- 事前に相手と親しくする。趣味など聞いておく。
- ページング -- 相手の話すスピード、感情に合わせる。
また、話を聞くときに便利な言葉として、「他には?」、「具体的には?」、「なぜか?」が紹介されていた。
個人的にはそれに、「それから?」、「そのあとは?」を付け加えたい。
他にもあるだろう。みつけたらまとめておきたい。
processingでまるを2つ
processingでまるを2つ表示し、なおかつ衝突時の処理を加えます。
メソッドの補足。
fillメソッドは色の指定のみ。
実際の描画はellipseメソッドで行う。直近のfillメソッドで指定した色で描画を行う。
衝突の処理が未完成なので後日修正する。
//no1 float x1 = 25; float y1 = 150; float vx1 = 2.0; float vy1 = 1.0; //no2 float x2 = 35; float y2 = 170; float vx2 = 30.0; float vy2 = 30.0; int c_type1 = 0; int c_type2 = 0; float space = 0; void setup(){ size(600,300); background(0); noStroke(); fill(255); smooth(); } void draw(){ background(0); x1 = x1 + vx1; y1 = y1 + vy1; x2 = x2 + vx2; y2 = y2 + vy2; if(x1 <= 25 || x1 >= width - 25){ vx1 = - vx1; colorChange1(); c_type1 = c_type1 + 1; } if(y1 <= 25 || y1 >= height - 25){ vy1 = - vy1; colorChange1(); c_type1 = c_type1 + 1; } //no1の描画 colorSet1(); ellipse(x1,y1,50,50); if(x2 <= 25 || x2 >= width - 25){ vx2 = - vx2; colorChange2(); c_type2 = c_type2 + 1; } if(y2 <= 25 || y2 >= height - 25){ vy2 = - vy2; colorChange2(); c_type2 = c_type2 + 1; } //no2の描画 colorSet2(); ellipse(x2,y2,50,50); Conflict(); } void Conflict(){ space = (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1); if(space < 40*40){ vx1 = - vx1; vx2 = - vx2; vy1 = - vy1; vy2 = - vy2; } } void colorChange1(){ c_type1 = c_type1%7; } void colorSet1(){ switch(c_type1) { case 0: //red fill(255,0,0); break; case 1: //yellow fill(255,255,0); break; case 2: //green fill(0,255,0); break; case 3: //lightblue fill(0,0,255); break; case 4: //blue fill(255,0,255); break; case 5: //purple fill(255,0,255); break; case 6: //whihe fill(255,255,255); break; default: println("None"); // どのcaseにも該当しなかったとき break; } } void colorChange2(){ c_type2 = c_type2%7; } void colorSet2(){ switch(c_type2) { case 0: //red fill(255,0,0); break; case 1: //yellow fill(255,255,0); break; case 2: //green fill(0,255,0); break; case 3: //lightblue fill(0,0,255); break; case 4: //blue fill(255,0,255); break; case 5: //purple fill(255,0,255); break; case 6: //whihe fill(255,255,255); break; default: println("None"); // どのcaseにも該当しなかったとき break; } }