回答編集履歴
3
こうのほうが意図が明確か?
test
CHANGED
@@ -41,7 +41,7 @@
|
|
41
41
|
void draw() {
|
42
42
|
//background(255); // 残像残す
|
43
43
|
|
44
|
-
float y3 = 0;
|
44
|
+
float y3 = 200; // 高さ初期位置
|
45
45
|
|
46
46
|
if (F) {
|
47
47
|
t += 0.01;
|
@@ -53,7 +53,7 @@
|
|
53
53
|
y2 -= v0 - g * t;
|
54
54
|
|
55
55
|
// 公式で今の高さを計算する(が、mだと小さすぎるのと↑と合わせるために100倍
|
56
|
-
y3 = (v0 * t - g / 2 * t * t) * 100;
|
56
|
+
y3 -= (v0 * t - g / 2 * t * t) * 100;
|
57
57
|
}
|
58
58
|
|
59
59
|
//if (t >= 1) {
|
@@ -66,11 +66,11 @@
|
|
66
66
|
translate(t * 100, 0); // わかりやすくするため全体を右に移動
|
67
67
|
circle(100, y1, 50); // オリジナル
|
68
68
|
|
69
|
-
translate(200, 0);
|
69
|
+
translate(200, 0); //
|
70
70
|
circle(100, y2, 50); // 改良
|
71
71
|
|
72
72
|
translate(200, 0);
|
73
|
-
circle(100,
|
73
|
+
circle(100, y3, 50); // 高さ計算
|
74
74
|
}
|
75
75
|
|
76
76
|
void mousePressed() {
|
2
比較動画
test
CHANGED
@@ -20,3 +20,65 @@
|
|
20
20
|
[abs() / Reference / Processing.org](https://processing.org/reference/abs_.html)
|
21
21
|
* (その変数は)`float`を使わない
|
22
22
|
`t`は整数(`int`)にして1ずつ足していき、使うところで`t / 100.0`する。
|
23
|
+
|
24
|
+
---
|
25
|
+
|
26
|
+
数学苦手だけどこういうことでいいんかな??
|
27
|
+
```Processing
|
28
|
+
final float g = 9.8; // 重力
|
29
|
+
final float v0 = 4.9; // 初速
|
30
|
+
float y1 = 200; // オリジナルy座標
|
31
|
+
float y2 = 200; // 改良y座標
|
32
|
+
float t; // 時間
|
33
|
+
boolean F; // ジャンプ中フラグ
|
34
|
+
|
35
|
+
void setup() {
|
36
|
+
size(700, 300);
|
37
|
+
frameRate(100);
|
38
|
+
background(255);
|
39
|
+
}
|
40
|
+
|
41
|
+
void draw() {
|
42
|
+
//background(255); // 残像残す
|
43
|
+
|
44
|
+
float y3 = 0;
|
45
|
+
|
46
|
+
if (F) {
|
47
|
+
t += 0.01;
|
48
|
+
|
49
|
+
// 時刻tにおける高さを減算していったらおかしなことに
|
50
|
+
y1 -= v0 * t - g / 2 * t * t;
|
51
|
+
|
52
|
+
// 減算していくなら速度のほう(ただしm/sなわけだから本来/100すべき?
|
53
|
+
y2 -= v0 - g * t;
|
54
|
+
|
55
|
+
// 公式で今の高さを計算する(が、mだと小さすぎるのと↑と合わせるために100倍
|
56
|
+
y3 = (v0 * t - g / 2 * t * t) * 100;
|
57
|
+
}
|
58
|
+
|
59
|
+
//if (t >= 1) {
|
60
|
+
// F = false;
|
61
|
+
//}
|
62
|
+
if (abs(t - 1) < 0.001) {
|
63
|
+
F = false;
|
64
|
+
}
|
65
|
+
|
66
|
+
translate(t * 100, 0); // わかりやすくするため全体を右に移動
|
67
|
+
circle(100, y1, 50); // オリジナル
|
68
|
+
|
69
|
+
translate(200, 0);
|
70
|
+
circle(100, y2, 50); // 改良
|
71
|
+
|
72
|
+
translate(200, 0);
|
73
|
+
circle(100, 200 - y3, 50); // 高さ
|
74
|
+
}
|
75
|
+
|
76
|
+
void mousePressed() {
|
77
|
+
background(255);
|
78
|
+
F = true;
|
79
|
+
t = 0;
|
80
|
+
y1 = 200;
|
81
|
+
y2 = 200;
|
82
|
+
}
|
83
|
+
```
|
84
|
+
![アプリ動画](https://ddjkaamml8q8x.cloudfront.net/questions/2024-06-03/46e32f63-5849-42a1-bd6e-ac45bd2ae1fc.gif)
|
1
対称に
test
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
* `==`で比較しない
|
17
17
|
`if (t >= 1)`に変えてもいいなら話が早いです。
|
18
18
|
* 同じと言っていいほど差が小さいかを判断する
|
19
|
-
`if (abs(
|
19
|
+
`if (abs(t - 1) < 0.001)`のようにする(もっと小さい数字でいいけど)
|
20
20
|
[abs() / Reference / Processing.org](https://processing.org/reference/abs_.html)
|
21
21
|
* (その変数は)`float`を使わない
|
22
22
|
`t`は整数(`int`)にして1ずつ足していき、使うところで`t / 100.0`する。
|