Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab
> Nouveau : partage de liens / une carte des membres

apéro codelab #14 à Rennes, vendredi 3 février 2012, appel à participation

#1 2009-12-17 16:56:10 Problème de trigonométrie: méthodologie et syntaxe

saturne-feerique
membre
Lieu: paris
Date d'inscription: 2009-05-12
Messages: 22
Site web

Problème de trigonométrie: méthodologie et syntaxe



Bonjour,

Je ne sais pas si c'est le bon endroit pour poster ce type de question mais je suis dans une impasse:

Je cherche à créer entre le centre de ma scène et mon curseur une espèce de traîne de rectangles, c'est à dire que je voudrais dessiner une suite de rectangles "dynamiques" sur une ligne invisible qui relie mon curseur au centre de ma scène.

http://codelab.fr/up/schema-traine.gif

Je calcule la distance entre mon centre et mon curseur...:

   float monRayon=dist(mouseX, mouseY,centreXscene,centreYscene);

Ensuite je calcule les sinus et cosinus (coté adjacent ou opposé sur hypoténuse(monRayon))... :

   float CosmonAngle= (dist(centreXscene, mouseY,centreXscene,centreYscene))/monRayon;
float SinmonAngle= (dist(mouseX, centreYscene,centreXscene,centreYscene))/monRayon;

....afin de pouvoir les réutiliser pour placer mes rectangles selon la formule (ici un rectangle à mi-distance entre mon curseur et mon centre de scène):

rect((centreXscene+CosmonAngle*(monRayon/2), (centreYscene+SinmonAngle*(monRayon/2),10,10);

mais cela ne fonctionne pas.

Est-ce que quelqu'un aurait une idée des formules à employer pour créer cette simple animation ?

Merci d'avance.

Dernière modification par saturne-feerique (2009-12-17 17:08:22)

Hors ligne

 

#2 2009-12-17 17:52:42 Re : Problème de trigonométrie: méthodologie et syntaxe

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1287
Site web

Re: Problème de trigonométrie: méthodologie et syntaxe



Bonjour,

Le plus simple pour faire ce genre de choses est de travailler en coordonnées polaires (les coordonnées d'un point sont définies par un angle et une distance) et de convertir au moment de l'affichage pour obtenir des coordonnées cartésiennes. Regarde atan2 par exemple, qui donne l'angle entre un point et le point (0,0). Ce que tu veux faire peut alors être fait comme ça :

Code (processing) :

int nbrRect = 5; // combien de rectangles dessiner ?
float xCentre, yCentre;

void setup() {
  size(600,600);
  frameRate(30);
  smooth();
  rectMode(CENTER);
  xCentre = width / 2;
  yCentre = height / 2;
}

void draw() {
  background(255); fill(0);
  drawRectangles(mouseX, mouseY, nbrRect);
}

void drawRectangles(float x, float y, int nbrRect) {
  // calculer l'angle entre le pointeur et le centre
  float angle = atan2(y - yCentre, x - xCentre);
  
  // calculer la distance entre le pointeur le centre
  float distance = dist(x, y, xCentre, yCentre);
  float incDistanceStep = distance / (nbrRect - 1);
  
  // dessiner nbrRect rectangles sur la ligne invisible qui sépare
  // le centre le pointeur 
  
  float xRect = xCentre;
  float yRect = yCentre;
  float incDistance = 0;
  
  for (int i=0; i <= nbrRect; i++) {
    rect(xRect, yRect, 10, 10);
    xRect = xCentre + incDistance * cos(angle);
    yRect = yCentre + incDistance * sin(angle);    
    incDistance += incDistanceStep;
  }
}

Hors ligne

 

#3 2009-12-17 18:16:58 Re : Problème de trigonométrie: méthodologie et syntaxe

saturne-feerique
membre
Lieu: paris
Date d'inscription: 2009-05-12
Messages: 22
Site web

Re: Problème de trigonométrie: méthodologie et syntaxe



Merci merci merci Emoc.
C'est la manière de calculer l'angle qui me posait problème depuis quelques jours. (principalement).
Ton code est très bien expliqué et documenté – je vais probablement mettre du temps à le digérer et pouvoir y apporter les modif en fonction de mon projet mais je reviendrai ici poster le résultat dès que possible.

Mille merci.

Hors ligne

 

#4 2009-12-31 14:54:11 Re : Problème de trigonométrie: méthodologie et syntaxe

juan
modérateur
Lieu: Nancy
Date d'inscription: 2008-02-23
Messages: 14
Site web

Re: Problème de trigonométrie: méthodologie et syntaxe



Bonjour,

Il y a plus simple. Puisque les points sont alignés entre le centre et la souris et qu'ils sont régulièrement espacés, il suffit de jouer sur la linéarité des vecteurs et des indices. Voici le code en reprenant celui proposé par emoc.

Code (p5) :

int nbrRect = 5; // combien de rectangles dessiner ?
float xCentre, yCentre;

void setup() {
  size(600,600);
  frameRate(30);
  smooth();
  rectMode(CENTER);
  xCentre = width / 2;
  yCentre = height / 2;
}

void draw() {
  background(255); fill(0);
  drawRectangles(mouseX, mouseY, nbrRect);
}

void drawRectangles(float x, float y, int nbrRect) {
  // le vecteur directeur entre le centre et la souris est:
  // (x - xCentre, y - yCentre)
  // Comme les rectangles sont alignés, chaque vecteur entre le centre et 
  // un rectangle est une fraction de ce vecteur directeur.
  float xRect, yRect;
  for (int i=0; i <= nbrRect; i++) { // i=0 correspond au centre, i=nbrRect correspond à la souris
    xRect = xCentre + (x - xCentre)*i/nbrRect;
    yRect = yCentre + (y - yCentre)*i/nbrRect;
    rect(xRect, yRect, 10, 10);
  }
  
}

Hors ligne

 

#5 2009-12-31 16:48:47 Re : Problème de trigonométrie: méthodologie et syntaxe

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1287
Site web

Re: Problème de trigonométrie: méthodologie et syntaxe



Bien vu!

Hors ligne

 

#6 2010-01-03 19:44:59 Re : Problème de trigonométrie: méthodologie et syntaxe

saturne-feerique
membre
Lieu: paris
Date d'inscription: 2009-05-12
Messages: 22
Site web

Re: Problème de trigonométrie: méthodologie et syntaxe



Merci juan!

Hors ligne

 

#7 2010-06-13 17:26:43 Re : Problème de trigonométrie: méthodologie et syntaxe

saturne-feerique
membre
Lieu: paris
Date d'inscription: 2009-05-12
Messages: 22
Site web

Re: Problème de trigonométrie: méthodologie et syntaxe



Finalement, en mélangeant plusieurs petites choses, voici le résultat:
http://www.saturne-feerique.net/LABO/videos/c1f/

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2012