C++编程求加速度,哪里错了!程序如下:

C++编程求加速度,哪里错了!程序如下:,第1张

void main()

{

int n,i

float a,T=0.02,S[100],sum1=0,sum2=0

printf("请输入n(101>n>1))")

scanf("%d",&n)

for(i=0i<ni++)

{

printf("请输入第=%d",i+1)

printf("段位移")

scanf("%f",&S[i])

}

if(n%2==0)

{

for(i=0i<n/2i++)

{

sum1=sum1+S[i]

}

for(i=n/2i<ni++)

{

sum2=sum2+S[i]

}

}

a=(sum2-sum1)*4/n/n/T/T

printf("加速度=%f",a)

else //<---else 和if不配对啊。。{}把上面两句也应该括进来。要么不用这两句

{

for(i=1i<(n+1)/2i++)

{

sum1=sum1+S[i]

}

for(i=(n+1)/2i<ni++)

{

sum2=sum2+S[i]

}

}

a=(sum2-sum1)*4/n/n/T/T

printf("加速度=%f",a)

}

我是用采集到的加速度信号来做两次积分得到位移信号,由于采集到的加速度信号有直流偏移量,所以用了detrend命令做去趋势处理。为了检验代码是否正确,我用了一个标准的正弦函数来验证。代码如下:

t=(0:1:10240-1)/2000

a=sin(5*t) %标准的正弦函数,准备对其进行两次积分处理

fs=2000

N=10240

za=detrend(a) %对采集到的加速度信号去趋势处理(因为采集到的加速度信号有直流偏移量)

v=cumtrapz(t,za)%对加速度信号积分得速度信号

zv=detrend(v) %对速度信号去趋势处理

l=cumtrapz(t,zv)%对速度信号积分得到位移信号

zl=detrend(l) %对位移信号去趋势处理

figure(1)

subplot(3,1,1)

plot(t,za)

title('加速度信号')

subplot(3,1,2)

plot(t,zv)

title('速度信号')

subplot(3,1,3)

plot(t,zl)

title('位移信号')

小程序加速度计api一共就三个方法

1、wx.onAccelerometerChange(CALLBACK) 监听加速度数据,频率:5次/秒,接口调用后会自动开始监听,每调用一次就会注册一个。

2、wx.startAccelerometer(OBJECT) 开始监听方法

坑来了。。。没错就是第三方法

3、wx.stopAccelerometer(OBJECT) 停止监听,这个方法是停止了监听,再晃动手机不会走回调方法了, 但是它并不移除监听

那么问题来了,在某个页面每调用一次第一个api它就会注册一个监听,第三个api并不能移除掉监听,导致你再次开启的时候就会有多个回调方法在同时进行。就会出现问题。那么怎么避免呢?

解决方法:在微信小程序启动的时候就调用监听方法,在回到方法中通过pages能够获取到当前的页面,在当前页面调用你想回调的方法就好了。

onLaunch: function () {

    wx.onAccelerometerChange((e) =>{

       var pages = getCurrentPages()var currentPage = pages[pages.length - 1]

       if (currentPage.onAccelerometerChange) {

          currentPage.onAccelerometerChange(e)

       }

    })

}

之后就可以在当前页面中的onAccelerometerChange(e)方法做你想做的事情了


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12118895.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存