IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Sauvegarder en mémoire un rectangle


Sujet :

Android

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 118
    Par défaut Sauvegarder en mémoire un rectangle
    Bonjour,

    Mon problème est le suivant j'effectue une application android ou grâce à un algorithme j'effectue le dessin de rectangle a une position bien précise (x, y) sur mon plan quadrillé. Je définis mon Canvas c et ensuite je fais c.drawRec..., j'aimerai savoir comment faire pour mémoriser à chaque fois que je trace un rectangle, car j'ai certain rectangle qui se dessine plusieurs fois à la même position donc j'aimerai faire un test dessus pour éviter de les tracer si il existe déjà.

    Je vous remercie

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 099
    Par défaut
    Tu peux très bien mettre chacun des nouveaux rectangle créés dans une liste tout simplement. Après tu cherchera dans ta liste si un rectangle n'est pas en collision avec le nouveau que tu veux insérer dans la liste.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 118
    Par défaut
    D'accord, je vous remercie. Mais je mets çà dans une liste de quoi, parce que je voulais faire une liste de coordonnées pour voir par rapport à la position mais ca ne sera pas tres bien je pense

  4. #4
    Membre éprouvé Avatar de Arislas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 116
    Par défaut
    Je pense que tu peut créer une liste de rectangle et faire tes calculs de collisions sur eux.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 118
    Par défaut
    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    public void test(int x1, int y1, int x2, int y2) {
    		int x, y, dx, dy, xincr, yincr, erreur, i, coordX, coordY;
    		double scalePixel = (Plan.getScale() / 2);
     
    		Canvas c = new Canvas(simu);
    		Paint paint = new Paint();
     
    		dx = Math.abs(x2 - x1);
    		dy = Math.abs(y2 - y1);
     
    		if (x1 < x2) {
    			xincr = 1;
    		} else {
    			xincr = -1;
    		}
     
    		if (y1 < y2) {
    			yincr = 1;
    		} else {
    			yincr = -1;
    		}
     
    		x = x1;
    		y = y1;
     
    		if (dx > dy) {
    			erreur = dx / 2;
    			for (i = 0; i < dx; i++) {
    				x = x + xincr;
    				erreur = erreur + dy;
    				if (erreur > dx) {
    					erreur = erreur - dx;
    					y = y + yincr;
    				}
     
    				c.drawRect(x, y, (int) (x + scalePixel),
    						(int) (y + scalePixel), paint);
     
    			}
    		} else {
    			erreur = dy / 2;
    			for (i = 0; i < dy; i++) {
    				y = y + yincr;
    				erreur = erreur + dx;
     
    				if (erreur > dy) {
    					erreur = erreur - dy;
    					x = x + xincr;
    				}
     
    				c.drawRect(x, y, (int) (x + scalePixel),
    						(int) (y + scalePixel), paint);
     
    			}
     
    		}
    	}
    Par rapport a mon code la, je déclare une liste de rectangle comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List <Rect> list_Rec = new ArrayList<Rect>();
    et je déclare également :

    ou j'effectue cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rectangle = new Rect(x,y...);
    et du coup j'ajoute mon rectangle a ma liste de rectangle, une fois que je fais çà je pense que çà devrait être bon

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 118
    Par défaut
    j'ai donc effectué cela et par la suite ajouter ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    /** Creation du rectangle **/
    				rectangle = new Rect(x, y,
    						(int) (x+ scalePixel),
    						(int) (y+ scalePixel));
     
     
    				if (listRect.contains(rectangle)) {
     
    				} else {
     
    					listRect.add(rectangle);
     
     
    					c.drawRect(rectangle, paint);
    				}
    Mais ca ne marche pas, j'ai toujours des rectangles dessiné au même endroit

  7. #7
    Membre éprouvé Avatar de Arislas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 116
    Par défaut
    Test ton programme en debug pour voir s'il passe bien au bon endroit, je ne suis pas sur que ton contains marche.

    Tes rectangles sont exactement au même endroit ou ils peuvent être décalé de quelque pixels ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 118
    Par défaut
    en faite c'est parce que j'avais déclaré ma list dans ma méthode et non pas dans ma classe comme variable globale, seulement lorsque je fais contains c'est hyper long le traitement, je ne comprend pas pourquoi

  9. #9
    Membre éprouvé Avatar de Arislas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 116
    Par défaut
    Tu test sur tout tes rectangles de ta liste ton rectangle, du coup à chaque fois que tu rajoute un rectangle, ça rallonge le temps de test...

    Il doit y avoir un autre moyen de faire ces tests mais je ne les connait pas, Avis à ceux qui s'y connaisse ^^

  10. #10
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 099
    Par défaut
    Tu as commis un grosse erreur ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (listRect.contains(rectangle))
    Il faut tester les collision de rectangle, pas savoir si un rectangle est contenu dans la liste... ce qui n'as aucun sens dans ton cas.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 118
    Par défaut
    Ben ça marche mais c trop lent. Comment çà les collisions ? Parce que moi ce que je veux savoir c'est si un rectangle est présent déjà et si jamais il n'est pas présent on le dessine sinon on ne fait rien.

  12. #12
    Membre éprouvé Avatar de Arislas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 116
    Par défaut
    Wax78 : Il ne cherche pas à savoir s'il y a collision mais si le rectangle à dessiner n'existe pas déjà, même si le nouveau rectangle est à 1 pixels de différence de l'autre, il sera dessiné

  13. #13
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 099
    Par défaut
    Pourtant quand je lis la phrase
    car j'ai certain rectangle qui se dessine plusieurs fois à la même position donc j'aimerai faire un test dessus pour éviter de les tracer si il existe déjà.
    c'est ce que je comprenais
    Mais bon, savoir qu'un rectangle existe avec contains, ... ca ne fait que verifier si l'instance d'un objet dans la liste existe. (Sans jouer avec ses coordonnes ou quoique ce soit d'autres) et donc logiquement a chaque creation d'un rectangle, forcement il n'existera pas dans la liste. Mais bon j'ai dut mal comprendre alors...
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 118
    Par défaut
    Pourtant quand je parcours ma liste avec contains, il vérifie bien qu'il existe et donc ne le dessine pas, çà marche en faisant comme çà mais c'est trop long le temps de traitement, il faudrait que je trouve une autre solution

  15. #15
    Membre éprouvé Avatar de Arislas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 116
    Par défaut
    Ca prend combien de temps à ce faire ?

  16. #16
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 118
    Par défaut
    Çà doit prendre 1min a peu près

  17. #17
    Membre éprouvé Avatar de Arislas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 116
    Par défaut
    Je ne suis pas sur que ce soit plus rapide mais essaie de vérifier les valeurs à la main dans une boucle for.

    Sinon, combien tu as de rectangle pour que ça prenne un minute un 20ène ?

  18. #18
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 118
    Par défaut
    En faite je travail sur une tablette, ou j'ai un plan quadrillé et je colorie les pixels de mon quadrillage suivant leur position. Du coup il y en a 17000 a peu pres

  19. #19
    Membre éprouvé Avatar de Arislas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 116
    Par défaut
    Du coup pour 17000 va falloir trouvé une solution comme une tache asynchrone et autre pour faire de l'optimisation.

    Je pense qu'une vérification manuelle avec plusieurs tâche asynchrone devrait pouvoir amélioré le temps de recherche mais sur 17000 rectangle, ça va quand même prendre du temps.

    Je ne sais pas si il y a une autre façon plus simple d'accélérer le processus de vérification

  20. #20
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 118
    Par défaut
    j'essaye de faire avec une hashmap la et le rendu est mieux mais ce n'est pas encore çà...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Sauvegarde en mémoire d'un OracleInput
    Par LittleFr0g dans le forum Développement de jobs
    Réponses: 9
    Dernier message: 19/07/2011, 11h54
  2. Sauvegarde fichier mémoire externe
    Par l-amoureu dans le forum Android
    Réponses: 3
    Dernier message: 17/05/2011, 10h31
  3. CList et POSITION à sauvegarder en mémoire
    Par sevli dans le forum Windows
    Réponses: 0
    Dernier message: 25/06/2008, 10h24
  4. Réponses: 5
    Dernier message: 10/04/2007, 11h31
  5. Sauvegarde d'une variable en mémoire
    Par Hypollite76 dans le forum Delphi
    Réponses: 4
    Dernier message: 07/12/2006, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo