当前位置: 首页 > 编程笔记 >

Android 传感器转换为世界坐标系

阎祖鹤
2023-03-14
本文向大家介绍Android 传感器转换为世界坐标系,包括了Android 传感器转换为世界坐标系的使用技巧和注意事项,需要的朋友参考一下

示例

Android返回的传感器值分别对应于手机的坐标系(例如+ Y指向手机顶部)。我们可以使用传感器管理器旋转矩阵将这些传感器值转换为世界坐标系(例如+ Y指向磁北,切向地面)

首先,您需要声明和初始化将存储数据的矩阵/数组(onCreate例如,可以在方法中执行此操作):

float[] accelerometerData = new float[3];
float[] accelerometerWorldData = new float[3];
float[] gravityData = new float[3];
float[] magneticData = new float[3];
float[] rotationMatrix = new float[9];

接下来,我们需要检测传感器值的变化,将其存储在相应的数组中(如果我们想在以后/其他地方使用它们),然后计算旋转矩阵并转换为世界坐标:

public void onSensorChanged(SensorEvent event) {
    sensor = event.sensor;
    int i = sensor.getType();

    if (i == Sensor.TYPE_ACCELEROMETER) {
        accelerometerData = event.values;
    } else if (i == Sensor.TYPE_GRAVITY) {
        gravityData = event.values;
    } else if (i == Sensor.TYPE_MAGNETIC) {
        magneticData = event.values;
    }

    //根据重力和磁传感器数据计算旋转矩阵
    SensorManager.getRotationMatrix(rotationMatrix, null, gravityData, magneticData);

    //世界坐标系转换以加速
    accelerometerWorldData[0] = rotationMatrix[0] * accelerometerData[0] + rotationMatrix[1] * accelerometerData[1] + rotationMatrix[2] * accelerometerData[2];
    accelerometerWorldData[1] = rotationMatrix[3] * accelerometerData[0] + rotationMatrix[4] * accelerometerData[1] + rotationMatrix[5] * accelerometerData[2];
    accelerometerWorldData[2] = rotationMatrix[6] * accelerometerData[0] + rotationMatrix[7] * accelerometerData[1] + rotationMatrix[8] * accelerometerData[2];

}
           

 类似资料:
  • 我正试图在OpenGL(C++)中使一个光源跟随鼠标。在world coords中,我的屏幕中心是,我的鼠标中心是(窗口res是1280,720)。我只转换了中心的坐标,但我不知道如何转换其余的坐标。 用于转换中心坐标: 我尝试的另一个转换是 其中x和y是鼠标坐标。 到目前为止,我在网上找到的所有解决方案都不起作用。 有什么想法吗?

  • 在threejs中自定义了一个场景,该场景的原点由经纬度转换而来,创建了一条以原点为起点的线段,hover到线段上的时候如何计算hover点的经纬度? 获取到的经纬度与实际经纬度存在较大偏差

  • 通过前两节课的学习,想必你已经对Threejs的层级模型有了一定认识,那么本节课就在层级模型概念的基础上,继续给家讲解两个新的概念,即本地坐标系和世界坐标系。 如果你对本地坐标系和世界坐标系已经有了一定概念,那么可以直接访问模型的位置属性.position获得模型在本地坐标系或者说模型坐标系下的三维坐标,通过模型的.getWorldPosition()方法获得该模型在世界坐标下的三维坐标。 .ge

  • 功能介绍 坐标转换(Convert)是从一种坐标系统变换到另一种坐标系统的过程,可以通过建立两个坐标系统之间一一对应的关系来实现,是各种比例尺地图测量和编绘中建立地图数学基础必不可少的步骤。坐标转换服务实现了四维高德坐标、百度坐标、搜狗等坐标之间相互转换的功能。 注:该服务不支持将偏移GPS坐标(如:百度坐标、高德坐标等)转换为未偏移GPS坐标。 适用场景 按需实现现有坐标系到需求坐标系之间的转换

  • 实现四维高德坐标、百度坐标、搜狗等坐标之间的转换。注意:不支持将偏移GPS坐标(如:百度坐标、高德坐标等)转换为未偏移GPS坐标。 使用服务前需要先申请 key。 资源服务地址:https://www.supermapol.com/iserver/services/coordconvert/rest/coordinate/convert 资源接口参数说明 坐标转换服务服务支持GET和HEAD请求,

  • 问题内容: 我正在努力实现这种转变。给定锚定姿势在arcore中,如何在屏幕中获取其相应的2D坐标? 问题答案: 最终,经过几天的调查并从不同的资源中获取了信息,我才能够使它工作。以下是一个代码片段(基于arcore示例Java应用),用于将World坐标(Arcore中的位姿)转换为2D屏幕坐标: 首先,我们需要计算要从世界->屏幕转换的矩阵: } 一旦有了这个矩阵,就可以将点从3D世界投影到2

  • 我正在尝试将球坐标转换为笛卡尔坐标,以绘制一个简单的三维金字塔。 下面是获取金字塔四个主要角的代码,具体取决于极角yrad和方位角xrad以及顶点坐标x和y: 方位角轴似乎工作正常,但问题是,在操纵极轴角时,当它们越过天顶或底部时,左右会互换,如图所示(选择顶部的mp4以更平滑地播放):http://gyazo.com/4a245713c232893960863cf4ea4186f6 怎么了?

  • 我试图将图像从极坐标转换为笛卡尔坐标,但在应用公式后,我得到了浮点坐标(r和teta),我不知道如何使用x和y的浮点来表示空间中的点。可能有一种方法可以将它们转换为整数,并仍然保留分布,但我不知道如何。我知道OpenCV中有像warpPolar这样的函数,但我想自己实现它。任何想法都会有帮助:) 这是我的代码: