質問編集履歴

4

文章の追加

2021/07/29 17:49

投稿

wing
wing

スコア20

test CHANGED
File without changes
test CHANGED
@@ -18,9 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- デバッグしてみた結果、3つある配列ma、ma1,ma2の中身、5つ全部がmaはdistance、ma1はdistance1、ma2はdistance2の値になっていました。同じ値を5回足して5で割っている状態でした。この配列が全部同じdistanceのように更新されていく値を保持するためにはどうすれば良いのでしょうか。
22
-
23
-
21
+ デバッグしてみた結果、3つある配列ma、ma1,ma2の中身、5つ全部がmaはdistance、ma1はdistance1、ma2はdistance2の値になっていました。同じ値を5回足して5で割っている状態でした。この配列が全部同じdistanceのように更新されていく値を保持するためにはどうすれば良いのでしょうか。自分でも調べたり、ほかの変数に格納して、実行してみたのですがうまくは行きませんでした。
24
22
 
25
23
  何度も質問し、それに付き合っていただき誠にありがとうございます。
26
24
 

3

デバッグの結果の追記

2021/07/29 17:49

投稿

wing
wing

スコア20

test CHANGED
File without changes
test CHANGED
@@ -18,6 +18,12 @@
18
18
 
19
19
 
20
20
 
21
+ デバッグしてみた結果、3つある配列ma、ma1,ma2の中身、5つ全部がmaはdistance、ma1はdistance1、ma2はdistance2の値になっていました。同じ値を5回足して5で割っている状態でした。この配列が全部同じdistanceのように更新されていく値を保持するためにはどうすれば良いのでしょうか。
22
+
23
+
24
+
25
+ 何度も質問し、それに付き合っていただき誠にありがとうございます。
26
+
21
27
  ### 該当のソースコード
22
28
 
23
29
 

2

指摘されたソースコードの挿入を行った。

2021/07/29 17:46

投稿

wing
wing

スコア20

test CHANGED
File without changes
test CHANGED
@@ -24,45 +24,329 @@
24
24
 
25
25
  ```C#
26
26
 
27
+ using System.Collections;
28
+
29
+ using System.Collections.Generic;
30
+
31
+ using UnityEngine;
32
+
33
+ using System;
34
+
35
+ using UnityEngine.UI;
36
+
37
+ using Mathd;
38
+
39
+ using System.Linq;
40
+
41
+
42
+
43
+ public class Pointer : MonoBehaviour
44
+
45
+ {
46
+
47
+
48
+
49
+ //入る変数
50
+
51
+ GameObject iBeacon;
52
+
53
+ //取得したscriptが入る変数
54
+
55
+ Test001 script;
56
+
57
+
58
+
59
+ double speed = 2.0f;
60
+
61
+ /*
62
+
63
+ //研究室は縦8.5m、横10.5m
64
+
65
+ //Unityは10倍
66
+
67
+ //iBeacon[B1]の座標
68
+
69
+ Vector3 B1 = new Vector3(-52.5,0,42.5);
70
+
71
+ //iBeacon[B2]の座標
72
+
73
+ Vector3 B2 = new Vector3(52.5, 0, 42.5);
74
+
75
+ //iBeacon[B3]の座標
76
+
77
+ Vector3 B3 = new Vector3(0, 0, -42.5);
78
+
79
+ */
80
+
81
+
82
+
83
+
84
+
85
+ //自宅は縦3m、横3.5m
86
+
87
+ //Unityは10倍
88
+
89
+ //iBeacon[B1]の座標
90
+
91
+ Vector3 B1 = new Vector3d(-15, 0, 17.5);
92
+
93
+ //iBeacon[B2]の座標
94
+
95
+ Vector3 B2 = new Vector3d(15, 0, 17.5);
96
+
97
+ //iBeacon[B3]の座標
98
+
99
+ Vector3 B3 = new Vector3d(0, 0, -17.5);
100
+
101
+
102
+
103
+
104
+
105
+ //RSSI
106
+
107
+ private int RSSI;
108
+
109
+ private int RSSI1;
110
+
111
+ private int RSSI2;
112
+
113
+
114
+
115
+ //TxPower
116
+
117
+ private int TxPower;
118
+
27
- private void iBeaconMath()
119
+ private int TxPower1;
120
+
121
+ private int TxPower2;
122
+
123
+
124
+
125
+ //distance
126
+
127
+ public double distance;
128
+
129
+ public double distance1;
130
+
131
+ public double distance2;
132
+
133
+
134
+
135
+ public static double Pow;
136
+
137
+ double Va, Vb, x, z, y;
138
+
139
+ //int cnt = 5;
140
+
141
+
142
+
143
+ double[] ma = new double[5];
144
+
145
+ //double mat = 0;
146
+
147
+ double[] ma1 = new double[5];
148
+
149
+ double sum1 = 0;
150
+
151
+ //double t1 = 0;
152
+
153
+
154
+
155
+ double[] ma2 = new double[5];
156
+
157
+ double sum2 = 0;
158
+
159
+ //double t2 = 0;
160
+
161
+
162
+
163
+ public Text textUI;
164
+
165
+ public Text textUUI;
166
+
167
+ public Text textUUUI;
168
+
169
+
170
+
171
+ Vector3d Basepoint;
172
+
173
+ public static int count;
174
+
175
+ int a;
176
+
177
+ int b = 2;
178
+
179
+ // Start is called before the first frame update
180
+
181
+ void Start()
28
182
 
29
183
  {
30
184
 
31
-
185
+ iBeacon = GameObject.Find("IBeacon");
186
+
187
+ script = iBeacon.GetComponent<Test001>();
188
+
189
+ count = 0;
190
+
191
+
192
+
193
+ //RSSI持ってくるかも
194
+
195
+ RSSI = script.total;
196
+
197
+ RSSI1 = script.total1;
198
+
199
+ RSSI2 = script.total2;
200
+
201
+
202
+
203
+ TxPower = script.Strength;
204
+
205
+ TxPower1 = script.Strength1;
206
+
207
+ TxPower2 = script.Strength2;
208
+
209
+ a = 1;
210
+
211
+ //iBeaconMath();
212
+
213
+ b = 1;
214
+
215
+
216
+
217
+ //現在地取得かも~~
218
+
219
+ //transform.position = new Vector3d(x, 0.5, z);
220
+
221
+
222
+
223
+ }
224
+
225
+
226
+
227
+ // Update is called once per frame
228
+
229
+ void Update()
230
+
231
+ {
232
+
233
+
234
+
235
+ double step = speed * Time.deltaTime;
236
+
237
+
238
+
239
+ //RSSI持ってくるかも
240
+
241
+ RSSI = script.total;
242
+
243
+ RSSI1 = script.total1;
244
+
245
+ RSSI2 = script.total2;
246
+
247
+
248
+
249
+ TxPower = script.Strength;
250
+
251
+ TxPower1 = script.Strength1;
252
+
253
+ TxPower2 = script.Strength2;
254
+
255
+
256
+
257
+ IBeaconMath();
258
+
259
+ //int c = 1;
260
+
261
+
262
+
263
+ /*
264
+
265
+ Vector3 devicepoint = new Vector3d(x, 0.5, z);
266
+
267
+ if(count == 0)
268
+
269
+ {
270
+
271
+ Basepoint = devicepoint;
272
+
273
+ count = 1;
274
+
275
+ }
276
+
277
+
278
+
279
+ transform.position = Vector3d.MoveTowards(Basepoint, devicepoint, step);
280
+
281
+ double tmpX = x;
282
+
283
+ double tmpZ = z;
284
+
285
+ Basepoint = new Vector3d(tmpX, 0.5, tmpZ);
286
+
287
+ */
288
+
289
+
290
+
291
+ }
292
+
293
+
294
+
295
+ private void IBeaconMath()
296
+
297
+ {
298
+
299
+
300
+
301
+
302
+
303
+ int d = 0;
32
304
 
33
305
  //B1の距離の移動平均
34
306
 
35
307
  distance = Math.Pow(10.0, (TxPower - RSSI) / 20.0);
36
308
 
37
-
309
+ int h = 1;
310
+
311
+
312
+
313
+ int l = 1;
314
+
315
+ double mat = 0;
38
316
 
39
317
  for(int j=0; j<5; j++)
40
318
 
41
319
  {
42
320
 
321
+
322
+
43
323
  mat += ma[j];
44
324
 
45
325
  }
46
326
 
47
-
327
+ int e = 1;
48
328
 
49
329
  mat /= 5;
50
330
 
331
+
332
+
51
-
333
+ int f = 1;
52
-
53
-
54
-
334
+
55
- for (int j=4; j>0; j--)
335
+ for (int j=1; j<5; j++)
56
-
336
+
57
- {
337
+ {
338
+
339
+ //mat = 0;
58
340
 
59
341
  ma[j] = ma[j - 1];
60
342
 
343
+
344
+
61
345
  }
62
346
 
63
347
  ma[0] = distance;
64
348
 
65
-
349
+ int g = 1;
66
350
 
67
351
 
68
352
 
@@ -78,7 +362,7 @@
78
362
 
79
363
  distance1 = Math.Pow(10.0, (TxPower1 - RSSI1) / 20.0);
80
364
 
81
- sum1=0;
365
+ //sum1=0;
82
366
 
83
367
  for (int i = 0; i < 5; i++)
84
368
 
@@ -92,18 +376,10 @@
92
376
 
93
377
 
94
378
 
95
-
96
-
97
379
  sum1 /= 5;
98
380
 
99
381
 
100
382
 
101
- //sum1 /= 5;
102
-
103
-
104
-
105
-
106
-
107
383
  for (int i=4; i>0; i--)
108
384
 
109
385
  {
@@ -124,35 +400,21 @@
124
400
 
125
401
  distance2 = Math.Pow(10.0, (TxPower2 - RSSI2) / 20.0);
126
402
 
403
+ //sum2 = 0;
404
+
127
405
  for (int k = 0; k < 5; k++)
128
406
 
129
407
  {
130
408
 
131
- t2 += 1;
132
-
133
409
  sum2 += ma2[k];
134
410
 
135
411
  }
136
412
 
137
- if (t < 5)
413
+
138
-
139
- {
140
-
141
- sum2 = distance2;
142
-
143
- }
144
-
145
-
146
-
147
- else
148
-
149
- {
150
414
 
151
415
  sum2 /= 5;
152
416
 
153
- }
417
+
154
-
155
-
156
418
 
157
419
  //sum2 /= 5;
158
420
 
@@ -172,6 +434,40 @@
172
434
 
173
435
  textUUI.text = "B1とのma距離" + mat.ToString() + "m" + "\nB2とのma距離" + sum1.ToString() + "m" + "\nB3とのma距離" + sum2.ToString() + "m";
174
436
 
437
+ textUUUI.text = d.ToString() + h.ToString() + l.ToString() + e.ToString() + f.ToString() + g.ToString();
438
+
439
+
440
+
441
+ /*
442
+
443
+ Va = ((Math.Pow(t1, 2) - Math.Pow(t2, 2)) - (Math.Pow(B2.x, 2) - Math.Pow(B3.x, 2)) - (Math.Pow(B2.z, 2) - Math.Pow(B3.z, 2))) / 2;
444
+
445
+ Vb = ((Math.Pow(t1, 2) - Math.Pow(t, 2)) - (Math.Pow(B2.x, 2) - Math.Pow(B1.x, 2)) - (Math.Pow(B2.z, 2) - Math.Pow(B1.z, 2))) / 2;
446
+
447
+
448
+
449
+ z = (Vb * (B3.x - B2.x) - Va * (B1.x - B2.x)) / ((B1.z - B2.z) * (B3.x - B2.x) - (B3.z - B2.z) * (B1.x - B2.x));
450
+
451
+ x = (Va - z * (B3.z - B2.z)) / (B3.x - B2.x);
452
+
453
+ */
454
+
455
+
456
+
457
+
458
+
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+ }
470
+
175
471
 
176
472
 
177
473
  ```

1

説明の追加

2021/07/21 10:29

投稿

wing
wing

スコア20

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,10 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
3
  移動平均を行うプログラムの制作して、実行させると誤差が出てしまうため、誤差をなくせるようにしたいこととそのプログラムの中で変数を宣言するとおかしな動作をしてしまうため解決したいです。
4
+
5
+ なお、移動平均の1~4回はdistanceの値をそのまま表示させたいと考えています。
6
+
7
+ 5回目以降は移動平均を行いたいと考えており、0.12589...、0.14125…、0.11220…、0.1、0.112589と5つのdistanceの値をとり平均をと表示させ、データをずらして再計算したいと考えております。
4
8
 
5
9
 
6
10
 
@@ -8,13 +12,7 @@
8
12
 
9
13
  ### 発生している問題・エラーメッセージ
10
14
 
11
-
12
-
13
-
14
-
15
- 誤差は16桁の数字の移動平均をとっている。
16
-
17
- 0.1584…のような値が連続して表示されているに、移動平均にかけると0.1981...となます。決して前後に飛びぬけている値があるとかではないです
15
+ 「前提・実現したいこと」で書いたような値の移動平均っています。5回目以降の最新のデータが0125895の時は、0,1573656…となってしいます。正しくは、0.125895…に近い値が表示されるようにしたいです。決して前後に飛びぬけている値があるとかではないです
18
16
 
19
17
  下記のソースのB2の距離の移動平均のソースの部分に「sum1=0」と値の合計を0にしている部分があるのですが、これを記載してしまうと、移動平均が実行されず直前の「distance2」の値がそのまま表示されてしまいます。
20
18