回答編集履歴

4

見直しキャンペーン中

2023/07/17 04:58

投稿

TN8001
TN8001

スコア9862

test CHANGED
@@ -1,329 +1,168 @@
1
1
  processingは詳しくないのですが、アメーバのインパクトが凄かったのでやってみました。(これってJavaですよね?)
2
-
3
2
  ランダムはピクピクしすぎたり、なかなか変化しなかったりで難しいですね。改善の余地がありそうです(最低何フレームは向きを変えない等)
4
-
5
-
6
3
 
7
4
  つい面白くて答えになってしまいましたが、ヒントでいい場合はコードの下の余談から見てください。
8
5
 
9
-
10
-
11
6
  ```Processing
12
-
13
7
  float x; // 少数型の変数xを定義(右上)
14
-
15
8
  float y; // 少数型の変数yを定義(右上)
16
-
17
9
  float ax; // 少数型の変数axを定義(右)
18
-
19
10
  float bx; // 少数型の変数bxを定義(右下)
20
-
21
11
  float by; // 少数型の変数byを定義(右下)
22
-
23
12
  float cy; // 少数型の変数cyを定義(下)
24
-
25
13
  float dx; // 少数型の変数dxを定義(左下)
26
-
27
14
  float dy; // 少数型の変数dyを定義(左下)
28
-
29
15
  float ex; // 少数型の変数exを定義(左左下)
30
-
31
16
  float ey; // 少数型の変数eyを定義(左左下)
32
-
33
17
  float fx; // 少数型の変数fxを定義(左左上)
34
-
35
18
  float fy; // 少数型の変数fyを定義(左左上)
36
-
37
19
  float gy; // 少数型の変数gyを定義(上)
38
-
39
-
40
20
 
41
21
  boolean isExpand = true; // boolean型の変数isExpandを定義&初期化(trueで今伸びている)
42
22
 
43
-
44
-
45
23
  void setup() {
46
-
47
24
  size(500, 500);
48
-
49
25
  background(#ffffff);
50
-
51
26
  }
52
27
 
53
-
54
-
55
28
  void expand() { // アメーバの角を伸ばす
56
-
57
29
  x += 1; // 毎フレームでアメーバの角のx座標を1ずつ増やす
58
-
59
30
  y -= 1; // 毎フレームでアメーバの角のy座標を1ずつ減らす
60
-
61
-
62
31
 
63
32
  ax += 1; // 毎フレームでアメーバのa角のx座標を1ずつ増やす
64
33
 
65
-
66
-
67
34
  bx += 1; // 毎フレームでアメーバのb角のx座標を1ずつ増やす
68
-
69
35
  by += 1; // 毎フレームでアメーバのb角のy座標を1ずつ増やす
70
-
71
-
72
36
 
73
37
  cy += 1; // 毎フレームでアメーバのc角のy座標を1ずつ増やす
74
38
 
75
-
76
-
77
39
  dx -= 0.5; // 毎フレームでアメーバのd角のx座標を1ずつ減らす
78
-
79
40
  dy += 1; // 毎フレームでアメーバのd角のy座標を1ずつ増やす
80
41
 
81
-
82
-
83
42
  ex -= 1; // 毎フレームでアメーバのe角のx座標を1ずつ減らす
84
-
85
43
  ey += 0.25; // 毎フレームでアメーバのe角のy座標を0.25ずつ増やす
86
44
 
87
-
88
-
89
45
  fx -= 1; // 毎フレームでアメーバのf角のx座標を1ずつ減らす
90
-
91
46
  fy -= 0.25; // 毎フレームでアメーバのf角のy座標を0.25ずつ減らす
92
47
 
93
-
94
-
95
48
  gy -= 1; // 毎フレームでアメーバのg角のy座標を1ずつ減らす
96
-
97
49
  }
98
50
 
99
-
100
-
101
51
  void contract() { // アメーバの角を縮める
102
-
103
52
  x -= 1;
104
-
105
53
  y += 1;
106
-
107
-
108
54
 
109
55
  ax -= 1;
110
56
 
111
-
112
-
113
57
  bx -= 1;
114
-
115
58
  by -= 1;
116
-
117
-
118
59
 
119
60
  cy -= 1;
120
61
 
121
-
122
-
123
62
  dx += 0.5;
124
-
125
63
  dy -= 1;
126
64
 
127
-
128
-
129
65
  ex += 1;
130
-
131
66
  ey -= 0.25;
132
67
 
133
-
134
-
135
68
  fx += 1;
136
-
137
69
  fy += 0.25;
138
70
 
139
-
140
-
141
71
  gy += 1;
142
-
143
72
  }
144
73
 
145
-
146
-
147
74
  void draw() {
148
-
149
75
  background(255);
150
76
 
151
-
152
-
153
77
  strokeWeight(4);
154
-
155
78
  stroke(0, 200, 0);
156
-
157
79
  fill(0, 255, 0);
158
80
 
159
-
160
-
161
81
  if (100 < x) { // 最大に伸びたら
162
-
163
82
  isExpand = false;
164
-
165
83
  } else if (x < -50) { // 最小に縮んだら
166
-
167
84
  isExpand = true;
168
-
169
85
  } else {
170
-
171
86
  if (random(40) < 1) { // たまに向きを逆にする
172
-
173
87
  isExpand = !isExpand;
174
-
175
88
  }
176
-
177
89
  }
178
-
179
-
180
90
 
181
91
  beginShape(); // アメーバの形
182
92
 
183
-
184
-
185
93
  if (isExpand) {
186
-
187
94
  expand(); // アメーバの角を伸ばす
188
-
189
95
  } else {
190
-
191
96
  contract(); // アメーバの角を縮める
192
-
193
97
  }
194
-
195
-
196
98
 
197
99
  vertex(300, 80);
198
100
 
199
-
200
-
201
101
  bezierVertex(240, 10, 220, gy + 20, 200, 80); // g頂点
202
-
203
102
  bezierVertex(200, 80, 200, 120, 130, 120); // 凹み
204
103
 
205
-
206
-
207
104
  bezierVertex(130, 120, fx + 20, fy + 120, 100, 180); // f頂点
208
-
209
105
  bezierVertex(100, 180, 180, 220, 90, 280); // 凹み
210
106
 
211
-
212
-
213
107
  bezierVertex(90, 280, -10 + ex, ey + 320, 120, 320); // e頂点
214
-
215
108
  bezierVertex(120, 320, 170, 330, 155, 360); // 凹み
216
109
 
217
-
218
-
219
110
  bezierVertex(155, 360, dx + 100, dy + 600, 200, 400); // d頂点
220
-
221
111
  bezierVertex(200, 400, 225, 350, 250, 400); // 凹み
222
112
 
223
-
224
-
225
113
  bezierVertex(250, 400, 290, cy + 500, 320, 380); // c頂点
226
-
227
114
  bezierVertex(320, 380, 330, 300, 360, 340); // 凹み
228
115
 
229
-
230
-
231
116
  bezierVertex(360, 340, bx + 450, by + 450, 400, 300); // b頂点
232
-
233
117
  bezierVertex(400, 300, 390, 280, 420, 260); // 凹み
234
118
 
235
-
236
-
237
119
  bezierVertex(420, 260, ax + 580, 220, 420, 200); // a頂点
238
-
239
120
  bezierVertex(420, 200, 380, 180, 420, 130); // 凹み
240
121
 
241
-
242
-
243
122
  bezierVertex(420, 130, x + 500, y + 20, 350, 100); // 頂点
244
-
245
123
  bezierVertex(350, 100, 325, 120, 300, 80); // 凹み
246
-
247
-
248
124
 
249
125
  endShape(); // アメーバの形終わり
250
126
 
251
-
252
-
253
127
  fill(255, 255, 255);
254
-
255
128
  ellipse(200, 100, 100, 100); // 左目の外側
256
-
257
129
  ellipse(300, 100, 100, 100); // 右目の外側
258
130
 
259
131
 
260
-
261
-
262
-
263
132
  fill(0, 200, 0);
264
-
265
133
  ellipse(200, 100, 50, 50); // 左目の黒目
266
-
267
134
  ellipse(300, 100, 50, 50); // 右目の黒目
268
-
269
-
270
-
271
135
 
272
136
 
273
137
  beginShape(); // 核、口の形
274
138
 
275
-
276
-
277
139
  vertex(220, 160);
278
140
 
279
-
280
-
281
141
  bezierVertex(240, 170, 260, 170, 280, 160); // 口の凹み
282
-
283
142
  bezierVertex(280, 160, 300, 150, 320, 160); // 右の盛り上がり
284
-
285
143
  bezierVertex(320, 160, 340, 170, 320, 190); // 右膨らみ
286
-
287
144
  bezierVertex(320, 190, 260, 230, 185, 190); // 下の膨らみ
288
-
289
145
  bezierVertex(185, 190, 170, 180, 185, 165); // 左膨らみ
290
-
291
146
  bezierVertex(185, 165, 200, 150, 220, 160); // 左の盛り上がり
292
147
 
293
-
294
-
295
148
  endShape();
296
-
297
149
  }
298
-
299
150
  ```
300
-
301
- 以下余談
151
+ ![アプリ動画](https://ddjkaamml8q8x.cloudfront.net/questions/2023-07-17/bf027d75-b590-479a-91d8-4b9274739bbb.gif)
302
152
 
303
153
  ---
304
154
 
305
-
155
+ ### 余談
306
156
 
307
157
  その際の手順を書き出しました。参考になれば幸いです。
308
-
309
158
  手順間で適宣実行し間違いがないか確認しています。
310
-
311
159
  1. x,y等の数値を変更する部分が、行数が多く見通しが悪いのでexpand関数に切り出した
312
-
313
160
  2. expand関数と反対の動きをする関数が必要と考え、符号を逆にしたcontract関数を作った
314
-
315
161
  3. 今伸びているのか縮んでいるのかの状態を表す、boolean型変数isExpandを作った
316
-
317
162
  4. isExpandの状態によって、expandかcontractどちらかを呼び出すようにした
318
-
319
163
  5. 当然伸びっぱなしになるので、最大に伸びたら(とりあえず`100<x`とした)`isExpand=false`として、縮みモードへ移行するif文を書いた
320
-
321
164
  6. 今度は縮み過ぎたので、最小に縮んだら(とりあえず`x<0`とした)`isExpand=true`として、伸びるモードへ移行するif文を書いた
322
-
323
165
  7. 5.6.の時以外にランダムに向きを逆にするために、random関数でたまに`isExpand=!isExpand`になるようにした
324
-
325
166
  8. たまにが良い感じになるように、random関数の数字を調整した
326
-
327
167
  9. 緑の跡が残るので、`background(255)`で消した
328
-
329
168
  10. もう少し縮んでほしい気がしたので、変になるギリギリの`x<-50`に調整した

3

teratail不具合により再編集

2019/11/25 07:59

投稿

TN8001
TN8001

スコア9862

test 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

スコア9862

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- ```java
11
+ ```Processing
12
12
 
13
13
  float x; // 少数型の変数xを定義(右上)
14
14
 

1

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

2019/11/23 08:05

投稿

TN8001
TN8001

スコア9862

test CHANGED
@@ -304,7 +304,9 @@
304
304
 
305
305
 
306
306
 
307
- その際の手順(というか思考?)を書き出しました。参考になれば幸いです。
307
+ その際の手順を書き出しました。参考になれば幸いです。
308
+
309
+ 手順間で適宣実行し間違いがないか確認しています。
308
310
 
309
311
  1. x,y等の数値を変更する部分が、行数が多く見通しが悪いのでexpand関数に切り出した
310
312
 
@@ -314,18 +316,14 @@
314
316
 
315
317
  4. isExpandの状態によって、expandかcontractどちらかを呼び出すようにした
316
318
 
317
- 5. 当然伸びっぱなしになるので、最大に伸びたら(とりあえず100<xとした)`isExpand=falseとして、縮みモードへ移行するif文を書いた
319
+ 5. 当然伸びっぱなしになるので、最大に伸びたら(とりあえず`100<x`とした)`isExpand=false`として、縮みモードへ移行するif文を書いた
318
-
320
+
319
- 6. 今度は縮み過ぎて変になったので、最小に縮んだら(とりあえずx<0とした)isExpand=true として、伸びるモードへ移行するif文を書いた
321
+ 6. 今度は縮み過ぎたので、最小に縮んだら(とりあえず`x<0`とした)`isExpand=true`として、伸びるモードへ移行するif文を書いた
320
-
322
+
321
- 7. 5.6.の時以外にランダムに向きを逆にするために、random関数でたまにisExpand=!isExpandになるようにした
323
+ 7. 5.6.の時以外にランダムに向きを逆にするために、random関数でたまに`isExpand=!isExpand`になるようにした
322
324
 
323
325
  8. たまにが良い感じになるように、random関数の数字を調整した
324
326
 
325
- 9. 緑の跡が残っちゃうので、background(255)で消した
327
+ 9. 緑の跡が残ので、`background(255)`で消した
326
-
328
+
327
- 10. もう少し縮んでほしい気がしたので、変になるギリギリのx<-50に調整した
329
+ 10. もう少し縮んでほしい気がしたので、変になるギリギリの`x<-50`に調整した
328
-
329
-
330
-
331
- 手順間で適宣実行し間違いがないか確認しています。