回答編集履歴
4
見直しキャンペーン中
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不具合により再編集
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
processingは詳しくないのですが、アメーバのインパクトが
|
1
|
+
processingは詳しくないのですが、アメーバのインパクトが凄かったのでやってみました。(これってJavaですよね?)
|
2
2
|
|
3
3
|
ランダムはピクピクしすぎたり、なかなか変化しなかったりで難しいですね。改善の余地がありそうです(最低何フレームは向きを変えない等)
|
4
4
|
|
2
コードハイライト名変更
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
```
|
11
|
+
```Processing
|
12
12
|
|
13
13
|
float x; // 少数型の変数xを定義(右上)
|
14
14
|
|
1
編集途中のものが上がってしまった
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. 今度は縮み過ぎ
|
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. 緑の跡が残
|
327
|
+
9. 緑の跡が残るので、`background(255)`で消した
|
326
|
-
|
328
|
+
|
327
|
-
10. もう少し縮んでほしい気がしたので、変になるギリギリのx<-50に調整した
|
329
|
+
10. もう少し縮んでほしい気がしたので、変になるギリギリの`x<-50`に調整した
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
手順間で適宣実行し間違いがないか確認しています。
|