teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

見直しキャンペーン中

2023/07/17 04:58

投稿

TN8001
TN8001

スコア10111

answer CHANGED
@@ -1,165 +1,168 @@
1
- processingは詳しくないのですが、アメーバのインパクトが凄かったのでやってみました。(これってJavaですよね?)
2
- ランダムはピクピクしすぎたり、なかなか変化しなかったりで難しいですね。改善の余地がありそうです(最低何フレームは向きを変えない等)
3
-
4
- つい面白くて答えになってしまいましたが、ヒントでいい場合はコードの下の余談から見てください。
5
-
6
- ```Processing
7
- float x; // 少数型の変数xを定義(右上)
8
- float y; // 少数型の変数yを定義(右上)
9
- float ax; // 少数型の変数axを定義(右)
10
- float bx; // 少数型の変数bxを定義(右下)
11
- float by; // 少数型の変数byを定義(右下)
12
- float cy; // 少数型の変数cyを定義(下)
13
- float dx; // 少数型の変数dxを定義(左下)
14
- float dy; // 少数型の変数dyを定義(左下)
15
- float ex; // 少数型の変数exを定義(左左下)
16
- float ey; // 少数型の変数eyを定義(左左下)
17
- float fx; // 少数型の変数fxを定義(左左上)
18
- float fy; // 少数型の変数fyを定義(左左上)
19
- float gy; // 少数型の変数gyを定義(上)
20
-
21
- boolean isExpand = true; // boolean型の変数isExpandを定義&初期化(trueで今伸びている)
22
-
23
- void setup() {
24
- size(500, 500);
25
- background(#ffffff);
26
- }
27
-
28
- void expand() { // アメーバの角を伸ばす
29
- x += 1; // 毎フレームでアメーバの角のx座標を1ずつ増やす
30
- y -= 1; // 毎フレームでアメーバの角のy座標を1ずつ減らす
31
-
32
- ax += 1; // 毎フレームでアメーバのa角のx座標を1ずつ増やす
33
-
34
- bx += 1; // 毎フレームでアメーバのb角のx座標を1ずつ増やす
35
- by += 1; // 毎フレームでアメーバのb角のy座標を1ずつ増やす
36
-
37
- cy += 1; // 毎フレームでアメーバのc角のy座標を1ずつ増やす
38
-
39
- dx -= 0.5; // 毎フレームでアメーバのd角のx座標を1ずつ減らす
40
- dy += 1; // 毎フレームでアメーバのd角のy座標を1ずつ増やす
41
-
42
- ex -= 1; // 毎フレームでアメーバのe角のx座標を1ずつ減らす
43
- ey += 0.25; // 毎フレームでアメーバのe角のy座標を0.25ずつ増やす
44
-
45
- fx -= 1; // 毎フレームでアメーバのf角のx座標を1ずつ減らす
46
- fy -= 0.25; // 毎フレームでアメーバのf角のy座標を0.25ずつ減らす
47
-
48
- gy -= 1; // 毎フレームでアメーバのg角のy座標を1ずつ減らす
49
- }
50
-
51
- void contract() { // アメーバの角を縮める
52
- x -= 1;
53
- y += 1;
54
-
55
- ax -= 1;
56
-
57
- bx -= 1;
58
- by -= 1;
59
-
60
- cy -= 1;
61
-
62
- dx += 0.5;
63
- dy -= 1;
64
-
65
- ex += 1;
66
- ey -= 0.25;
67
-
68
- fx += 1;
69
- fy += 0.25;
70
-
71
- gy += 1;
72
- }
73
-
74
- void draw() {
75
- background(255);
76
-
77
- strokeWeight(4);
78
- stroke(0, 200, 0);
79
- fill(0, 255, 0);
80
-
81
- if (100 < x) { // 最大に伸びたら
82
- isExpand = false;
83
- } else if (x < -50) { // 最小に縮んだら
84
- isExpand = true;
85
- } else {
86
- if (random(40) < 1) { // たまに向きを逆にする
87
- isExpand = !isExpand;
88
- }
89
- }
90
-
91
- beginShape(); // アメーバの形
92
-
93
- if (isExpand) {
94
- expand(); // アメーバの角を伸ばす
95
- } else {
96
- contract(); // アメーバの角を縮める
97
- }
98
-
99
- vertex(300, 80);
100
-
101
- bezierVertex(240, 10, 220, gy + 20, 200, 80); // g頂点
102
- bezierVertex(200, 80, 200, 120, 130, 120); // 凹み
103
-
104
- bezierVertex(130, 120, fx + 20, fy + 120, 100, 180); // f頂点
105
- bezierVertex(100, 180, 180, 220, 90, 280); // 凹み
106
-
107
- bezierVertex(90, 280, -10 + ex, ey + 320, 120, 320); // e頂点
108
- bezierVertex(120, 320, 170, 330, 155, 360); // 凹み
109
-
110
- bezierVertex(155, 360, dx + 100, dy + 600, 200, 400); // d頂点
111
- bezierVertex(200, 400, 225, 350, 250, 400); // 凹み
112
-
113
- bezierVertex(250, 400, 290, cy + 500, 320, 380); // c頂点
114
- bezierVertex(320, 380, 330, 300, 360, 340); // 凹み
115
-
116
- bezierVertex(360, 340, bx + 450, by + 450, 400, 300); // b頂点
117
- bezierVertex(400, 300, 390, 280, 420, 260); // 凹み
118
-
119
- bezierVertex(420, 260, ax + 580, 220, 420, 200); // a頂点
120
- bezierVertex(420, 200, 380, 180, 420, 130); // 凹み
121
-
122
- bezierVertex(420, 130, x + 500, y + 20, 350, 100); // 頂点
123
- bezierVertex(350, 100, 325, 120, 300, 80); // 凹み
124
-
125
- endShape(); // アメーバの形終わり
126
-
127
- fill(255, 255, 255);
128
- ellipse(200, 100, 100, 100); // 左目の外側
129
- ellipse(300, 100, 100, 100); // 右目の外側
130
-
131
-
132
- fill(0, 200, 0);
133
- ellipse(200, 100, 50, 50); // 左目の黒目
134
- ellipse(300, 100, 50, 50); // 右目の黒目
135
-
136
-
137
- beginShape(); // 核、口の形
138
-
139
- vertex(220, 160);
140
-
141
- bezierVertex(240, 170, 260, 170, 280, 160); // 口の凹み
142
- bezierVertex(280, 160, 300, 150, 320, 160); // 右の盛り上がり
143
- bezierVertex(320, 160, 340, 170, 320, 190); // 右膨らみ
144
- bezierVertex(320, 190, 260, 230, 185, 190); // 下の膨らみ
145
- bezierVertex(185, 190, 170, 180, 185, 165); // 左膨らみ
146
- bezierVertex(185, 165, 200, 150, 220, 160); // 左の盛り上がり
147
-
148
- endShape();
149
- }
150
- ```
151
- 以下余談
152
- ---
153
-
154
- その際の手順を書き出しました。参考になれば幸いです。
155
- 手順間で適宣実行し間違いがないか確認しています。
156
- 1. x,y等の数値を変更する部分が、行数が多く見通しが悪いのでexpand関数に切り出した
157
- 2. expand関数と反対動きする関数が必要と考え、符号を逆にしたcontract関数を作った
158
- 3. 今伸びているのか縮んでいるのの状態を表、boolean型変数isExpandを作った
159
- 4. isExpand状態によって、expandかcontractどちらか呼び出ようにした
160
- 5. 当然伸びっぱなしになるで、最大に伸びたら(りあず`100<x`とした)`isExpand=false`として、縮みモードへ移行するif文書い
161
- 6. 今度は縮み過ぎたで、最小に縮んだら(とりあえず`x<0`とした)`isExpand=true`として、伸びモードへ移行るif文書い
162
- 7. 5.6.時以外ランダムに向き逆にるために、random関数でたまに`isExpand=!isExpand`になるようにした
163
- 8. たまが良い感じになるように、random関数の数字調整し
164
- 9. 跡が残るので、`background(255)`で消した
1
+ processingは詳しくないのですが、アメーバのインパクトが凄かったのでやってみました。(これってJavaですよね?)
2
+ ランダムはピクピクしすぎたり、なかなか変化しなかったりで難しいですね。改善の余地がありそうです(最低何フレームは向きを変えない等)
3
+
4
+ つい面白くて答えになってしまいましたが、ヒントでいい場合はコードの下の余談から見てください。
5
+
6
+ ```Processing
7
+ float x; // 少数型の変数xを定義(右上)
8
+ float y; // 少数型の変数yを定義(右上)
9
+ float ax; // 少数型の変数axを定義(右)
10
+ float bx; // 少数型の変数bxを定義(右下)
11
+ float by; // 少数型の変数byを定義(右下)
12
+ float cy; // 少数型の変数cyを定義(下)
13
+ float dx; // 少数型の変数dxを定義(左下)
14
+ float dy; // 少数型の変数dyを定義(左下)
15
+ float ex; // 少数型の変数exを定義(左左下)
16
+ float ey; // 少数型の変数eyを定義(左左下)
17
+ float fx; // 少数型の変数fxを定義(左左上)
18
+ float fy; // 少数型の変数fyを定義(左左上)
19
+ float gy; // 少数型の変数gyを定義(上)
20
+
21
+ boolean isExpand = true; // boolean型の変数isExpandを定義&初期化(trueで今伸びている)
22
+
23
+ void setup() {
24
+ size(500, 500);
25
+ background(#ffffff);
26
+ }
27
+
28
+ void expand() { // アメーバの角を伸ばす
29
+ x += 1; // 毎フレームでアメーバの角のx座標を1ずつ増やす
30
+ y -= 1; // 毎フレームでアメーバの角のy座標を1ずつ減らす
31
+
32
+ ax += 1; // 毎フレームでアメーバのa角のx座標を1ずつ増やす
33
+
34
+ bx += 1; // 毎フレームでアメーバのb角のx座標を1ずつ増やす
35
+ by += 1; // 毎フレームでアメーバのb角のy座標を1ずつ増やす
36
+
37
+ cy += 1; // 毎フレームでアメーバのc角のy座標を1ずつ増やす
38
+
39
+ dx -= 0.5; // 毎フレームでアメーバのd角のx座標を1ずつ減らす
40
+ dy += 1; // 毎フレームでアメーバのd角のy座標を1ずつ増やす
41
+
42
+ ex -= 1; // 毎フレームでアメーバのe角のx座標を1ずつ減らす
43
+ ey += 0.25; // 毎フレームでアメーバのe角のy座標を0.25ずつ増やす
44
+
45
+ fx -= 1; // 毎フレームでアメーバのf角のx座標を1ずつ減らす
46
+ fy -= 0.25; // 毎フレームでアメーバのf角のy座標を0.25ずつ減らす
47
+
48
+ gy -= 1; // 毎フレームでアメーバのg角のy座標を1ずつ減らす
49
+ }
50
+
51
+ void contract() { // アメーバの角を縮める
52
+ x -= 1;
53
+ y += 1;
54
+
55
+ ax -= 1;
56
+
57
+ bx -= 1;
58
+ by -= 1;
59
+
60
+ cy -= 1;
61
+
62
+ dx += 0.5;
63
+ dy -= 1;
64
+
65
+ ex += 1;
66
+ ey -= 0.25;
67
+
68
+ fx += 1;
69
+ fy += 0.25;
70
+
71
+ gy += 1;
72
+ }
73
+
74
+ void draw() {
75
+ background(255);
76
+
77
+ strokeWeight(4);
78
+ stroke(0, 200, 0);
79
+ fill(0, 255, 0);
80
+
81
+ if (100 < x) { // 最大に伸びたら
82
+ isExpand = false;
83
+ } else if (x < -50) { // 最小に縮んだら
84
+ isExpand = true;
85
+ } else {
86
+ if (random(40) < 1) { // たまに向きを逆にする
87
+ isExpand = !isExpand;
88
+ }
89
+ }
90
+
91
+ beginShape(); // アメーバの形
92
+
93
+ if (isExpand) {
94
+ expand(); // アメーバの角を伸ばす
95
+ } else {
96
+ contract(); // アメーバの角を縮める
97
+ }
98
+
99
+ vertex(300, 80);
100
+
101
+ bezierVertex(240, 10, 220, gy + 20, 200, 80); // g頂点
102
+ bezierVertex(200, 80, 200, 120, 130, 120); // 凹み
103
+
104
+ bezierVertex(130, 120, fx + 20, fy + 120, 100, 180); // f頂点
105
+ bezierVertex(100, 180, 180, 220, 90, 280); // 凹み
106
+
107
+ bezierVertex(90, 280, -10 + ex, ey + 320, 120, 320); // e頂点
108
+ bezierVertex(120, 320, 170, 330, 155, 360); // 凹み
109
+
110
+ bezierVertex(155, 360, dx + 100, dy + 600, 200, 400); // d頂点
111
+ bezierVertex(200, 400, 225, 350, 250, 400); // 凹み
112
+
113
+ bezierVertex(250, 400, 290, cy + 500, 320, 380); // c頂点
114
+ bezierVertex(320, 380, 330, 300, 360, 340); // 凹み
115
+
116
+ bezierVertex(360, 340, bx + 450, by + 450, 400, 300); // b頂点
117
+ bezierVertex(400, 300, 390, 280, 420, 260); // 凹み
118
+
119
+ bezierVertex(420, 260, ax + 580, 220, 420, 200); // a頂点
120
+ bezierVertex(420, 200, 380, 180, 420, 130); // 凹み
121
+
122
+ bezierVertex(420, 130, x + 500, y + 20, 350, 100); // 頂点
123
+ bezierVertex(350, 100, 325, 120, 300, 80); // 凹み
124
+
125
+ endShape(); // アメーバの形終わり
126
+
127
+ fill(255, 255, 255);
128
+ ellipse(200, 100, 100, 100); // 左目の外側
129
+ ellipse(300, 100, 100, 100); // 右目の外側
130
+
131
+
132
+ fill(0, 200, 0);
133
+ ellipse(200, 100, 50, 50); // 左目の黒目
134
+ ellipse(300, 100, 50, 50); // 右目の黒目
135
+
136
+
137
+ beginShape(); // 核、口の形
138
+
139
+ vertex(220, 160);
140
+
141
+ bezierVertex(240, 170, 260, 170, 280, 160); // 口の凹み
142
+ bezierVertex(280, 160, 300, 150, 320, 160); // 右の盛り上がり
143
+ bezierVertex(320, 160, 340, 170, 320, 190); // 右膨らみ
144
+ bezierVertex(320, 190, 260, 230, 185, 190); // 下の膨らみ
145
+ bezierVertex(185, 190, 170, 180, 185, 165); // 左膨らみ
146
+ bezierVertex(185, 165, 200, 150, 220, 160); // 左の盛り上がり
147
+
148
+ endShape();
149
+ }
150
+ ```
151
+ ![アプリ動画](https://ddjkaamml8q8x.cloudfront.net/questions/2023-07-17/bf027d75-b590-479a-91d8-4b9274739bbb.gif)
152
+
153
+ ---
154
+
155
+ ### 余談
156
+
157
+ 際の手順書き出まし。参考になれば幸いです。
158
+ 手順間適宣実行し間違がない確認していま
159
+ 1. x,y等数値変更る部分が、行数が多く見通しが悪いのでexpand関数切り出した
160
+ 2. expand関数と反対動きをする関数が必要、符号を逆にしたcontract関数作っ
161
+ 3. 今伸びている縮んでいのかの状態を表、boolean型変数isExpand作っ
162
+ 4. isExpand状態よって、expandかcontractどちらか呼び出すようにした
163
+ 5. 当然伸びっぱなしになるので、最大伸びたら(とりあえず`100<x`とした)`isExpand=false`として縮みモードへ移行するif文書い
164
+ 6. 今度は縮み過ぎたので、最小に縮んだら(とりあえず`x<0`した)`isExpand=true`として、伸びるモードへ移行するif文を書いた
165
+ 7. 5.6.の時以外にランダムに向きを逆にするために、random関数でたまに`isExpand=!isExpand`になるようにした
166
+ 8. たまにが良い感じになるように、random関数の数字を調整した
167
+ 9. 緑の跡が残るので、`background(255)`で消した
165
168
  10. もう少し縮んでほしい気がしたので、変になるギリギリの`x<-50`に調整した

3

teratail不具合により再編集

2019/11/25 07:59

投稿

TN8001
TN8001

スコア10111

answer CHANGED
@@ -1,4 +1,4 @@
1
- processingは詳しくないのですが、アメーバのインパクトがすごかったのでやってみました。(これってJavaですよね?)
1
+ processingは詳しくないのですが、アメーバのインパクトがかったのでやってみました。(これってJavaですよね?)
2
2
  ランダムはピクピクしすぎたり、なかなか変化しなかったりで難しいですね。改善の余地がありそうです(最低何フレームは向きを変えない等)
3
3
 
4
4
  つい面白くて答えになってしまいましたが、ヒントでいい場合はコードの下の余談から見てください。

2

コードハイライト名変更

2019/11/25 07:59

投稿

TN8001
TN8001

スコア10111

answer CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  つい面白くて答えになってしまいましたが、ヒントでいい場合はコードの下の余談から見てください。
5
5
 
6
- ```java
6
+ ```Processing
7
7
  float x; // 少数型の変数xを定義(右上)
8
8
  float y; // 少数型の変数yを定義(右上)
9
9
  float ax; // 少数型の変数axを定義(右)

1

編集途中のものが上がってしまった

2019/11/23 08:05

投稿

TN8001
TN8001

スコア10111

answer CHANGED
@@ -151,16 +151,15 @@
151
151
  以下余談
152
152
  ---
153
153
 
154
- その際の手順(というか思考?)を書き出しました。参考になれば幸いです。
154
+ その際の手順を書き出しました。参考になれば幸いです。
155
+ 手順間で適宣実行し間違いがないか確認しています。
155
156
  1. x,y等の数値を変更する部分が、行数が多く見通しが悪いのでexpand関数に切り出した
156
157
  2. expand関数と反対の動きをする関数が必要と考え、符号を逆にしたcontract関数を作った
157
158
  3. 今伸びているのか縮んでいるのかの状態を表す、boolean型変数isExpandを作った
158
159
  4. isExpandの状態によって、expandかcontractどちらかを呼び出すようにした
159
- 5. 当然伸びっぱなしになるので、最大に伸びたら(とりあえず100<xとした)`isExpand=falseとして、縮みモードへ移行するif文を書いた
160
+ 5. 当然伸びっぱなしになるので、最大に伸びたら(とりあえず`100<x`とした)`isExpand=false`として、縮みモードへ移行するif文を書いた
160
- 6. 今度は縮み過ぎて変になったので、最小に縮んだら(とりあえずx<0とした)isExpand=true として、伸びるモードへ移行するif文を書いた
161
+ 6. 今度は縮み過ぎたので、最小に縮んだら(とりあえず`x<0`とした)`isExpand=true`として、伸びるモードへ移行するif文を書いた
161
- 7. 5.6.の時以外にランダムに向きを逆にするために、random関数でたまにisExpand=!isExpandになるようにした
162
+ 7. 5.6.の時以外にランダムに向きを逆にするために、random関数でたまに`isExpand=!isExpand`になるようにした
162
163
  8. たまにが良い感じになるように、random関数の数字を調整した
163
- 9. 緑の跡が残っちゃうので、background(255)で消した
164
+ 9. 緑の跡が残ので、`background(255)`で消した
164
- 10. もう少し縮んでほしい気がしたので、変になるギリギリのx<-50に調整した
165
+ 10. もう少し縮んでほしい気がしたので、変になるギリギリの`x<-50`に調整した
165
-
166
- 手順間で適宣実行し間違いがないか確認しています。