Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2013-03-27 21:46:36 comparaison d'un array à t, et t+1

gundorf
membre
Date d'inscription: 2012-04-12
Messages: 36

comparaison d'un array à t, et t+1



bonjour tout le monde,
je me permets ce message parce que sur le forum de processing, il n'a pas grand echo, sad
Je voudrais faire une comparaison d'un array de Integer à t= 0 et t=1.
J'utilise pour faire ma comparaison ce code:

ça me donne les nouveaux éléments (7) et les éléments qui ne se retrouvent pas dans la nouvelle liste(4), parfait.
J'essaye maintenant d'adapter ça à ce précédent code:
en gros en fonction de la position de la souris, une suite de 25 chiffres est crées par l'ordinateur, pas besoin de savoir ce qu'elle représente.
Je voudrais avoir plutôt que à chaque fois les 25 chiffres, juste les nouveaux éléments de la liste, et ce que l'on ne retrouve pas.
je n'arrive pas à créer cette frame difference, mon array final semble toujours égal à l'array d'origine…
voici le code:

import java.util.List;
import java.util.Arrays;
Integer[] output = new Integer[25];
Integer[] output_dest = new Integer[25];
int px, target;
Integer[] input;
List<Integer> newItems = new ArrayList<Integer>(Arrays.asList(output_dest));
List<Integer> formerItems = new ArrayList<Integer>(Arrays.asList(output));

void setup()
{
  size(500, 500);
  textSize(30);
  output_dest= output;
  px = target;
  input = new Integer[100];
  for (int i=0; i<input.length;i++) {
    input[i]=i+1;
  }
}
void draw()
{  
  background(0);
  fill(0, 255, 0);
  text(target, width/2, height/2);

  newItems.clear();
  formerItems.clear();

  target = int(constrain(map(mouseX, 0, 500, 0, 100), 23, 77));



  int counter=0;
  for (int i=-20;i<30;i+=10) {
    for (int j=-2;j<3;j++) {
      output[counter] = input[target-1+i+j];
      counter++; //create the array of Integer.
    }
  }
  String toPrint = "";
  for ( int i=0; i<output.length;i++) {
    toPrint += "" + output[i] + " ";
  }
  println( "output===="+toPrint ); //this is where the list is done


  newItems.removeAll(Arrays.asList(output));
  formerItems.removeAll(Arrays.asList(output_dest));
  System.out.println("New items: " + newItems);
  System.out.println("Former items: " + formerItems);
  px = target;
  //    String toPrint2 = "";
  //    for ( int i=0; i<output_dest.length;i++) {
  //      toPrint2 += "" + output_dest[i] + " ";//unfortunately output_dest is always equal to output, I don't understand why.
  //    }
  //    println( "output_DEST===="+toPrint2 );
  output_dest = output; //should make the difference between output and output_dest to track new and former items.
}

merci de votre aide par avance !

Dernière modification par gundorf (2013-03-27 21:49:51)

Hors ligne

 

#2 2013-03-28 08:24:07 Re : comparaison d'un array à t, et t+1

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: comparaison d'un array à t, et t+1



Bonjour,

Le problème est que dans ta boucle draw, tu ne remplis pas tes listes avec des valeurs. Tu utilises .clear() pour effacer les valeurs, mais quid des nouvelles !
Je te propose ceci :

import java.util.List;
import java.util.Arrays;
Integer[] output = new Integer[25];
Integer[] output_dest = new Integer[25];
int px, target;
Integer[] input;

void setup() {
  size(500, 500);
  textSize(30);
  output_dest= output;
  px = target;
  input = new Integer[100];
  for (int i=0; i<input.length;i++) {
    input[i]=i+1;
  }
}

void draw() {  
  background(0);
  fill(0, 255, 0);
  text(target, width/2, height/2);

  List<Integer> newItems = new ArrayList<Integer>(Arrays.asList(output_dest));
  List<Integer> formerItems = new ArrayList<Integer>(Arrays.asList(output));

  target = int(constrain(map(mouseX, 0, 500, 0, 100), 23, 77));

  int counter=0;
  for (int i=-20;i<30;i+=10) {
    for (int j=-2;j<3;j++) {
      output[counter] = input[target-1+i+j];
      counter++; //create the array of Integer.
    }
  }
  String toPrint = "";
  for ( int i=0; i<output.length;i++) {
    toPrint += "" + output[i] + " ";
  }
  println( "output===="+toPrint ); //this is where the list is done

  newItems.removeAll(Arrays.asList(output));
  formerItems.removeAll(Arrays.asList(output_dest));
  System.out.println("New items: " + newItems);
  System.out.println("Former items: " + formerItems);
  px = target;
  //    String toPrint2 = "";
  //    for ( int i=0; i<output_dest.length;i++) {
  //      toPrint2 += "" + output_dest[i] + " ";//unfortunately output_dest is always equal to output, I don't understand why.
  //    }
  //    println( "output_DEST===="+toPrint2 );
  output_dest = output; //should make the difference between output and output_dest to track new and former items.
}

Cela correspond-il à tes attentes ?

Dernière modification par Mushussu (2013-03-28 08:24:35)

Hors ligne

 

#3 2013-03-28 09:35:46 Re : comparaison d'un array à t, et t+1

gundorf
membre
Date d'inscription: 2012-04-12
Messages: 36

Re: comparaison d'un array à t, et t+1



salut
merci de ta réponse !
c'est pas encore ça mais ça avance;
dans les changements de valeur doux, je n'obtiens rien en sortie:

New items: []
Former items: []

par contre dans les changements rapides, j'obtiens ce genre de choses:

New items: [25, 35, 45, 55, 65]
Former items: [25, 35, 45, 55, 65]

la différence ne se fait pas bien sans que je comprenne pourquoi !

Hors ligne

 

#4 2013-03-28 10:46:00 Re : comparaison d'un array à t, et t+1

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: comparaison d'un array à t, et t+1



Le sketch va trop vite pour qu'on le puisse voir. Avec un frameRate(2) tu verra que tout changement de coordonnées implique un changement dans tes tableaux.

Comme tu as mis un constrain sur un map il n'y pas beaucoup de valeurs sensibles. Pourquoi ne pas avoir mappé mouseX : map(mouseX, 0, 500, 23, 77) ?

Hors ligne

 

#5 2013-03-28 11:08:33 Re : comparaison d'un array à t, et t+1

gundorf
membre
Date d'inscription: 2012-04-12
Messages: 36

Re: comparaison d'un array à t, et t+1



le constrain servait pour ma problématique de création de liste par rapport à la position de ma souris. il ne faut en tenir compte ici.
Sais tu comment je peux dire de traiter l'info pas à pas- si ça va trop vite, c'est qu'il passe d'une instruction à une autre alors que la précédente n'est pas achevée.
Toujours est il que les listes former et new items sont toujours identiques, surement pour les mêmes raisons.
comment du coup programmer la chose pour qu'il fasse bien chaque instruction jusqu'au bout ?
merci

Hors ligne

 

#6 2013-03-28 11:45:25 Re : comparaison d'un array à t, et t+1

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: comparaison d'un array à t, et t+1



Je me suis mal exprimé. Processing traite tout, mais comme il va très vite tu ne perçoit pas forcément l'affichage. En diminuant le frameRate il est humainement possible de le voir.

Alors, il faut que tu regardes la classe tableau et comment la manipuler :
http://docs.oracle.com/javase/6/docs/ap … rrays.html
Quand tu écris output_dest = output;
tu veux transférer les valeurs de l'un vers l'autre, mais là tu assignes à l'un l'instance de l'autre. Pour copier les valeurs :
for (int i = 0; i < output_dest.length; i++) {
    output_dest[i] = output[i];
}

D'autre part, il faut réactualiser les listes après la mise à jour de output.

import java.util.List;
import java.util.Arrays;
Integer[] output = new Integer[25];
Integer[] output_dest = new Integer[25];
int px, target;
Integer[] input;

void setup() {
  size(500, 500);
  textSize(30);
  px = target;
  input = new Integer[100];
  for (int i=0; i<input.length;i++) {
    input[i]=i+1;
  }
  frameRate(2);
}

void draw() {  
  background(0);
  fill(0, 255, 0);
  text(target, width/2, height/2);

  target = int(constrain(map(mouseX, 0, 500, 0, 100), 23, 77));

  int counter=0;
  for (int i=-20;i<30;i+=10) {
    for (int j=-2;j<3;j++) {
      output[counter] = input[target-1+i+j];
      counter++; //create the array of Integer.
    }
  }

  String toPrint = "";
  for ( int i=0; i<output.length;i++) {
    toPrint += "" + output[i] + " ";
  }
  println( "output===="+toPrint ); //this is where the list is done
  toPrint = "";
  for ( int i=0; i<output_dest.length;i++) {
    toPrint += "" + output_dest[i] + " ";
  }
  println( "output_dest===="+toPrint ); //this is where the list is done
  
  List<Integer> newItems = new ArrayList<Integer>(Arrays.asList(output_dest));
  List<Integer> formerItems = new ArrayList<Integer>(Arrays.asList(output));

  newItems.removeAll(Arrays.asList(output));
  formerItems.removeAll(Arrays.asList(output_dest));
  System.out.println("New items: " + newItems);
  System.out.println("Former items: " + formerItems);
  println();
  px = target;
  //    String toPrint2 = "";
  //    for ( int i=0; i<output_dest.length;i++) {
  //      toPrint2 += "" + output_dest[i] + " ";//unfortunately output_dest is always equal to output, I don't understand why.
  //    }
  //    println( "output_DEST===="+toPrint2 );
  for (int i = 0; i < output_dest.length; i++) {
    output_dest[i] = output[i];
  }
}

Hors ligne

 

#7 2013-03-28 12:09:56 Re : comparaison d'un array à t, et t+1

gundorf
membre
Date d'inscription: 2012-04-12
Messages: 36

Re: comparaison d'un array à t, et t+1



Yes ça a l'air de marcher !! la clé c'est ça je pense :

 
for (int i = 0; i < output_dest.length; i++) {
    output_dest[i] = output[i];

je vais continuer de tester-
merci de ton coup de main;

Hors ligne

 

#8 2013-03-28 13:33:54 Re : comparaison d'un array à t, et t+1

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: comparaison d'un array à t, et t+1



Sinon, tu as :

output_dest = Arrays.copyOf(output, output.length) ;

Hors ligne

 

#9 2013-03-28 14:21:06 Re : comparaison d'un array à t, et t+1

Makio135
membre
Lieu: Lyon
Date d'inscription: 2010-11-11
Messages: 89
Site web

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024