J'utilise des rectangles définis en termes de coordonnées X Y et de largeur et de hauteur. J'ai compris comment les faire pivoter en termes de coordonnées ( edit forte> désolé pour la description déroutante. Mon intention est d'obtenir la largeur et la hauteur inversée ou niée en raison de l'angle. Par exemple, dans une rotation de 90 degrés, les valeurs changent. Dans une rotation de 180 degrés, la largeur serait négative. En outre, je n'ai que l'intention d'utiliser des multiples de 90 dans mon script. Je pourrait em> utiliser x = cos (deg) * x - péché (deg) * y code> y = sin (deg) * x + cos (DEG) * Y code>) mais je suis coincé sur la hauteur et la largeur. Je suis sûr qu'il y a une solution évidente qui me manque. Si cela importe, j'utilise Python. P>
si code> déclarations, mais j'ai supposé qu'il y aurait une méthode plus "élégante". P>
4 Réponses :
Calculez simplement quatre coins de votre rectangle: et faire pivoter chaque angle que vous souhaitez: p> et revenir à votre Représentation rectangle: p> où edit: strong> pourquoi N'essayez pas d'appliquer une formule que vous avez écrite dans Il est facile de voir que si dist code> calcule la distance entre deux points. p> (largeur, hauteur) code> paire? p> DEG == 90 code> Les valeurs commuteront: p> def rotate_left_by_90(times, x, y):
return [(x, y), (-y, x), (-x, -y), (y, -x)][times % 4]
La bonne voie serait de recourir à des matrices de transformation. Aussi, à en juger de votre question, je suppose que vous souhaitez faire pivoter à titre (x = 0, y = 0), mais sinon vous aurez besoin de prendre cela en compte et de traduire votre rectangle au centre du plan en premier (et puis traduisez-le lorsque la rotation est effectuée). P>
m = matrice à traduire au centre R = matrice de rotation p>
matrice de transformation = m ^ (- 1) * r * m p>
Mais pour vous donner une réponse facile à votre question, prenez simplement les deux autres coins de votre rectangle et appliquez la même transformation sur eux. P>
Pour en savoir plus sur les matrices de transformation: http://fr.wikipedia.org/wiki/transformation_matrix P>
La rotation ne doit pas changer Si vous devez trouver les emplacements d'autres sommets rectangés en plus (x, y) après rotation, vous devez les stocker et les faire pivoter avec (x, y) ou garder des informations sur l'orientation du rectangle (telle que DEG ) afin que vous puissiez les recompaliser comme par exemple x + largeur cos (DEG), y + hauteur em> sin (deg). p> largeur code> et hauteur code>. Votre équation est correcte si vous souhaitez faire pivoter (x, y) environ (0,0) par deg code>, mais remarque que souvent cos code> et sin code > Fonctions Attendez-vous à des arguments dans les radians plutôt que de degrés, vous devrez peut-être devoir multiplier deg code> par PI / 180 code> (radians par degré). P>
De la façon dont vous décrivez uniquement en rotation de 90 degrés, et votre façon de définir la largeur et la hauteur, peut-être que vous recherchez quelque chose comme Je ne sais pas pourquoi vous voulez avoir des valeurs négatives pour la largeur et la hauteur, bien que, sinon, chaque rotation de 90 degrés swaps efficacement la largeur et la hauteur, quelle que soit la manière que vous faites pivoter. p> p>
Aucune raison particulière des valeurs négatives, autres que cela semblait la plus simple et la bibliothèque que j'utilise avec des supports.
Que voulez-vous dire par "coincé sur la hauteur et la largeur"? Qu'en est-il de la hauteur et de la largeur? Voulez-vous dire les coordonnées minimales / maximales X et Y et Y? La rotation d'un rectangle ne change pas ses dimensions, donc vous ne voulez probablement pas dire cela.
Soyez prudent - vous continuez à utiliser "DEG" dans vos fonctions sinusoïdales et cosines, mais le nombre que vous avez adopté doit être des radians. 180 deg = PI Radians, où pi = 3.14159 ....
@duffymo ... ce qui me fait venir à la conclusion que la syntaxe familière et la manière dont les diplômes sont alimentés vers des fonctions trigonométriques intimes des radians le font ressembler à un python. Bon, je cherchais à mettre en œuvre cela à Python :)
Non, chaque langue que je connaisse utilise des radians pour les fonctions de Trig. Cela inclut le python.