看板 Physics 關於我們 聯絡資訊
※ 引述《kewang (617公車)》之銘言: : ※ 引述《kewang (617公車)》之銘言: : : 我查了很多資料,大約有下列幾種算法 : : 1. Inertial navigation system:看了wikipedia後,還是找不到相關的計算公式 : : 2. d = ∫∫a dt:看起來是一個很合理的公式,可是我要如何去定義這兩次積分的上下 : : 限呢,因為a會一直變,所以t要怎麼定義會比較好? : : 3. d = V0*t + 0.5*a*t^2:跟上面第2點差不多的問題 : : -- : : ◆ From: 118.167.141.66 : : → iidkasr:如果可以精確的定義兩個時間點 在這段時間內的d都能求吧 05/07 22:58 : : 推 ckaha:如果加速度器夠準 兩次積分是沒問題 但MEMS的精準度... 05/08 10:33 : : → ckaha:其實一次積分就已經讓速度會有一個定量的偏移了 05/08 10:34 : 我今天把程式實作出來了,但是數據一直不正確 : distance = 0 : startTime = Time.Now() : while : startTime = endTime : endTime = Time.Now() : distance += 0.5 * x * (endTime / 10E9 - startTime / 10E9)^2 * 100 : loop 這明顯錯了呀,你的速度沒有隨時間增加 我不知道你用的是什麼language,假定你的x是量到的加速度 應該最少要改成類似這樣 distance = 0 velocity = 0 startTime = Time.Now() while startTime = endTime endTime = Time.Now() distance += ( velocity*(endTime / 10E9 - startTime / 10E9) + 0.5 * x * (endTime / 10E9 - startTime / 10E9)^2 * 100 ) velocity += (endTime / 10E9 - startTime / 10E9)*x*100 loop : 我猜主要是t的這個算法,還有startTime跟endTime的取值方式好像有問題,所以算出來 : 非常奇怪。(Time的單位為ns) : 不知道有板友可以幫忙看一下我的公式是否有誤,感恩 : 另外,上面說的積分公式,我還是不清楚要怎麼取值,有板友也可以幫忙一下嗎?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.57.65.131
kewang:沒錯沒錯,我忘了把V0*t加上去了,因為我誤以為初始速度為0 05/08 22:24
kewang:之後的速度也為0,物理真的應該重修才對 囧rz 05/08 22:24