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

#### urubu

• byte
• Posts: 11
##### 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]

#### urubu

• byte
• Posts: 11
##### 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.

#### EgonOlsen

• Posts: 11980
##### 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...

#### urubu

• byte
• Posts: 11
##### 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.