2010-10-24 12 views
1

Si j'ai un rectangle donné, la largeur w, hauteur h et angle rpivotée taille du cadre de sélection rectangle

Quelle est la taille en fait une autre rectangle qui contient tous les points du rectangle tourné ont besoin d'être?

je besoin de ceci pour effectuer des contrôles de cadre de sélection rapide pour un moteur physique 2D je fais

+0

Je sais que d'une façon serait être de faire pivoter tous les coins du rectangle et de les utiliser, mais j'ai pensé qu'il pourrait y en avoir un meilleur. – Markus

+0

Et @mojuba: Si vous (ou l'une des deux personnes qui a upvoted votre commentaire) connaissez la réponse, ce serait vraiment bien si vous pouviez le poster aussi ... – Markus

+0

duplication possible de [Calculer les coordonnées de la boîte jointe à partir d'un rectangle pivoté , Image à l'intérieur.] (Http://stackoverflow.com/questions/622140/calculate-bounding-box-coordinates-from-a-rotated-rectangle-picture-inside) –

Répondre

0

Vous devriez généralement envisager de faire tourner des rectangles dans un moteur de détection de collision, car il sera très simple à implémenter (je veux dire en considérant le rectangle tourné comme il est). En tout cas si vous voulez vraiment simplifier pour avoir un niveau de détection de collision grossier, le mieux est d'encastrer le rectangle dans un cercle, parce que c'est vraiment simple (centré sur le centre du rectangle et avec un rayon de la moitié -diagonale du rectangle) et comparé à l'utilisation d'une boîte, il peut être assez précis pour une détection grossière. En fait, vous pouvez avoir un angle de seuil pour décider s'il vaut mieux utiliser un cercle ou considérer le rectangle d'origine (la plupart des cas dégénératifs sont quand l'angle est proche de k*PI avec k = 0,1,2,3

Si vous êtes vraiment vraiment envie de considérer le rectangle pivoté, vous pouvez le calculer facilement en choisissant le sommet le plus élevé de votre rectangle (xT, yT) et le (xL, yL) plus à gauche (après la rotation bien sûr) pour obtenir le point topleft qui sera (xL, yT).Alors vous faites la même chose pour le coin droite prenant (xR, yB) du point le plus à droite et le plus bas de votre rectangle et vous l'avez.Il sera le rectangle inclus dans (xL, yY) (xR, yB)

+0

Merci pour les conseils utiles! – Markus

1

cela peut être ce que vous avez besoin:

Calculate Bounding box coordinates from a rotated rectangle, par quelqu'un du nom répondu markus.

+0

Je viens d'ajouter le commentaire suivant à la réponse de Markus: En fait, en raison de la symétrie, vous devez transformer seulement 2 coins, et si vous donnez un peu plus de réflexion, c'est juste un coin à faire pivoter. – ysap