Précédent   Forum du club des développeurs et IT Pro > Autres langages > Algorithmes > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/07/2011, 14h25   #41
zuulcoder
Candidat au titre de Membre du Club
 
Homme
Responsable fonctionnel SOGETI
Inscription : avril 2011
Messages : 24
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Responsable fonctionnel SOGETI
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2011
Messages : 24
Points : 13
Points : 13
Par contre j'ai tenté de modifier le code pour gérer la continuité "sphérique". Mon but étant d'appliquer cet algorithme à l'étiquetage de continents, îles et océans, et donc un océan sur le bord droit de l'image continu à gauche. On ne devrait trouver qu'un seul label et pas deux.

J'ai essayé avec les modulos (code ci-dessous) tels que déjà implémentés dans l'algo du "Diamond Square". Mais cela ne marche pas. Une idée ?

Code Delphi :
1
2
3
4
5
 
     If ( (X>0)   And (fMatrixC[(X-1+W) Mod W,Y Mod H] = fMatrixC[X Mod W,Y Mod H]))             Then Root := CCunion(CCfind(PosI - 1),     Root);
      If ( (X>0)   And (Y>0) And (fMatrixC[(X-1+W) Mod W, (Y-1+H) Mod H] = fMatrixC[X Mod W,Y Mod H])) Then Root := CCunion(CCfind(PosI - 1 - W), Root);
      If ( (Y>0)   And (fMatrixC[X Mod W,(Y-1+H) Mod H] = fMatrixC[X Mod W,Y Mod H]))             Then Root := CCunion(CCfind(PosI - W),     Root);
      If ( (X<W-1) And (Y>0) And (fMatrixC[(X+1) Mod W, (Y-1+H) Mod H] = fMatrixC[X Mod W,Y Mod H])) Then Root := CCunion(CCfind(PosI + 1 - W), Root);
zuulcoder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 14h51   #42
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 837
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 837
Points : 16 517
Points : 16 517
Citation:
Envoyé par zuulcoder Voir le message
Par contre j'ai tenté de modifier le code pour gérer la continuité "sphérique". Mon but étant d'appliquer cet algorithme à l'étiquetage de continents, îles et océans, et donc un océan sur le bord droit de l'image continu à gauche. On ne devrait trouver qu'un seul label et pas deux.

J'ai essayé avec les modulos (code ci-dessous) tels que déjà implémentés dans l'algo du "Diamond Square". Mais cela ne marche pas. Une idée ?
Le plus simple c'est de gérer spécifiquement les pixels qui assurent la continuité sphérique, c'est à dire les pixels sur les bords.

Donc, une fois la double boucle effectuée, on s'occupe de fusionner les bords gauche/droit, puis ensuite les bords haut/bas.

Code delphi :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
For Y := 0 to H - 1 do Begin
  For X := 0 to W - 1 do Begin
    (...)
  End;
End;
 
// merge left/right border
Pos := 0;
For Y := 0 to H - 1 do Begin
  if (Image1[0,Y] = Image1[W-1,Y]) then CCunion( CCfind(Pos), CCfind(Pos+W-1) );
  Pos := Pos + W;
End;
 
// merge top/bottom border
Pos := 0;
For X := 0 to W - 1 do Begin
  if (Image1[X,0] = Image1[X,H-1]) then CCunion( CCfind(Pos), CCfind(Pos+(H-1)*W) );
  Pos := Pos + 1;
End;
 
// Remove indirection...
(...)

(je ne maitrise pas trop Delphi )
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/07/2011, 09h08   #43
zuulcoder
Candidat au titre de Membre du Club
 
Homme
Responsable fonctionnel SOGETI
Inscription : avril 2011
Messages : 24
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Responsable fonctionnel SOGETI
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2011
Messages : 24
Points : 13
Points : 13
Citation:
Envoyé par pseudocode Voir le message
Le plus simple c'est de gérer spécifiquement les pixels qui assurent la continuité sphérique, c'est à dire les pixels sur les bords.

Donc, une fois la double boucle effectuée, on s'occupe de fusionner les bords gauche/droit, puis ensuite les bords haut/bas.

(je ne maitrise pas trop Delphi )
Pour quelqu'un qui ne maitrise pas Delphi tu te débrouilles plutôt bien
Cela fonctionne

J'ai mis à jour l'algo Delphi avec cette modif.

Un grand merci pour ta disponibilité et tes conseils avisés
zuulcoder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 15h07   #44
mjobert
Invité de passage
 
Inscription : janvier 2012
Messages : 1
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 1
Points : 1
Points : 1
Par défaut Rapidité

Bonjour,

Quelqu'un a-t-il testé la vitesse en C et en Java pour confirmer (ou non) si le C va (beaucoup ?) plus vite que Java

Merci
mjobert est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h13.


 
 
 
 
Partenaires

Hébergement Web