Author Topic: How to identify direction of a swipe (android)  (Read 2986 times)

Offline urubu

  • byte
  • *
  • Posts: 11
    • View Profile
How to identify direction of a swipe (android)
« on: June 04, 2012, 03:47:01 am »
Is it possible to identify the direction of a swipe in relation to an object?
I have attached an image to help clarify what I need. I have a cube and I would like to be able to identify which edge of the cube the swipe move is targeting.
I am currently detecting the 2d coordinates of first and last touch on the screen but I don;t know how to translate that to local coordinates of the cube.
I would think that if I have the two points in local coordinates I could infer the direction of the movement.
Any thoughts?

[attachment deleted by admin]

Offline urubu

  • byte
  • *
  • Posts: 11
    • View Profile
Re: How to identify direction of a swipe (android)
« Reply #1 on: June 06, 2012, 08:36:51 pm »
I guess I figured that out mtself:
Code: [Select]
public int calcFlingDirection(PointF start, PointF finish,
                                     FrameBuffer fb, Object3D selCube, World world) {
        Camera cam=world.getCamera();
        // Convert start into a direction vector in world space:
        SimpleVector direction1 = new SimpleVector( Interact2D.reproject2D3DWS(
                                                       cam, fb, (int)start.x, (int) start.y ) ).normalize();
        // Convert finish into a direction vector in world space:
        SimpleVector direction2 = new SimpleVector( Interact2D.reproject2D3DWS(
                                                       cam, fb,(int) finish.x, (int) finish.y ) ).normalize();

        // Calculate the distance to whatever was clicked on:
        SimpleVector pos=cam.getCamera().getPosition();
     
        float distance1 = world.calcMinDistance( pos, direction1, 10000 );
       
        float distance2 = world.calcMinDistance( pos, direction2, 10000 );

        // Calculate the 3D coordinates for the point that was clicked in world coordinates:
        SimpleVector collisionPoint1 = new SimpleVector( direction1 );
        collisionPoint1.scalarMul( distance1 );
        collisionPoint1.add( cam.getCamera().getPosition() );
        collisionPoint1.matMul(selCube.getInverseWorldTransformation());
       
        SimpleVector collisionPoint2 = new SimpleVector( direction2 );
        collisionPoint2.scalarMul( distance2 );
        collisionPoint2.add( cam.getCamera().getPosition() );
        collisionPoint2.matMul(selCube.getInverseWorldTransformation());
        collisionPoint2=round(collisionPoint2);

        SimpleVector diff=new SimpleVector(collisionPoint2);       
        diff.calcSub(collisionPoint1);
        int res='x';
        if (diff.x<0)
        res=-res;
       
        float x2=(diff.x>0 ? diff.x : - diff.x);
        float y2=(diff.y>0 ? diff.y : - diff.y);
        float z2=(diff.z>0 ? diff.z : - diff.z);

        if (y2>x2) {
        res='y';
        if (diff.y<0)
        res=-res;
        }
        if ( (z2>y2) && (z2>x2)) {
        res='z';
        if (diff.z<0)
        res=-res;
        }
        return res;
}


The above code returns 'x',-'x','y',-'y','z',-'z' in local coordinates (cube coordinates)
This is working fine on my tests. Please notice that both points MUST collide with the cube surface.

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 12295
    • View Profile
    • http://www.jpct.net
Re: How to identify direction of a swipe (android)
« Reply #2 on: June 06, 2012, 09:37:55 pm »
...Opps, sorry for not answering this post...i somehow missed it. But you've figured it out, so... ;D

Offline urubu

  • byte
  • *
  • Posts: 11
    • View Profile
Re: How to identify direction of a swipe (android)
« Reply #3 on: June 07, 2012, 12:02:50 am »
does not work reliably though.
Sometimes  I get strange big numbers for the coordinates.
Before I call that method I check for collision with the object. To do that I have to offset the y position 77 pixels (don't know why, got it by experimentation). May be that is confusing the calculations.