2013-02-14 1 views
9

Supposons que j'ai une image dans un canvas fabric. Je peux facilement calculer les coordonnées des coins en fonction des valeurs top & left de l'image, et de sa taille.Trouver les coordonnées des coins d'un objet pivoté dans le fabric 0s

Comment puis-je le faire lorsque l'image est pivotée à un degré quelconque?

Exemple:

enter image description here

EDIT: De préférence, sans l'utilisation de la trigonométrie, s'il existe une méthode plus simple mise en œuvre dans fabricjs lui-même ou à un autre endroit.

+0

Calculer les points de départ, puis utiliser une matrice pour calculer où ils sont basés sur la rotation> http://en.wikipedia.org/ wiki/Rotation_ (mathématiques) – BenM

+0

Merci - voir mon edit. – seldary

+0

Vous devrez utiliser des trigonomes. Il n'y a pas de méthode intégrée pour cela. – BenM

Répondre

17

Oui, bien sûr.

Nous sauvons ces coordonnées dans l'objet de oCoords

oCoords.tl.x, oCoords.tl.y // top left corner 
oCoords.tr.x, oCoords.tr.y // top right corner 
oCoords.bl.x, oCoords.bl.y // bottom left corner 
oCoords.br.x, oCoords.br.y // bottom right corner 

C'est ce qui sera défini lorsque vous appelez la méthode setCoords.

Mais vous ne voulez probablement pas vous tromper avec ceux-ci. Depuis la version ~ 1.0.4, nous avons getBoundingRect méthode sur tous les objets, ce qui renvoie { left: ..., top: ..., width: ..., height: ... }. Nous avions déjà getBoundingRectWidth et getBoundingRectHeight avant (maintenant déconseillé) mais getBoundingRect est certainement plus utile; cela permet aussi de lire les valeurs left/top.

Vous pouvez le voir en action à http://fabricjs.com/bounding-rectangle/ (essayer des objets en rotation)

+2

Merci - J'ai utilisé oCoords qui est parfait. Pas besoin de Math.sin! Il m'a permis de "joindre" des poignées personnalisées à seulement deux coins d'un objet, au lieu des 9 par défaut ... – seldary

+2

le lien n'est pas disponible –

+0

Le lien est http://fabricjs.com/bounding-rectangle (sans une barre oblique) – kikap

Questions connexes