2012-12-18 6 views
1

J'ai un vaisseau spatial qui a un emplacement, une destination et une rotation. Quand il a une nouvelle destination, il avance tout en tournant dans le sens des aiguilles d'une montre jusqu'à ce qu'il soit face à sa destination.C# Vecteurs, angles et rotation

code:

public void Move() 
{ 
    Vector requiredDirection = destination - origin; 
    requiredDirection.Normalize(); 
    Vector directionNow = new Vector((float)Math.Cos(rotation), (float)Math.Sin(rotation)); 

    float x = Math.Abs(requiredDirection.X - directionNow.X); 
    float y = Math.Abs(requiredDirection.Y - directionNow.Y); 

    if ((x > rotationSpeed) || (y > rotationSpeed)) 
    { 
     rotation += rotationSpeed; 
    } 

    shipPosition += directionNow * speed; 
} 

Mon problème est que le navire ne tourne dans le une direction jusqu'à ce qu'il soit face à son objectif, j'ai besoin de tourner dans le sens qui serait le plus court chemin. Je ne sais vraiment pas par où commencer, c'est ma première vraie tentative à Vecteurs.

Répondre

1

L'angle de directionNow à requiredDirection est donné par Math.Atan2(requiredDirection.Y,requiredDirection.X) - Math.Atan2(directionNow.Y,directionNow.X). Ce sera positif pour tourner dans le sens antihoraire, négatif pour tourner dans le sens des aiguilles d'une montre.

+0

Merci Mark, je viens d'essayer et ça marche. Cependant, lors de la définition de certaines destinations, le vaisseau va alterner entre la gauche et la droite, en faisant un mouvement décalé loin de la destination, sans doute un bug dans mon code quelque part que j'espère pouvoir corriger. Indépendamment de cela, votre code fonctionne très bien. – Mitch

Questions connexes