我试图使用来自SensorEvent.values的Z轴数据,但它没有检测到我的手机在XY平面上的旋转,即.围绕Z轴.
我用这个作为坐标轴的参考.这是对的吗?

如何使用加速度计值测量该运动?
这些游戏类似:Extreme Skater,Doodle Jump.
PS:我的手机定位将是风景.
Android游戏My Paper Plane是如何实现倾斜控制的一个很好的例子,但我一直在努力理解如何做类似的事情.
我有以下示例,它使用SensorManager中的getOrientation().整个事情都在这里的pastebin上.它只是将方向值打印到文本字段.这是最相关的片段:
private void computeOrientation() {
if (SensorManager.getRotationMatrix(m_rotationMatrix, null,
m_lastMagFields, m_lastAccels)) {
SensorManager.getOrientation(m_rotationMatrix, m_orientation);
/* 1 radian = 57.2957795 degrees */
/* [0] : yaw, rotation around z axis
* [1] : pitch, rotation around x axis
* [2] : roll, rotation around y axis */
float yaw = m_orientation[0] * 57.2957795f;
float pitch = m_orientation[1] * 57.2957795f;
float roll = m_orientation[2] * 57.2957795f;
/* append returns an average of the last …Run Code Online (Sandbox Code Playgroud) 我正在写一个游戏.该游戏使用倾斜效果,但我不知道如何在Iphone Simulator 3.0上测试它.我在互联网上搜索它,但结果为零.我怎么能够...?
我正在尝试为Rails创建一个sprockets预处理器,它.png.rb在资源管道中查找文件,并使用它们在我的应用程序中生成各种页面的png屏幕截图.
我已经阅读了很多这个主题,但我似乎无法找到关于如何设置这个问题的任何直接文档.请帮忙?
这是我到目前为止所拥有的:
/initializers/sprockets.rb:
require 'screenshot_preprocessor'
Rails.application.assets.register_mime_type('screenshot/png', '.png.rb')
Rails.application.assets.register_preprocessor('screenshot/png', ScreenshotPreprocessor)
Run Code Online (Sandbox Code Playgroud)
/lib/screenshot_preprocessor.rb:
class ScreenshotPreprocessor
# What API do I need to provide here?
# - What methods do I need to provide?
# - What parameters does Sprockets pass me?
# - What do I need to return to Sprockets?
end
Run Code Online (Sandbox Code Playgroud) 我有一个实现的类,SensorEventListener我想tilt Angle用我的设备Accelerometer.
我在互联网上查找了一些例子但他们使用了
Sensor.TYPE_MAGNETIC_FIELD.
我相信我的设备没有这个传感器,因为当我进行以下检查时
manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size(),我得到零.
有没有办法tilt Angle通过使用
Sensor.TYPE_ACCELEROMETER值来获得?
这几行C#代码使用加速度计计算手机围绕y轴的旋转:
private float GetRoll() {
/*
* Sum up the accelerometer events
*/
Vector3 accelerationVector = Vector3.zero;
for (int i=0; i < Input.accelerationEventCount; i++) {
AccelerationEvent accEvent = Input.GetAccelerationEvent(i);
accelerationVector += accEvent.acceleration * accEvent.deltaTime;
}
accelerationVector.Normalize();
int inclination = (int) Mathf.Round(Mathf.Rad2Deg * Mathf.Acos(accelerationVector.z));
float roll = 0;
if (inclination < 25 || inclination > 155) {
/*
* How to calculate the rotation here?
*/
} else {
roll = Mathf.Round(Mathf.Rad2Deg * Mathf.Atan2(accelerationVector.x, accelerationVector.y));
}
return roll;
}
Run Code Online (Sandbox Code Playgroud)
如果手机平放在桌子上,你知道数学运算吗?即如果inclination …
有没有人已经编程了iphone罗盘标题倾斜补偿?
我有一些方法,但一些帮助或更好的解决方案将是很酷的!
首先,我定义一个向量Ev,由Gv和Hv的叉积计算得出.Gv是由加速度计值构建的重力矢量,Hv是构建磁力计值的标题矢量.Ev与Gv和Hv垂直,因此它正朝着东方的方向前进.
SECOND我定义了一个向量Rv,由交叉积Bv和Gv计算得出.Bv是我的向量,它被定义为[0,0,-1].Rv垂直于Gv和Bv并始终显示在右侧.
第三,这两个向量Ev和Rv之间的角度应该是我的校正标题.计算角点i构建点积和arcos.
phi = arcos(Ev*Rv/| Ev |*| Rv |)
理论上它应该可以工作,但也许我必须规范化向量?!
有没有人为此得到解决方案?
谢谢,m01d
我正在开发一款需要检测垂直运动的Android应用程序.向上移动平板电脑时,陀螺仪,加速度计和线性加速度传感器会给出相应的值,表示向上或向下运动.
我遇到的问题是,当您将平板电脑向用户倾斜或远离用户时,这些传感器也会读取向上/向下的动作.例如,陀螺仪中的x值表示垂直平面.但是当您向前倾斜设备时,x值将会改变.当我做这个动作时,读取垂直运动的同一个传感器为此读取一个值.

其他传感器也是如此.我试图使用方向与陀螺仪结合来制作条件语句,如果音高没有变化,但是x变量上升/下降,那么我们就有垂直运动.这个问题是,如果用户向上移动但略微倾斜,它将不再起作用.我也试过这样做,如果倾斜有变化,那么就没有垂直运动了.但是迭代速度如此之快,以至于倾斜度可能会有1/100秒的变化,但是接下来却没有.
有什么方法我只能读取垂直变化而不是设备间距的变化吗?
编辑:
"请提出一个数学上合理的定义,你认为'向上移动'."这是我最初的问题,我如何编写一个函数来定义平板电脑何时向上或向下移动?我认为垂直翻译向上移动.现在我该怎么检测到这个?我根本不知道从哪里开始,谢谢.
我需要在纵向和横向模式下读取音调值(手机向后和向前倾斜了多少)。在人像中使用下面的代码波纹管,当手机保持面朝上平放时,我从value [1]得到的值是0.0,直立时为-90,设备面朝上时为180。到现在为止一切都很好...当设备处于横向模式时,问题就来了。此时,我正在使用value [2]来测量设备的倾斜度,但是问题在于值:当手机保持平放状态(确定)时,值为0;当手机直立放置(确定)时,值为0;但是当我继续进行操作时,则变为90。移动值再次下降到90以下(80、75等),因此基本上我无法区分这两个位置,因为值相同。所以我做错了
与此处的问题相同:http ://groups.google.com/group/android-beginners/browse_thread/thread/c691bbac3e294c7c?pli=1
我有以下代码:
private void ReadOrientationSensor(){
final SensorManager sensorManager;
final TextView text = (TextView) this.findViewById(R.id.TextView01);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
SensorEventListener listener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
float x,y,z;
x=event.values[0];
y=event.values[1];
z=event.values[2];
//text.setText(String.valueOf(event.values[0]));
text.setText("x: " + x + " y: " + y + " z: " + z);
}
};
sensorManager.registerListener(listener, sensor,SensorManager.SENSOR_DELAY_FASTEST);
Run Code Online (Sandbox Code Playgroud)
}