I should add I am holding the phone horizontally (as you would when
taking a photo).

As such I modify the sensor values like:

SensorManager.getRotationMatrix(R, I, accels, mags);
SensorManager.remapCoordinateSystem(R,SensorManager.AXIS_X,
SensorManager.AXIS_Z, outR);
SensorManager.getOrientation(outR, values);

I'm assuming thats the correct way to do it.

On Aug 20, 6:00 pm, mscwd01 <[email protected]> wrote:
> The main problem is when I use the values returned by the sensor
> manager "as is" i.e. not modifying them in any way, the points are no
> where near where they should be. For example, say the point I wish to
> project is due north of my current location and at the same elevation.
> I shouldn't need to tilt (pitch) the phone up or down and when I hold
> the phone in the direction of north it should appear somewhere near
> the center of the phone screen. However, this is not the case, in
> reality for the point to appear on the center of the screen I need to
> do something like tilt the phone at the ground and orient it in a
> easterly direction for example.
>
> I have made a nasty fix which means I subtract 90 from the roll or add
> 45 degrees to the pitch etc. However while this now projects the point
> on the center of the screen it ruins the projections of any other
> points (as I have fundamentally altered the sensor values). In my
> current implementation a point north of me may work but any points to
> the south do not work.
>
> My problem is probably something to do with the coordinates of the
> phone differing from my projected coordinates, but making the two
> "work" together is causing me some serious headaches.
>
> I can send you my projection code if it helps, I have really exhausted
> all ideas to solve my issue!
>
> Thanks for the reply
>
> On Aug 20, 5:15 pm, Peli <[email protected]> wrote:
>
> > > however, I can never seem to get accurate screen coordinates
> > > of the points.
>
> > Could you specify what exactly your problem is?
> > Does it not work *at all*, or does it work basically, but points are
> > off by a few degrees? Or does it only work in one orientation of the
> > device (like in landscape mode), and fails in other orientations?
>
> > Peliwww.openintents.orghttp://code.google.com/p/openintents/wiki/SensorSi...
>
> > On Aug 20, 4:55 pm, mscwd01 <[email protected]> wrote:
>
> > > 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to