Je veux faire une animation fantaisiste où un point se déplace autour d'un rectangle. Je veux trouver la position du point à la fois t
.
Le rectangle est donné par X
, Y
, Width
et Height
.
Existe-t-il un algorithme pour cela?
J'ai utilisé sin
/ cos
pour les cercles. Quelle est l'approche équivalente pour les rectangles?
animation
geometry
interpolation
Raildex
la source
la source
Réponses:
Je suppose que votre t va de 0 à 1 . (Sinon, multipliez-le simplement pour le mettre à l'échelle de manière appropriée.)
Déterminez la proportion ( 0 - 1 ) de chaque côté du périmètre. ( longueur latérale / périmètre total )
Pour trouver la quantité de chaque côté «remplie» au temps t , parcourez les côtés, en soustrayant leurs proportions jusqu'à ce que t soit épuisé à une valeur négative. Ce dernier bord (qui a fait t devenir négatif) est rempli par une proportion de (longueur latérale + restant) / longueur latérale . Le reste n'est pas rempli.
Pour obtenir la position exacte du vecteur à t , multipliez le vecteur de chaque côté par la proportion de ce côté qui est rempli et ajoutez-les.
Cela fonctionne pour n'importe quel polygone!
la source
Le sinus et le cosinus de t sont respectivement les coordonnées y et x d'un point sur le cercle formant un angle t avec l'axe x. Pas besoin de ça dans un rectangle! Un rectangle est composé de quatre lignes. Si
t
va de0
à1
, il atteint le point(px,py)
àt==0
et à(qx,qy)
àt==1
avec la ligne donnée par:si au lieu de
0
et1
, le temps passe det0
àt1
, vous pouvez d'abord normaliser le temps, puis appliquer la formule ci-dessus.Maintenant, pour votre rectangle, divisez en quatre cas avec un
if
pour chaque bord qui couvre l'un des intervalles de temps et appliquez un mouvement de ligne.Notez que si votre rectangle est aligné sur l'axe, vous aurez toujours la valeur x ou la valeur y qui est constante. Par exemple, pour t entre
0
eta/4
(et en supposant que (X, Y) est en bas à gauche),Ce qui équivaut également à:
la source
Je ne sais pas s'il existe un algorithme réel pour cela, mais j'en ai créé un moi-même (Java):
Vous devez transformer les variables
x
ety
pour obtenir votre animation aussi grande ou petite que vous le souhaitez (en multipliant) et où vous le souhaitez (en ajoutant / en soustrayant de x et y).Je n'ai pas testé ce code, mais je pense qu'il devrait fonctionner. Cela devrait également fonctionner pour tout polygone avec un nombre quelconque de points (vous pouvez également utiliser un peu de code pour générer le polygone).
la source
Donné :
Compte tenu du temps,
T1
comment monterP
sur le périmètre (en supposant une position droite à 0,0)?maintenant une géométrie scool primaire facile et en mathématiques (qui espérez - vous me) pour obtenir
P.x
etP.y
dedistT1
la source