Hi,
I want to find the screen coordinates (X,Y) where a point represented
by a latitude/longitude value would appear on the screen if you
pointed your phone at it (much in the same way as Wikitude does).
Here is my code from my onSensorChanged() method:
public void onSensorChanged(SensorEvent event) {
Sensor sensor = event.sensor;
int type = sensor.getType();
switch (type) {
case Sensor.TYPE_MAGNETIC_FIELD:
mags = event.values.clone();
isReady = true;
break;
case Sensor.TYPE_ACCELEROMETER:
accels = event.values.clone();
break;
case Sensor.TYPE_ORIENTATION:
orients = event.values.clone();
break;
}
if (mags != null && accels != null && isReady) {
isReady = false;
SensorManager.getRotationMatrix(R, I, accels, mags);
SensorManager.remapCoordinateSystem(R,
SensorManager.AXIS_X, SensorManager.AXIS_Z, outR);
SensorManager.getOrientation(outR, values);
azimuth = convert.radToDeg(values[0]);
pitch= convert.radToDeg(values[1]);
roll = convert.radToDeg(values[2]);
}
}
I convert the points I wish to project from their lat/lon spherical
coordinates to Cartesian coordinates and perform a perspective
projection using the roll, pitch and azimuth values returned by the
sensor, however, I can never seem to get accurate screen coordinates
of the points.
The matrices for roll, pitch and azimuth I use are:
// pan
double[][] azimuthMat = {
{Math.cos(azimuthValue), -Math.sin(azimuthValue), 0},
{Math.sin(azimuthValue), Math.cos(azimuthValue), 0},
{0, 0, 1},
};
// tilt
double[][] pitchMat = {
{Math.cos(pitchValue), 0, Math.sin(pitchValue)},
{0, 1, 0},
{-Math.sin(pitchValue), 0, Math.cos(pitchValue)},
};
// roll
double[][] rollMat = {
{1, 0, 0},
{0, Math.cos(rollValue), -Math.sin(rollValue)},
{0, Math.sin(rollValue), Math.cos(rollValue)},
};
I also perform the necessary translation of the projection cener and
the point to project e.g:
// Translate the point
subtract(pointToProject, projectionCenter);
... where 'pointToProject' and 'projectionCenter' are double arrays
holding the Cartesian coordinates of each location (i.e. camera lat/
lon and the point to project lat/lon)
I realise this is quite a complicated question to ask and I haven't
provided all my projection code etc, however if someone feels they can
help me out and may know how to achieve what i'm after - i'll post the
whole code.
Thanks
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---