iOS:根据加速度计输出准确确定碰撞能量

2024-01-09

我正在创建一个音叉应用程序,您可以将 iPhone 轻拍到另一只手的手掌上,或者轻拍到柔软的表面上,以设置音叉的声音。

所以我想检测每个“凹凸”中包含的能量

(编辑:删除了大量的gumpf)

谁能帮我破解这个吗?


感谢 freenode 的 #math 频道上的一位向导(感谢 Igor),我有了一个非常好的工作解决方案。

您使用标准方法以可能的最大频率 (100Hz) 触发回调,其中将包含瞬时加速度 x、y、z 值。

我会让代码自己说话,好的代码应该总是自己说话。

typedef 
struct {
    double x,y,z;
}
vec_d3;

#define RECENT_COUNT 10

#define SMOOTH_IP( x, x_new, fac )  x  =  fac * x  +  ( 1. - fac ) * x_new

- (void) accelerometer: (UIAccelerometer *) accelerometer 
          didAccelerate: (UIAcceleration *) acceleration 
{
    // smooth incoming acceleration values
    static vec_d3 smooth = { DOUBLE_EMPTY, 0, 0 };

    {
        if ( smooth.x == DOUBLE_EMPTY )
        {
            smooth.x = acceleration.x;
            smooth.y = acceleration.y;
            smooth.z = acceleration.z;

            return;
        }

        SMOOTH_IP( smooth.x, acceleration.x, 0.9 );
        SMOOTH_IP( smooth.y, acceleration.y, 0.9 );
        SMOOTH_IP( smooth.z, acceleration.z, 0.9 );
    }

    // keep track of last k smoothed acceleration values
    static vec_d3 recent[ RECENT_COUNT ];
    {
        static int ptr = 0;
        static BOOL gotEnoughData = NO;

        recent[ ptr ] = smooth;

        ptr++;
        if ( ptr == RECENT_COUNT )
        {
            ptr = 0;
            gotEnoughData = YES;
        }

        // return if array not filled yet
        if ( ! gotEnoughData )
            return;
    }

    // get the resultant variation in acceleration over the whole array
    double variation;
    {
        vec_d3 min = smooth, max = smooth;

        for ( int i=0; i < RECENT_COUNT; i++ )
        {
            min.x = MIN( min.x, recent[ i ].x );
            min.y = MIN( min.y, recent[ i ].y );
            min.z = MIN( min.z, recent[ i ].z );

            max.x = MAX( max.x, recent[ i ].x );
            max.y = MAX( max.y, recent[ i ].y );
            max.z = MAX( max.z, recent[ i ].z );
        }

        vec_d3 V = (vec_d3) 
        {
            .x = max.x - min.x,
            .y = max.y - min.y,
            .z = max.z - min.z
        };

        variation = sqrt(
                         V.x * V.x  +
                         V.y * V.y  +
                         V.z * V.z
                         );
    }

    // smooth it
    static double var_smoothed = DOUBLE_EMPTY;
    {
        if ( var_smoothed == DOUBLE_EMPTY )
        {
            var_smoothed = variation;
            return;
        }
        SMOOTH_IP( var_smoothed, variation, 0.9 );
    }


    // see if it's just passed a peak
    {
        static double varSmoothed_last = DOUBLE_EMPTY;
        if ( varSmoothed_last == DOUBLE_EMPTY )
        {
            varSmoothed_last = var_smoothed;
            return;
        }

        static double varSmoothed_preLast = DOUBLE_EMPTY;
        if ( varSmoothed_preLast == DOUBLE_EMPTY )
        {
            varSmoothed_preLast = varSmoothed_last;
            varSmoothed_last = var_smoothed;
            return;
        }

#define THRESHOLD_IMPULSE .15

        if ( varSmoothed_last > varSmoothed_preLast  
            &&  varSmoothed_last > var_smoothed  
            &&  varSmoothed_last > THRESHOLD_IMPULSE )
        {
            LOG ( @"PotPeak @ %f", varSmoothed_last );

            // hit a peak at imp_last
            [self peakedWithImpulse: varSmoothed_last ];
        }

        varSmoothed_preLast = varSmoothed_last;
        varSmoothed_last = var_smoothed;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS:根据加速度计输出准确确定碰撞能量 的相关文章

  • iOS NSDictionary 保存到 NSUserDefaults 不保存值

    我正在尝试保存一个NSDictionary数组值到NSUserDefaults但我遇到了一些奇怪的麻烦 My NSDictionary has NSStrings for keys和每个value is a NSArray of NSNum
  • iPhone 5 4 英寸 [重复]

    这个问题在这里已经有答案了 可能的重复 如何检测iPhone 5 宽屏设备 https stackoverflow com questions 12446990 how to detect iphone 5 widescreen devic
  • 使用 Xcode 6.4 的通用自定义 iOS 框架

    我使用 Xcode 6 创建了一个自定义 iOS 框架 我尝试了许多脚本来使框架通用 对于模拟器和设备 但它们都不适合我 请建议我一种为 iOS 创建自定义通用框架的方法Xcode 6 要通过终端将两个二进制文件合并为通用二进制文件 首先编
  • Nativescript ios 中闪屏后显示白屏

    在 Nativescript ios 中 启动屏幕后几秒钟显示白屏 这种情况仅发生在我们的项目中 但示例项目运行良好 我检查了模拟器和 iPhone 5 iPhone 6 iPad mini 所有设备都显示白屏 我将 Nativescrip
  • 使用 iOS 7 在后台获取步骤

    我正在开发一个应用程序 我应该在其中获取我在体育活动期间所走的步数 我找到了这段代码 void countSteps UIAccelerometer sharedAccelerometer setUpdateInterval 1 0 KUP
  • 使用故事板视图控制器创建编程选项卡栏?

    我有一个以编程方式创建的选项卡栏 并且在初始化与视图关联的故事板时遇到困难 我能够在没有故事板的情况下在选项卡栏中成功加载视图 请参阅下面的代码 但视图仅部分显示 因为某些 UI 组件位于故事板中 我的故事板的名称是 Main Storyb
  • 旋转 UISplitViewController 后模态消失

    我有一个奇怪的问题 UISplitViewController 我的主视图控制器中有一个按钮 点击时会打开一个模式视图 使用简单的故事板转场 但是 当我旋转 iPad 时 模式视图会消失 但仅限于从纵向旋转到横向时 我的主视图控制器以纵向隐
  • SwiftUI |选择器 - 更改选定行的颜色

    我想更改所选行的颜色 正如您所看到的 默认情况下它具有浅灰色 我不知道该怎么做 因为我根本找不到访问这一行的方法 有什么办法可以做到这一点吗 演示代码 struct ContentView View var data Array 0 20
  • iOS App 中 AVAudioPlayer 和 MPMusicPlayerController 的独立音量控制。

    在我的应用程序中 我使用 AVAudioPlayer 播放下载的音频 同时使用 MPMusicPlayerController 播放用户 iPod 音乐库中的音频 我需要能够调整 AVAudioPlayer 实例的音量 使其声音更大 比来自
  • 修复核心数据失败

    我的应用程序商店中有一个使用 Core Data 的应用程序 我必须在明天之前发布更新 但是 我在使用 Core Data 时遇到了一些问题 我错误地更改了 Core Data 中的模型 现在我的应用程序崩溃了 我尝试迁移数据 但当我在 i
  • 应用因 iCloud 备份标记而被拒绝

    我的应用程序有一些应用内购买 可将视频内容下载到 Documents 文件夹 我最近提交了应用程序的更新 但被拒绝了 因为我没有将视频文件标记为不备份到 iCloud 我成功地实现了标记 但我仍然对苹果文档中的这一声明感到困惑 重要 新的
  • Objective C:如何从 appdelegate 呈现模态视图控制器?

    我在我的应用程序的 appdelegate 中 如何在 didfinishlaunching 方法中添加模式视图控制器 我尝试了以下方法但没有成功 SomeViewController vc SomeViewController alloc
  • localizedStringWithFormat 如何工作?

    请注意 我不是在问NSLocalizedString 宏 我问的是NSString类函数 instancetype localizedStringWithFormat NSString format 这是两件不同的事情 Question 我
  • 导航栏按钮点击区域无法正常工作(图像不可点击)

    Xcode 11 4 iOS 13 4 导航栏 UIBarButton 项目未按预期工作 我使用故事板作为按钮 没有编写代码 我更新 Xcode 后它工作得很好 现在它不起作用了 只能触摸绿色区域 图片can not 我还检查了屏幕调试器
  • 使用每个实体包含许多图像的核心数据?

    我是 Core Data 的新手 正在开发我的第一个个人 iOS 应用程序 我有一个实体 我们称之为Car 其中有一个缩略图以及与其关联的其他图像库 数据使用同步到在线服务ASIHTTPRequest and JSONKit 该应用程序不需
  • 资产目录编译器警告:针对 IOS 7.0 及更高版本的 iPad 应用程序需要 76x76@2x 应用程序图标

    多年来我一直收到这个警告 但我似乎无法摆脱它 警告是 Images xcassets A 76x76 2x app icon is required for iPad apps targeting iOS 7 0 and later 我尝试
  • 在后台播放音乐:AVAudioSessionInterruptionNotification 未触发

    我的应用程序正在播放背景很好 Pause and play即使我的应用程序是后台使用注册的方法也运行良好AVAudioSessionInterruptionNotification 问题到达场景的步骤 启动我的应用程序 gt 我的应用程序中
  • AFNetworking 可以处理请求队列吗?

    我在 iOS 6 上的示例 需要 按顺序 向服务器发送 10 个 Multi Part 请求 所以请求形成一个队列 应显示进展情况 如果一个请求失败 则所有后续请求都会失败 请求队列应该是可取消的 AFNetworking 可以帮我解决这个
  • 如何使用 Swift 从资源中加载特定图像[重复]

    这个问题在这里已经有答案了 我是 Swift 新手 我想从资源中加载特殊图像 例如我有 image 1 for iphone 4s email protected cdn cgi l email protection image 2 for
  • Firebase ios sdk 异步和线程

    有谁知道使用 Firebase iOS SDK 远程调用 Firebase 是使用主线程还是后台线程 我在文档中找不到任何内容 Firebase 并没有完全消除对线程的担忧 由于 Firebase 回调始终在主线程上返回 因此从后台线程调用

随机推荐

  • 在VBA中,如何以简单的方式将UTC UNIX时间戳转换为本地时区日期?

    据我所知 我们可以使用下面的方法将 UNIX 时间戳粗略地转换为 VB 日期 CDate UNIX 时间戳 60 60 24 1 1 1970 但是 不考虑时区和日光信息 时区并不是什么大问题 但我无法获取特定 UNIX 时间戳的夏令时偏差
  • 获取一个月中的第一个或最后一个星期五

    我正在尝试编写这样的日历函数 function get date month year week day direction week是一个整数 1 2 3 day 是一天 Sun Mon 或数字 以更简单的为准 方向有点令人困惑 因为它进
  • 如何发送utf-8电子邮件?

    请问如何发送utf 8电子邮件 import sys import smtplib import email import re from email mime multipart import MIMEMultipart from ema
  • Tomcat 7.0.32 +Spring MVC Servlet 3 异步不起作用

    我编写了非常简单的控制器来测试 Servlet 3 功能 Autowired ThreadPoolTaskExecutor taskExecutor RequestMapping value name method RequestMetho
  • Spring Security WebFlux IP 白名单

    在利用 WebFlux 的最新 Spring Security 中 安全配置的工作方式如下 SecurityWebFilterChain springSecurityFilterChain ServerHttpSecurity http h
  • 如何使用boto3通过s3上的url访问图像?

    我想要完成的是生成一个链接来查看文件 例如图像或pdf 该项目无法通过 URL 访问 https 存储桶 s3 amazonaws com img name jpg https 5Bbucket 5D s3 amazonaws com im
  • getItemAtPosition() 如何从 ListView 中的选定项获取可读数据

    我有一个从 Android ContactManager 示例中获取的联系人列表视图 该列表显示正常 但我不知道如何从所选项目中获取信息 例如 姓名 和 电话号码 我可以获得选定的位置 但 mContactList getItemAtPos
  • 当我们只更新一个属性时,我们应该使用强参数吗?

    我正在开发一个 Rails 应用程序 我有几个操作 delete later ban later 等 其中我只从请求参数中设置一个属性 具体来说 reason执行该操作的字段 我想知道这样做是否可以 def ban later object
  • 转换数据库中嵌入的图片

    我有一个 小 问题 在数据库文档中包含富文本字段 富文本字段包含某个联系人的个人资料图片 问题是这个内容没有保存为 mime 因此我无法计算图像的 url 我正在使用 pojo 从人员配置文件中检索数据 并在我的 xpage 控件中使用它来
  • 编写正则表达式来检测重复字符[重复]

    这个问题在这里已经有答案了 我需要编写一个正则表达式 它可以识别一个具有重复字符集 at the end 根据以下代码片段 重复字符集为An 我需要编写一个正则表达式 以便能够发现并显示它 根据下面的代码 w将匹配任何单词字符 包括数字 字
  • 如何将 Bower 用作 Visual Studio 2013 的包管理器? IE。我有一个 .NET 项目,想要添加一些使用 Bower 的包

    如何将 Bower 用作 Visual Studio 2013 的包管理器 IE 我有一个 NET 项目 想要添加一些使用 Bower 的包 I read 斯科特 汉塞尔曼的帖子 http www hanselman com blog In
  • 数据表添加到数据集

    我需要为数据集设置一个表 DataSet ds EventDal GetEvents DataSet dsReturn new DataSet DataTable dtReturn dsReturn Tables Add dtReturn
  • 子域 Azure WebApp

    这是一个更普遍的问题 我有一个作为 Azure 应用服务运行的网站 我配置了一个自定义域 以便您可以通过以下方式调用它我的网站名称 com 随着客户的要求不断增长 每个客户都有特定的需求 我想知道是否可以为每个客户拥有一个子域 例如 cli
  • pandas + pyodbc ODBC SQL 类型 -150 尚不支持

    我知道这方面有很多主题 但我认为这是非常具体的 我得到用于审计目的的当前代码 import pandas as pd import pyodbc query Top 50 high total CPU Queries SELECT TOP
  • 在 nginx 上为应用程序添加上下文路径

    Nginx 负责从根目录到根 URL 的所有静态内容 例如 如果根内容位置配置为 usr share nginx html其中包含一个文件 usr share nginx html foo html 然后是网址http localhost
  • Zope 冲突错误

    我的网站的 zope 日志报告了许多冲突错误 平均每天120个 其中2 3个未解决 我读过很多关于为什么会发生冲突错误的文章 但没有什么是清楚的 大多数冲突错误发生在对 MySQL 数据库运行选择查询的页面上 据称 随着 http 请求并发
  • 开始 Lua 脚本编写 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正处于被迫学习Lua的阶段 所以你对我如何做到这一点有什么建议吗 除了 PHP 之外 我对其他脚本语言没有太多经验 那么 关于 head
  • django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。 (django 2.0.1)(Python 3.6)

    这是我第一次尝试将 Django 应用程序 django 2 0 1 Python 3 6 部署到 pythonanywhere 它是一个简单的组合应用程序 没有模型 没有引导程序 只需 Django HTML CSS 和 JavaScri
  • 将 prop 传递给样式组件

    我正在尝试找到一种方法来动态创建 居中此 div 组件 这段代码目前可以工作 但有点冗长而且不是很干 const Rel styled div position relative height 100 width 100 const Abs
  • iOS:根据加速度计输出准确确定碰撞能量

    我正在创建一个音叉应用程序 您可以将 iPhone 轻拍到另一只手的手掌上 或者轻拍到柔软的表面上 以设置音叉的声音 所以我想检测每个 凹凸 中包含的能量 编辑 删除了大量的gumpf 谁能帮我破解这个吗 感谢 freenode 的 mat