Fonction similitude : rotation et homotéthie d'un clip

Description

Pour tous ceux qui cherchent à modifier le centre de rotation de leur clip, voila une solution qui pourra leur convenir...

En fait, il s'agit d'une fonction permettant d'appliquer une rotation et une homotéthie à un clip à partir de n'importe quel centre.

Petit rappel pour les matheux : une homotéthie peut être une translation ou la combinaison d'une rotation et d'une homotéthie. Le premier cas n'est pas pris en compte puisque ça marche comme en géométrie classique.

on appelle la fonction ainsi :
similitude(nomClip, xCentre, yCentre, Rapport, Angle)
- nomClip : nom du clip que vous souhaitez transformer
- xCentre : abcisse du centre de la similitude
- yCentre : ordonné du centre de la similitude
- Rapport : rapport de la similitude (conseil : entre 0.9 et 1.1)
- Angle : angle de la similitude en degrés.

Pour une rotation : Rapport = 1

Source / Exemple :


function similitude(nomClip, xCentre, yCentre, Rapport, Angle) {
	if (Angle != 0) {
		//Application de la rotation
		xDistance = _root[nomClip]._x-xCentre;
		yDistance = _root[nomClip]._y-yCentre;
		Distance = Math.sqrt(xDistance*xDistance+yDistance*yDistance);
		//Faut tourner le clip
		_root[nomClip]._rotation += Angle;
		//Mesure de l'angle
		AngleDefaut = Math.atan2(xDistance, yDistance);
		
		//AngleDefaut += Angle*Math.PI/180;
		Angle *= Math.PI/180;
		Angle -= AngleDefaut;
		xDistance = Distance*Math.sin(-Angle);
		yDistance = Distance*Math.cos(Angle);
		_root[nomClip]._x = xCentre+xDistance;
		_root[nomClip]._y = yCentre+yDistance;
	}
	if (Rapport != 1) {
		//Application de l'homotéthie
		_root[nomClip]._width *= Rapport;
		_root[nomClip]._height *= Rapport;
		_root[nomClip]._x = (_root[nomClip]._x-xCentre)*Rapport+xCentre;
		_root[nomClip]._y = (_root[nomClip]._y-yCentre)*Rapport+yCentre;
	}
}

Conclusion :


Les fonction mathématiques étants émulées, il peut arriver que le résultat manque de précision. il faut donc essayer de corriger ces impressision. Par exemple, pour mon animation, j'ai remplacé :
_root[nomClip]._x = xCentre+xDistance;
_root[nomClip]._y = yCentre+yDistance;
par :
_root[nomClip]._x = xCentre+xDistance*1.00012;
_root[nomClip]._y = yCentre+yDistance*1.00012;
et il n'y a quasiment pas de décalage.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.