1

今、私はチタンで立っている人や動いている人をテストするアプリを作りたいと思っています.私は加速度計を使用し、x、y、zの3軸で加速度を操作しました..その問題をテストするために式を使用する必要があります..!

4

2 に答える 2

1

まず、 2 の累乗を意味し、平方根accel = sqrt(accel_x^2 + accel_y^2 + accel_z^2)^2意味する式によって、移動方向に依存しないスカラー加速度を取得します。その後、ローパス フィルターを適用してランダム ノイズを除去します。これは良いアルゴリズムであり、それを使用するのは良いアプローチです。これで、フィルタリングされた加速度が特定のしきい値より大きいかどうかを確認できます (感度はこのしきい値に依存します)。幸運を!sqrtalpha=0.8

于 2012-07-11T11:12:54.193 に答える
1

別のオプションは、GPS を使用することです。

var win = Ti.UI.createWindow({ backgroundColor: 'white' });

// WARNING: This will only work well outside, where the phone can get a good GPS signal.
var label = Ti.UI.createLabel({ text: 'Traveled 0 ft' });
win.add(label);

// Set up the geolocation code
Ti.Geolocation.accuracy = Ti.Geolocation.ACCURACY_BEST;
Ti.Geolocation.distanceFilter = 0.1;
Ti.Geolocation.purpose = 'To track how far you have traveled!';
var lastLocation = null, totalFtTraveled = 0;

/**
 * This function is called by the phone every time we have new geolocation data. It writes out where the user currently is.
 * @param e An argument given to us by the phone with information such as accuracy, latitude, and longitude.
 */
function reportPosition(e) {
    if (!e.success || e.error) {
        label.text = 'error: ' + JSON.stringify(e.error);
    }
    else {
        if (lastLocation != null) {
            var lat1 = lastLocation.latitude, lon1 = lastLocation.longitude;
            var lat2 = e.coords.latitude, lon2 = e.coords.longitude;
            var kmTraveled = 3963.0 * Math.acos(
                Math.sin(lat1 / 57.2958) * Math.sin(lat2 / 57.2958)
                    + Math.cos(lat1 / 57.2958) * Math.cos(lat2 / 57.2958)
                    * Math.cos(lon2 / 57.2958 - lon1 / 57.2958)
            );
            var ftTraveled = kmTraveled * 3280.8399;
            totalFtTraveled += ftTraveled;
            label.text = 'Traveled ' + totalFtTraveled + 'ft';
        }
        lastLocation = e.coords;
    }
}

// This will get the location right now, and will get the phone ready to listen for the user's current location.
Ti.Geolocation.getCurrentPosition(reportPosition);
// And this fires whenever the "distance filter" is surpassed -- with a filter of 1, this happens every 1 meter or so.
Ti.Geolocation.addEventListener('location', reportPosition);

var reset = Ti.UI.createButton({ title: 'Reset', bottom: 10, height: 50, width: 200 });
reset.addEventListener('click', function() {
    totalFtTraveled = 0;
    label.text = 'Traveled 0ft';
});
win.add(reset);

win.open();
于 2012-07-11T15:01:25.810 に答える