在我的应用程序中,我想使用增强现实来寻找家庭餐馆等场所。 我想要做的是,当我启动我的应用程序相机打开,然后我想找到相机方向的位置。例如,我启动应用程序,我面向东方,电话键盘面向我,即西,然后是东方向的地方。 我已经写了一些启动相机的代码,请建议任何api可用于此任务和示例和教程,以便做到这一点。谢谢提前。 这是我的代码。
@Override
public void onCreate(Bundle savedInstanceState) {
// try{
super.onCreate(savedInstanceState);
sensorMan = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensorMan.registerListener(this,sensorMan.getDefaultSensor(SensorManager.SENSOR_ORIENTATION),
SensorManager.SENSOR_DELAY_FASTEST);
//lastUpdate = System.currentTimeMillis();
sensorMan.registerListener(this, sensorMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
}//end of oncreate
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
Toast.makeText(this, "X-rawDirection->"+event.values[0], Toast.LENGTH_SHORT).show();
Toast.makeText(this, "Y-rawDirection->"+event.values[1], Toast.LENGTH_SHORT).show();
Toast.makeText(this, "Z-rawDirection->"+event.values[2], Toast.LENGTH_SHORT).show();
}
if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
Toast.makeText(this, "X-rawDirection TYPE_ORIENTATION->"+event.values[0], Toast.LENGTH_SHORT).show();
Toast.makeText(this, "Y-rawDirection TYPE_ORIENTATION->"+event.values[1], Toast.LENGTH_SHORT).show();
Toast.makeText(this, "Z-rawDirection TYPE_ORIENTATION->"+event.values[2], Toast.LENGTH_SHORT).show();
}
}
}
答案 0 :(得分:3)
有三个步骤。
1)使用传感器确定您的位置和方向。
2)通过使用例如大圆距离和方位确定已知GPS坐标的相对位置和方位,从GPS坐标空间转换到平面坐标空间。 http://www.yourhomenow.com/house/haversine.html(您的设备使用此方案保留在坐标空间的原点)
3)进行透视投影http://en.wikipedia.org/wiki/3D_projection#Perspective_projection以确定物体应显示在您的显示器(确定,您的相机传感器)的平面上的哪个位置,以便您可以增强它们。
首先,您可以简化情况,以便手机只保持一个方向,并且您不会更新显示屏以考虑从屏幕到相机定义的轴的方向,因为对于基本的“查找器“app,大多数人不会在那个轴上旋转。请注意万向节锁定http://en.wikipedia.org/wiki/Gimbal_lock - 我不确定Android传感器API是否会为您解决此问题。
答案 1 :(得分:2)