8
votes

Comment faire la rotation correcte du polygone? (en C # même s'il s'applique à quoi que ce soit)

Bonjour, j'utilise ce code C # pour faire pivoter des polygones dans mon application - ils font pivoter mais aussi vous faire asymétruer le chemin qui n'est pas ce que je veux arriver. Tous les polygones sont des rectangles avec quatre coins définis comme des vecteurs 2D, xxx


2 commentaires

On dirait bien pour moi, à une pérusale rapide. Quel type de biaise voyez-vous? Et y a-t-il une raison pour laquelle vous utilisez float au lieu de double ?


Le dystatique l'avait ajouté, en ajoutant simplement le terme Y plutôt que de soustraire. Merci à Jonskeet aussi pour le code beaucoup plus agréable :)


5 Réponses :


6
votes

Je n'ai pas de réponse à la raison pour laquelle il façonne encore, mais je do avez une suggestion pour rendre le code plus clair: xxx

(qui suppose < code> vecteur a approprié +/- des opérateurs définis.)

Vous avez peut-être toujours besoin de quelques coulées sur float , mais vous finirez toujours avec moins de les supports obscurcissants des choses. Oh, et vous avez définitivement pas besoin de lancer angle à float , étant donné qu'il est déjà déclaré comme float .

Edit: une note sur les matrices de rotation impliquées - cela dépend de la question de savoir si vous prenez l'angle pour être dans le sens des aiguilles d'une montre ou dans le sens anti-horaire. Je ne serais pas du tout surpris de savoir que la matrice est bien ce qui ne va pas (j'ai essayé de le vérifier, mais apparemment foiré) ... mais "différent" ne pas nécessairement signifie "faux". Espérons que la matrice est ce qui ne va pas, certes :)


1 commentaires

+1 pour suggérer des améliorations de la lisibilité. Nous avons besoin de plus de personnes codant pour le prochain programmeur qui maintiendra le code.



0
votes

Juste une supposition sauvage - êtes-vous sûr que le rapport de format de votre résolution de bureau est identique à celui de l'écran physique? C'est-à-dire les pixels carré ? Sinon, ensuite, la rotation de vos rectangles dans un angle arbitraire peut les rendre asymétriques.


2 commentaires

Je n'ai pas eu d'écran avec des pixels anisotropes depuis l'Ega Times (640x400) - Je pensais que ces bêtes allaient la voie du dinosaure!


@nikie - pas nécessairement le pixel physique. Vous pouvez choisir une résolution différente de celle de l'écran natif. De cette façon, vous pouvez obtenir des pixels "logiques" rectangulaires lorsque votre bureau est étiré pour remplir la zone d'écran physique.



7
votes

On dirait que votre transformation de rotation est incorrecte. Vous devez utiliser: xxx

pour plus d'informations, cochez Divers Sources sur Internet. :)


0 commentaires

3
votes

Je pense que votre matrice de rotation est incorrecte. Il devrait y avoir un + au lieu de - dans la deuxième équation: xxx


0 commentaires

1
votes

En supposant que l'origine est 0,0. De votre formule, j'aurais: X '= (x + (x - 0) * cos (angle)) - ((Y - 0) * sin (angle))); X '= x + (x * cos (angle)) - (Y * sin (angle));

qui diffère de la formule initiale x '= x * angle cos-cos - Y * COS Angle

Je pense que la réponse de Jon Skeet est correcte et plus claire.


0 commentaires