回答編集履歴

3

こうのほうが意図が明確か?

2024/06/03 14:38

投稿

TN8001
TN8001

スコア9676

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, 200 - y3, 50); // 高さ
73
+ circle(100, y3, 50); // 高さ計算
74
74
  }
75
75
 
76
76
  void mousePressed() {

2

比較動画

2024/06/03 14:30

投稿

TN8001
TN8001

スコア9676

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

対称に

2024/06/02 13:04

投稿

TN8001
TN8001

スコア9676

test CHANGED
@@ -16,7 +16,7 @@
16
16
  * `==`で比較しない
17
17
  `if (t >= 1)`に変えてもいいなら話が早いです。
18
18
  * 同じと言っていいほど差が小さいかを判断する
19
- `if (abs(1 - t) < 0.001)`のようにする(もっと小さい数字でいいけど)
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`する。