Domanda

è possibile ottenere la direzione del mouse (sinistra, destra, su, giù) sulla base del mouse ultima posizione e la posizione attuale? Ho scritto il codice per calcolare l'angolo tra due vettori, ma non sono sicuro se è giusto.

Qualcuno può per favore mi punto nella giusta direzione?

    public enum Direction
    {
        Left = 0,
        Right = 1,
        Down = 2,
        Up = 3
    }

    private int lastX;
    private int lastY;
    private Direction direction;

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        lastX = e.X;
        lastY = e.Y;
    }
    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        double angle = GetAngleBetweenVectors(lastX, lastY, e.X, e.Y);
        System.Diagnostics.Debug.WriteLine(angle.ToString());
        //The angle returns a range of values from -value 0 +value
        //How to get the direction from the angle?
        //if (angle > ??)
        //    direction = Direction.Left;
    }

    private double GetAngleBetweenVectors(double Ax, double Ay, double Bx, double By)
    {
        double theta = Math.Atan2(Ay, Ax) - Math.Atan2(By, Bx);
        return Math.Round(theta * 180 / Math.PI);
    }
È stato utile?

Soluzione

INFORMATICA l'angolo sembra troppo complessa. Perché non fare qualcosa di simile:

int dx = e.X - lastX;
int dy = e.Y - lastY;
if(Math.Abs(dx) > Math.Abs(dy))
  direction = (dx > 0) ? Direction.Right : Direction.Left;
else
  direction = (dy > 0) ? Direction.Down : Direction.Up;

Altri suggerimenti

Non credo che è necessario calcolare l'angolo. Dati due punti P1 e P2, è possibile controllare per vedere se P2.x> P1.x e non si sa se è andato a sinistra oa destra. Poi guardate P2.y> P1.y e si sa se è andato verso l'alto o verso il basso.

Poi guarda il maggiore dei valori assoluti del delta tra di loro, vale a dire abs (P2.x - P1.x) e abs (P2.y - P1.y) e il valore maggiore ti dice se fosse " più orizzontale" o 'più verticale' e quindi si può decidere se qualcosa che è andato UP-sinistra era alto oa sinistra.

0,0 è l'angolo in alto a sinistra. Se la corrente x> ultima x, si sta andando a destra. Se y corrente> ultima y, si sta andando verso il basso. Non c'è bisogno di calcolare l'angolo, se siete solo interessati a up \ basso, a sinistra \ destra.

povere, se la grandezza (valore assoluto) del movimento orizzontale (differenza di coordinate X) tra l'ultima posizione e la posizione attuale è maggiore della grandezza (valore assoluto) di movimento verticale (differenza di coordinate Y) tra l'ultima posizione e la posizione corrente, allora il movimento a sinistra oa destra; in caso contrario, è alto o in basso. Poi tutto quello che dovete fare è controllare il segno della direzione del movimento di dirvi se il movimento è verso l'alto o verso il basso o verso sinistra o verso destra.

Non si dovrebbe bisogno di essere preoccupato per gli angoli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top