Deplacement d'une fenetre suivant une conique

Contenu du snippet

Ce code permet de faire une fenetre decrire une ellipse un cercle ou une spirale

Voicila syntaxe ,les explications de chaque paramertre suivent

Pour obtenir un cercle:
$anime(centre,rayon,@nom,width,height,duré).cercle

Pour obtenir une ellipse:
$anime(centre,rayon,@nom,width,height,duré,grand_axe).ellipse

Pour obtenir une spirale:
$anime(centre,rayon,@nom,width,height,duré,rayon2).spirale

Parametres:
centre : centre de rotation ,nombre entre 1 et N
rayon : rayon de coubure ,nombre entre 1 et N
@nom : nom de la fenetre
width : width de la fenetre
height : height de la fenetre
dure: duré du mouvement en seconde
grand_axe OU rayon2 : grand axe pour l'ellipse ou premier rayon de la spirale ( inutile pour le cercle )

Tiens au faite si vous lancer une ellipse et que grand_axe = rayon vous obtiendrez un cercle :)

Source / Exemple :


alias anime {
  $erreur($1,$2,$3,$4,$5,$6,$7,$prop)
  unset %itr
  .timerstop 1 $6 timeranime off
  if ( $prop = cercle ) { .timeranime -m 0 1 cercle $1 $2 $3 $4 $5 }
  if ( $prop = spirale ) { .timeranime -m 0 1 spirale $1 $2 $3 $4 $5 $7 }
  if ( $prop = ellipse ) { .timeranime -m 0 1 ellipse $1 $2 $3 $4 $5 $7 }
  ;return $prop pour fenetre par Kerrigan
}

alias -l spirale {
  if ( %itr = $null) { set %itr 0 }
  inc %itr 0.1
  window -as $3 $int($calc($1 + $2 * $cos(%itr) / ($6 * %itr)))) $int($calc($1 + $2 * $sin(%itr) / ($6 * %itr)))) $4 $5
}

alias -l cercle {
  if ( %itr = $null) { set %itr 0 }
  inc %itr 0.1
  window -as $3 $int($calc($1 + $2 * $cos(%itr))) $int($calc($1 + $2 * $sin(%itr))) $4 $5
}

alias -l ellipse { 
  if ( %itr = $null) { set %itr 0 }
  inc %itr 0.1
  window -as $3 $int($calc($1 + $2 * $cos(%itr))) $int($calc($1 + $6 * $sin(%itr))) $4 $5
}

alias -l erreur { 
  set %tir 1
  set %erreur.fenetre 0
  if ( %Kerrigan.fenetre = $null ) { set %parametre.fenetre centre,rayon,fenetre,width de la fenetre,height de la fenetre,duré du mouvement,grand axe de l'ellipse ou rayon de la spirale }
  if ( @ !isin $3 ) { echo -a le nom de la fenetre doit comporter un  @  ! | inc %erreur.fenetre }
  while ( %tir <= 7 ) { 
    if ( $gettok($1-,%tir,32) = $null ) { 
      echo -a Parametres insufisants /anime , le parametre  $gettok(%Kerrigan.fenetre,%tir,44)  n'est pas defini.
      inc %erreur.fenetre
      goto suivant
    }
    if (( %tir >= 1 ) && ( %tir <= 2 )) || (( %tir >= 4) && ( %tir <= 7 )) { 
      if ( $gettok($1-,%tir,32) !isnum ) { 
        echo -a erreur /anime ,le parametre  $gettok(%Kerrigan.fenetre,%tir,44)  , doit etre un nombre.
        inc %erreur.fenetre
      } 
    }
    :suivant
    inc %tir
  }
  if ( %erreur.fenetre != 0 ) { return halt }
  if ( $8 != spirale) && ( $8 != cercle ) && ($8 != ellipse ) { echo -a erreur/anime, le parametre  $8  inconnue. | return halt }
}

Conclusion :


le code suivant est a copier dans les remotes

Exemple :
//echo -a $anime(200,200,@fenetre,100,100,6).cercle Kerrigan
//echo -a $anime(200,200,@fenetre,100,100,6,1).spirale Kerrigan
//echo -a $anime(200,200,@fenetre,100,100,6,100).ellipse Kerrigan

/!\Si vous lancer une ellipse et que grand_axe=rayon vous obtiendrez un cercle/!\
exemple:
//echo -a $anime(200,200,@fenetre,100,100,6,200).ellipse Kerrigan

Vous pouvez modifier le parametre "-as" devant le "window"de chaque alias en "-s" mais la fenetre ne sera plus active, donc si vous le faite,
pensez a lancer votre fenetre avant de lancer la fonction !!
Pour les curieux ou les matheux j'utilise une definition parametrique des deux conniques et une definition parametrique de la spirale
En suivant ce raisonnement pour pourrez faire decrire despoissons ou des coeurs a vos fenetre.
Il sufit juste de connaitre l'equation parametrique de la courbe ou de se debrouiller en coordonées polaires.
Mais je pense que deux conniques et une spirale vont vous suffire.

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.