gpt4 book ai didi

android - 如何检测手机的一整圈(360 度)?

转载 作者:行者123 更新时间:2023-12-05 06:46:16 25 4
gpt4 key购买 nike

由于我在网上搜索时没有找到任何相关答案,因此我发布了一个关于使用加速度计检测 android 设备围绕其轴的 360 度转 的问题。例如在横向模式下围绕 y 轴:假设在起始位置 y 值为 0(设备与地面平齐)。当手机向前旋转 90 度时 y = -10,向前倾斜 180 度会导致 y = 0,270 度倾斜会导致 y = +10y = 0 中的 360 度。那么,仅在预先指定的方向上检测设备的这一完整转动的代码看起来如何?

@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
// assign directions
x = event.values[1];
y = event.values[0];
z = event.values[2];

???
}
}

编辑:使用 getRotationMatrix() 方法成功。

private float[] r = new float[9];
private float[] i = new float[9];
private float[] v = new float[3];

private float[] accValues = new float[3];
private float[] geoValues = new float[3];

private int azimuth, pitch, roll;

@Override
public void onSensorChanged(SensorEvent event) {

if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
accValues = event.values.clone();
}

if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
geoValues = event.values.clone();
}

boolean success = SensorManager.getRotationMatrix(r, i, accValues,
geoValues);

if (success) {
SensorManager.getOrientation(r, v);

azimuth = v[0] * (180 / Math.PI);
pitch = v[1] * (180 / Math.PI);
roll = v[2] * (180 / Math.PI);
}
}

最佳答案

你可以尝试这样的事情:

`
@覆盖

public void onSensorChanged(SensorEvent event) {

if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {

x = event.values[1];
y = event.values[0];
z = event.values[2];

if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
x1 = event.values[1];
y1 = event.values[0];
z1 = event.values[2];

}

}`

此代码应该允许您检测加速度和方向的变化,因此即使加速度计的 Y 值再次从 0 变为 0,因为方向发生变化然后有一个完整的旋转(但是,您仍然需要清理此代码以消除手机在一个方向上旋转 180° 然后返回 180° 的情况(再次上下转动手机))

出于好奇,为什么需要 360° 旋转手机?我试着把我的手机 360° 旋转,这不是一件容易的事。

关于android - 如何检测手机的一整圈(360 度)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17420999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com