質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

0回答

252閲覧

任意に画像を回転させる方法をお教えください。

xiaraix

総合スコア5

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2018/08/01 01:13

編集2018/08/01 06:23

processing

1 2PImage img; 3PrintWriter output; 4String filename = nf(year(),4) + nf(month(),2) + nf(day(),2) + nf(hour(),2) + nf(minute(),2) ; 5 6int ratio = 1; //サイズ比率 7int angle; 8int direction; 9int baseTime; 10int response; 11int RT; 12 13int i = 0; 14 15boolean isDebug; 16int numTrial; 17 18int state; 19int currentTrial; //実験が現在何試行目を実行中かを保持 20PFont font; 21 22void setup(){ 23background(128); //灰色); 24size( 600, 600 ); 25frameRate(30); 26noStroke(); 27 28state = 0; 29baseTime = millis(); 30response = 0; 31RT = 0; 32 33textFont( createFont( "Georgia", 28 ) ); 34output = createWriter( filename + ".txt" ); 35 36} 37 38void draw(){ 39//for(int i=0; i < 3; i++){ 40if( state == 0 ){ 41titlePhase(); 42} 43else if( state == 1 ){ 44waitPhase(); 45} 46else if(state == 2){ 47responsePhase();{ 48baseTime = millis(); // 削除するとインターバル時間を取れなくなる 49} 50} 51else if(state == 3){ 52endPhase(); 53} 54} 55 56 57void titlePhase(){ 58//background(0,0,255); //青 59background(255,255,255); //白 60fill(255,0,0); 61textSize(36); 62text("START", 250, 225); // 表示するテキスト, x座標, y座標 63 64int elapsedTime = millis() - baseTime; 65if( elapsedTime > 3000 ){ 66state = 1; 67} 68 69} 70 71void waitPhase(){ 72//background(255,128,128); //ピンク 73background(255,255,255); //白 74// check elapsed time to transit state 75int time1 = millis() - baseTime; 76if( time1 > 3000 ){ 77transitState(); 78} 79} 80 81void responsePhase(){ 82 83background(255,255,0); //黄色 84noLoop(); 85img = loadImage("image1.png"); 86imageMode(CENTER); 87 88int direction = (int)random(4); 89if (direction == 0) { 90angle = 0; 91} else if (direction == 1) { 92angle = 90; 93} else if (direction == 2) { 94angle = 180; 95} else if (direction == 3){ 96angle = 270; 97} 98ratio = (int)random(1,5);//サイズ 1倍から5倍までのランダム 99 100pushMatrix(); 101translate(width/2, height/2); 102rotate(radians(angle)); 103scale(ratio); 104image(img, 0, 0); 105popMatrix(); 106 107} 108 109 110void endPhase(){ 111//background(0,0,255); //青 112background(255,255,255); //白 113fill(255,0,0); 114textSize(36); 115text("FINISH", 250, 225); // 表示するテキスト, x座標, y座標 116} 117 118void transitState(){ 119if( state == 1 ){ 120redraw(); 121state = 2; 122} 123else { 124if( currentTrial == numTrial - 1 ){ 125state = 2; 126} 127else { 128currentTrial++; 129state = 1; 130} 131} 132} 133 134void keyPressed(){ 135 136if (key == ENTER || key == RETURN){ 137if( state == 0 ){ 138state = 1; 139} 140} 141 142if( key == 'q' ){ 143output.flush(); 144output.close(); 145exit(); 146} 147 148if (keyPressed == true){ 149 150if(i < 3){ 151if( state == 2 ){ 152loop(); 153state = 1; 154i = i+1; 155} 156if (i >= 3){ 157 state = 3; 158 //endPhase(); 159} 160} 161} 162 163switch(keyCode) { 164 165case UP: 166if (angle == 0) { 167 168println ("↑ hit" +" "+ (millis() - baseTime)); 169output.println("↑ hit" +" "+ (millis() - baseTime)); 170} 171 172else { 173println ("↑ miss" +" "+ (millis() - baseTime)); 174output.println("↑ miss" +" "+ (millis() - baseTime)); 175} 176break; 177 178case RIGHT: 179if (angle == 90) { 180println ("→ hit" +" "+ (millis() - baseTime)); 181output.println("→ hit" +" "+ (millis() - baseTime)); 182} 183else { 184println ("→ miss" +" "+ (millis() - baseTime)); 185output.println("→ miss" +" "+ (millis() - baseTime)); 186} 187break; 188 189case DOWN: 190if (angle == 180) { 191println ("↓ hit" +" "+ (millis() - baseTime)); 192output.println("↓ hit" +" "+ (millis() - baseTime)); 193} 194else { 195println ("↓ miss" +" "+ (millis() - baseTime)); 196output.println("↓ miss" +" "+ (millis() - baseTime)); 197} 198break; 199 200case LEFT: 201if (angle == 270) { 202println ("← hit" +" "+ (millis() - baseTime)); 203output.println("← hit" +" "+ (millis() - baseTime)); 204} 205else { 206println ("← miss" +" "+ (millis() - baseTime)); 207output.println("← miss" +" "+ (millis() - baseTime)); 208} 209break; 210} 211} 212 213 214void mousePressed(){ //マウスクリックでスタート 215if (mousePressed == true){ 216if( state == 0 ){ 217state = 1; 218} 219} 220}

お世話になります

以下のような動作をprocessingで行おうとして参考になる資料が見つからず詰まっております。
ご助言いただけないでしょうか。

  1. processingで矢印の大きさが異なる画像を5枚用意する。
  2. UP,DOWN,RIGHT,LEFT の4方向に画像を上記の5枚の画像を回転させる。
  3. 回転は任意の方向にメニューを作って1枚づつredrawでインターバルを2秒とって順番に表示させる。
  4. 任意の回転メニューは3パターン用意する。

添付のコードは以前教えていただいたものを作りなおして、
エンターでスタート後、2秒ごとにランダムに矢印を表示して当たり判定をする内容になっております。
これを改修して今回質問の内容に持って行けないかと思っております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問