1 mai 2019

Looping

Looping est un logiciel d'édition de modèles conceptuels de bases de données. Léger (< 5Mo) il permet cependant de nombreuses fonctionnalités.
  • Modélisation Entité/Association et Diagramme de Classes UML
  • Associations réflexives avec définition de rôles
  • Classes d'entités fictives non générées dans le MLD
  • Transformation association en entité avec identifiants relatifs
  • Définition des propriétés et des types de données
  • Héritage avec spécialisations et généralisations
  • Contraintes d'intégrité fonctionnelle (CIF) et inter-associations
  • Règles de gestion sur entités et associations
  • Insertion de textes, graphiques et images connectables par flux
  • Modèle Logique de Données (MLD) textuel affiché en temps-réel
  • Requêtes SQL de création des tables de la BD en temps-réel
  • Exportation script SQL pour Access, MySQL, Oracle et PostgreSQL
  • Exportation MCD aux formats images et presse-papier
  • Affichage multi-vues et multi-zooms des modèles
  • Présentation entièrement personnalisable

10 avril 2019

Algorithme de parcours en largeur

L'algorithme de parcours en largeur commence à un nœud quelconque d’un graphe, parfois appelé "clé de recherche", et explore tous les nœuds voisins de même profondeur avant de passer aux nœuds situés au prochain niveau de profondeur. On pourrait le comparer à une "onde".
1️⃣️
On retire le premier élément entré dans notre liste de nœuds à explorer (FIFO) et on le traite. (Seulement la clé de recherche s'y trouve au démarrage)
2️⃣️
On indique que le nœud a été exploré, puis on ajoute, à la fin de notre liste de nœuds à explorer, tous les nœuds enfants non explorés.
3️⃣️
Si la liste à explorer n'est pas vide et que les conditions de fin ne sont pas remplies (élément recherché non trouvé par exemple), on répète l'étape 1.
Une pile est une liste avec gestion LIFO (Last In, First Out - Dernier entré, premier sortie), une file est une liste avec gestion FIFO (First In, First Out - Premier entré, premier sortie).
Si nous changeons le mode de gestion de la liste de FIFO à LIFO, alors nous transformons notre algorithme de parcours en largeur en algorithme de parcours en profondeur. (sans récursivité)

Si on doit vérifier qu'une connexion existe entre deux nœuds, alors l'algorithme de parcours en profondeur sera, en moyenne, plus performant. En revanche, si nous recherchons le plus court chemin, et si les nœuds sont équidistants alors l'algorithme de parcours en largeur sera meilleur. En effet, avec l'algorithme de parcours en profondeur, lorsque l'on tombe sur l'élément recherché, il peut exister un autre chemin plus court. Ce qui implique que l'ensemble des nœuds de l'arbre doit être parcouru.

L'algorithme de Dijkstra est une généralisation du parcours en largeur prenant en compte une pondération entre les nœuds (distance par exemple).

9 avril 2019

Algorithme de parcours en profondeur

L'algorithme de parcours en profondeur correspond à la méthode intuitive qu'on utilise pour trouver la sortie d'un labyrinthe. En effet, il suffit de toujours longer le mur pour trouver la sortie. (labyrinthe parfait)
1️⃣️
On indique que le nœud a été exploré.
2️⃣️
On arrête si nous sommes sur le nœud recherché. (non obligatoire)
3️⃣️
On répète la procédure par récursivité pour tous les enfants du nœud non explorés.



Un algorithme qui contient un ou des appels à lui-même est dit récursif. Ce procédé est souvent employé dans la conception d'algorithmes basée sur le paradigme diviser pour régner.

Voici un exemple de récursivité avec une fonction de puissance.
int Power(int value, int p)
{
  return p != 0
    ? value * Power(value, --p)
    : 1;
}

Attention à ne pas dépasser la taille de la pile des exécutions (Sauvegarde des appels de fonctions). En électronique embarquée, la récursivité est souvent proscrite ! L'utilisation de la pile restant trop imprévisible.

5 avril 2019

SVG Minifier

Les éditeurs graphiques vectoriels tels qu'Adobe Illustrator ou Inkscape incorporent de nombreuses informations dans un fichier SVG qui ne sont pas requises pour la présentation. SVG Minifier supprime ces informations superflues, réduisant ainsi la taille de vos fichiers SVG.

Algorithme de Boruvka (1926)

L'Algorithme de Borůvka a été publié pour la première fois en 1926 par Otakar Borůvka en tant que méthode de construction d’un réseau d’électricité efficace pour la Moravie.
1️⃣️
On parcours chaque points en gardant la branche de poids faible (la plus petite valeur).
2️⃣️
On forme des groupes (points reliées entres eux) et on les relies avec la branche de poids faible.

En algorithmique, on parle de chercher un "arbre couvrant minimum".

Algorithmes similaires : Algorithme de Kruskal - Algorithme de Prim.

25 mars 2019

Écran Sphérique - Étude - Fréquences des Rafraîchissements des LEDs


Suivant la position des LEDs RGB sur l'arc, leurs fréquences de rafraîchissement diffèrent. Plus on se rapproche de l'équateur, et plus le besoin des actualisations augmente. Afin de déterminer le nombre de pixels nécessaires sur l'axe horizontal, nous déterminons d'abord l'angle ϑ formé par la droite passant par l'origine et le pôle Nord, et celle passant par l'origine et notre pixel (position verticale voulue).
Comme nous sommes sur une sphère, n'importe quelle longueur de méridien (Arc) équivaut à la moitié de la longueur de l'équateur. Donc, en multipliant le sinus de l'angle, par le double du nombre total de pixels sur l'arc ( -1 car on garde un seul pôle), on détermine le nombre total nécessaire sur l'axe horizontal.
Le tableau suivant regroupe les calculs afin de déterminer le nombre de rafraîchissements de chacune des LEDs RGB suivant leur position et ainsi, connaitre le nombre total des pixels de l'écran.

LED VϑSinLED HErrRcy
Pôle Nord10,00,0001,0011,000,25%1
20,90,0166,2860,951,50%6
31,80,03112,56131,033,25%13
42,70,04718,84191,014,75%19
53,60,06325,12251,006,25%25
64,50,07831,38310,997,75%31
75,40,09437,64381,019,50%38
86,30,11043,89441,0011,00%44
97,20,12550,13501,0012,50%
108,10,14156,36560,9914,00%
119,00,15662,57631,0115,75%
129,90,17268,77691,0017,25%
1310,80,18774,95751,0018,75%
1411,70,20381,11811,0020,25%
1512,60,21887,26871,0021,75%
1613,50,23393,38931,0023,25%
1714,40,24999,48991,0024,75%
1815,30,264105,551061,0026,50%
1916,20,279111,601121,0028,00%
2017,10,294117,621181,0029,50%
2118,00,309123,611241,0031,00%
2218,90,324129,571301,0032,50%
2319,80,339135,501351,0033,75%
2420,70,353141,391411,0035,25%
2521,60,368147,251471,0036,75%
2622,50,383153,071531,0038,25%
2723,40,397158,861591,0039,75%
2824,30,412164,611651,0041,25%
2925,20,426170,311701,0042,50%
3026,10,440175,981761,0044,00%
3127,00,454181,601821,0045,50%
3227,90,468187,171871,0046,75%
3328,80,482192,701931,0048,25%
3429,70,495198,181981,0049,50%
3530,60,509203,622041,0051,00%
3631,50,522209,002091,0052,25%
3732,40,536214,332141,0053,50%
3833,30,549219,612201,0055,00%
3934,20,562224,832251,0056,25%
4035,10,575230,002301,0057,50%
4136,00,588235,112351,0058,75%
4236,90,600240,172401,0060,00%
4337,80,613245,162451,0061,25%
4438,70,625250,102501,0062,50%
4539,60,637254,972551,0063,75%
4640,50,649259,782601,0065,00%
4741,40,661264,522651,0066,25%
4842,30,673269,212691,0067,25%
4943,20,685273,822741,0068,50%
5044,10,696278,372781,0069,50%
5145,00,707282,842831,0070,75%
5245,90,718287,252871,0071,75%
5346,80,729291,592921,0073,00%
5447,70,740295,852961,0074,00%
5548,60,750300,043001,0075,00%
5649,50,760304,163041,0076,00%
5750,40,771308,213081,0077,00%
5851,30,780312,173121,0078,00%
5952,20,790316,063161,0079,00%
6053,10,800319,873201,0080,00%
6154,00,809323,613241,0081,00%
6254,90,818327,263271,0081,75%
6355,80,827330,833311,0082,75%
6456,70,836334,323341,0083,50%
6557,60,844337,733381,0084,50%
6658,50,853341,063411,0085,25%
6759,40,861344,303441,0086,00%
6860,30,869347,453471,0086,75%
6961,20,876350,523511,0087,75%
7062,10,884353,513541,0088,50%
7163,00,891356,403561,0089,00%
7263,90,898359,213591,0089,75%
7364,80,905361,933621,0090,50%
7465,70,911364,563651,0091,25%
Cancer7566,60,918367,103671,0091,75%
7667,50,924369,553701,0092,50%
7768,40,930371,913721,0093,00%
7869,30,935374,183741,0093,50%
7970,20,941376,353761,0094,00%
8071,10,946378,433781,0094,50%
8172,00,951380,423801,0095,00%
8272,90,956382,323821,0095,50%
8373,80,960384,123841,0096,00%
8474,70,965385,823861,0096,50%
8575,60,969387,433871,0096,75%
8676,50,972388,953891,0097,25%
8777,40,976390,373901,0097,50%
8878,30,979391,693921,0098,00%
8979,20,982392,913931,0098,25%
9080,10,985394,043941,0098,50%
9181,00,988395,083951,0098,75%
9281,90,990396,013961,0099,00%
9382,80,992396,853971,0099,25%
9483,70,994397,583981,0099,50%
9584,60,996398,223981,0099,50%
9685,50,997398,773991,0099,75%
9786,40,998399,213991,0099,75%
9887,30,999399,564001,00100,00%
9988,21,000399,804001,00100,00%
10089,11,000399,954001,00100,00%
Equateur10190,01,000400,004001,00100,00%
10290,91,000399,954001,00100,00%
10391,81,000399,804001,00100,00%
10492,70,999399,564001,00100,00%
10593,60,998399,213991,0099,75%
10694,50,997398,773991,0099,75%
10795,40,996398,223981,0099,50%
10896,30,994397,583981,0099,50%
10997,20,992396,853971,0099,25%
11098,10,990396,013961,0099,00%
11199,00,988395,083951,0098,75%
11299,90,985394,043941,0098,50%
113100,80,982392,913931,0098,25%
114101,70,979391,693921,0098,00%
115102,60,976390,373901,0097,50%
116103,50,972388,953891,0097,25%
117104,40,969387,433871,0096,75%
118105,30,965385,823861,0096,50%
119106,20,960384,123841,0096,00%
120107,10,956382,323821,0095,50%
121108,00,951380,423801,0095,00%
122108,90,946378,433781,0094,50%
123109,80,941376,353761,0094,00%
124110,70,935374,183741,0093,50%
125111,60,930371,913721,0093,00%
126112,50,924369,553701,0092,50%
Capricorne127113,40,918367,103671,0091,75%
128114,30,911364,563651,0091,25%
129115,20,905361,933621,0090,50%
130116,10,898359,213591,0089,75%
131117,00,891356,403561,0089,00%
132117,90,884353,513541,0088,50%
133118,80,876350,523511,0087,75%
134119,70,869347,453471,0086,75%
135120,60,861344,303441,0086,00%
136121,50,853341,063411,0085,25%
137122,40,844337,733381,0084,50%
138123,30,836334,323341,0083,50%
139124,20,827330,833311,0082,75%
140125,10,818327,263271,0081,75%
141126,00,809323,613241,0081,00%
142126,90,800319,873201,0080,00%
143127,80,790316,063161,0079,00%
144128,70,780312,173121,0078,00%
145129,60,771308,213081,0077,00%
146130,50,760304,163041,0076,00%
147131,40,750300,043001,0075,00%
148132,30,740295,852961,0074,00%
149133,20,729291,592921,0073,00%
150134,10,718287,252871,0071,75%
151135,00,707282,842831,0070,75%
152135,90,696278,372781,0069,50%
153136,80,685273,822741,0068,50%
154137,70,673269,212691,0067,25%
155138,60,661264,522651,0066,25%
156139,50,649259,782601,0065,00%
157140,40,637254,972551,0063,75%
158141,30,625250,102501,0062,50%
159142,20,613245,162451,0061,25%
160143,10,600240,172401,0060,00%
161144,00,588235,112351,0058,75%
162144,90,575230,002301,0057,50%
163145,80,562224,832251,0056,25%
164146,70,549219,612201,0055,00%
165147,60,536214,332141,0053,50%
166148,50,522209,002091,0052,25%
167149,40,509203,622041,0051,00%
168150,30,495198,181981,0049,50%
169151,20,482192,701931,0048,25%
170152,10,468187,171871,0046,75%
171153,00,454181,601821,0045,50%
172153,90,440175,981761,0044,00%
173154,80,426170,311701,0042,50%
174155,70,412164,611651,0041,25%
175156,60,397158,861591,0039,75%
176157,50,383153,071531,0038,25%
177158,40,368147,251471,0036,75%
178159,30,353141,391411,0035,25%
179160,20,339135,501351,0033,75%
180161,10,324129,571301,0032,50%
181162,00,309123,611241,0031,00%
182162,90,294117,621181,0029,50%
183163,80,279111,601121,0028,00%
184164,70,264105,551061,0026,50%
185165,60,24999,48991,0024,75%
186166,50,23393,38931,0023,25%
187167,40,21887,26871,0021,75%
188168,30,20381,11811,0020,25%
189169,20,18774,95751,0018,75%
190170,10,17268,77691,0017,25%
191171,00,15662,57631,0115,75%
192171,90,14156,36560,9914,00%
193172,80,12550,13501,0012,50%
194173,70,11043,89441,0011,00%
195174,60,09437,64381,019,50%
196175,50,07831,38310,997,75%
197176,40,06325,12251,006,25%
198177,30,04718,84191,014,75%
199178,20,03112,56131,033,25%
200179,10,0166,2860,951,50%
Pôle Sud201180,00,0001,0011,000,25%

"Avec la formule, LED_V(1) "et "LED_V(201)" valent normalement "0". Mais nous ajoutons tout de même une LED afin d'afficher les pôles.

Pour un tour complet, les LEDs des pôles n'affichent qu'un seul pixel, et celles au niveau de l'équateur en affichent 400. Cela aura un impacte sur la luminosité globale de l'écran sphérique. Il nous faut pour cela trouver des LEDs RGB avec une forte luminosité.
Les LEDs qui devront afficher le plus grand nombre de pixels, seront aussi celles qui auront leur vitesse de déplacement élevée. Ainsi, en essayant d'optimiser la ventilation (forme mécanique), nous pourrons les "suralimenter".
En décomposant le nombre d'actualisations suivant la position de la LED sur l'arc, on peut représenter l'écran sphérique en deux dimensions. Chacun des carrés représente un pixel (400 × 201 pixels). Cette représentation est appelée Projection Sinusoïdale.
Pour un écran sphérique de résolution 400 ⨉ 201, nous avons un total de 50932 pixels. Pour passer d'une image rectangulaire à une projection sinusoïdale, nous perdons 36.65% des pixels originaux.

24 mars 2019

Algorithme de Prim (1930)

L'Algorithme de Prim a été développé en 1930 par le mathématicien tchèque Vojtech Jarnik puis a été redécouvert et republié par Robert C. Prim et Edsger W. Dijkstra en 1959. Il consiste à trouver l'arbre couvrant minimum.
Imaginez que vous devez relier plusieurs villes en électricité, câble téléphonique ou chemins de fer. Quelle solution me donne une distance totale minimum ?? (distance minimum ≈ argent minimum) 
1️⃣️
On choisit un point au hasard. Il est le premier point de notre arbre.
2️⃣️
On choisit le point le plus proche de notre arbre afin de le relier.
3️⃣️
On répète l'étape 2 jusqu'à ce que tous les points soient dans notre arbre.
La recherche du point le plus proche est la fonction cruciale de cet algorithme. D'elle, dépend la performance globale.

Algorithmes similaires : Algorithme de Borůvka - Algorithme de Kruskal.

23 mars 2019

Écran Sphérique - Étude - Diamètre de l'Arc


Il existe de nombreuses références pour les LEDs. Leur forme peut varier mais également leur diamètre. Ainsi, ce paramètre, mais également le nombre, impactent sur la longueur de l'arc.


LEDsØ (mm)
122,533,558
2515,330,638,245,853,576,4122,2
5131,863,779,695,5111,4159,2254,6
7547,194,2117,8141,3164,9235,5376,9
10163,7127,3159,2191,0222,8318,3509,3
12578,9157,9197,4236,8276,3394,7631,5
15195,5191,0238,7286,5334,2477,5763,9
175110,8221,5276,9332,3387,7553,9886,2
201127,3254,6318,3382,0445,6636,61 018,6
225142,6285,2356,5427,8499,1713,01 140,8
251159,2318,3397,9477,5557,0795,81 273,2
275174,4348,9436,1523,3610,5872,21 395,5
301191,0382,0477,5573,0668,5954,91 527,9
325206,3412,5515,7618,8721,91 031,31 650,1
351222,8445,6557,0668,5779,91 114,11 782,5
375238,1476,2595,2714,3833,31 190,51 904,8
401254,6509,3636,6763,9891,31 273,22 037,2
425269,9539,9674,8809,8944,71 349,62 159,4
451286,5573,0716,2859,41 002,71 432,42 291,8
475301,8603,5754,4905,31 056,21 508,82 414,1
501318,3636,6795,8954,91 114,11 591,52 546,5
525333,6667,2834,01 000,81 167,61 667,92 668,7
551350,1700,3875,41 050,41 225,51 750,72 801,1
575365,4730,8913,51 096,31 279,01 827,12 923,4
601382,0763,9954,91 145,91 336,91 909,93 055,8
625397,3794,5993,11 191,81 390,41 986,33 178,0
651413,8827,61 034,51 241,41 448,32 069,03 310,4
675429,1858,21 072,71 287,21 501,82 145,43 432,7
701445,6891,31 114,11 336,91 559,72 228,23 565,1
Le tableau indique le diamètre de l'arc suivant le diamètre de la LED et le nombre utilisé.






Souhaitant avoir 201 LEDs sur l'arc, les diamètres à partir de 5 mm sont à éviter. En effet, le diamètre devient trop conséquent et les contraintes mécaniques avec. Je pense m'orienter vers des LEDs entre 3 mm et 3.5 mm. Ce qui me donnerait un diamètre entre 382 mm et 445,6 mm.

15 mars 2019

Écran Sphérique - Étude - Modulation Binaire


Une autre méthode que le PWM (vue dans la précédente publication), rarement vue (hormis de par la personne qui me l'a enseigné que je salue au passage) et pourtant bien plus performante, la Modulation Binaire - Binary Modulation. Elle se révèle vraiment efficace surtout lorsqu’il s’agit de contrôler un grand nombre de sorties avec un fort échantillonnage (résolution).


À chaque cycles, on compare le nombre de cycles enregistrés dans la variable "Cycle" à la constante "CycleMax" dépendant à l'échantillonnage désiré. Pour n = 4 bits, nous aurons CycleMax = n = 4. Si "Cycle" est supérieur ou égal, on le réinitialise à 0. Puis on applique, à la sortie "Out", l’état du bit de la variable "Value" indexé par le compteur "Cycle".


La variable "Period", correspondant à la période du prochain cycle,  est le résultat de "IntialPeriod" multiplié par 2 à la puissance "Cycle". Enfin, on incrémente le compteur "Cycle".

Si vous avez bien suivi l'algorithme, vous aurez compris que la constante "InitialPeriod" doit être initialisée avec la plus petite période, correspondant au temps entre Cycle = 0 et Cycle = 1.

Notre rapport cyclique "Rcy" est bien modulé en conséquence par la variable "Value".
Avec cet algorithme nous avons besoin de beaucoup moins de cycles que celui du PWM et son traitement est quasiment similaire. Le tableau ci-contre résume le nombre nécessaire suivant l’échantillonnage et la méthode utilisée.

La Modulation Binaire permet un gain (traitement global et/ou énergie) non négligeable que ce soit sur un microcontrôleur ou un FPGA.
Cycles
Échantillonnage
n (bit)
PWM
Modulation Binaire
4
15
4
5
31
5
6
63
6
7
127
7
8
255
8
9
511
9
10
1023
10
11
2047
11
12
4095
12
13
8191
13
14
16383
14
15
32767
15
16
65535
16

Remarque : Pourquoi partir du bit de poids faible plutôt que celui de poids fort ?

Car en partant du bit de poids faible, nous passons par la multiplication (décalage des bits vers la gauche) plutôt que la division. Et nous nous abstenons, ainsi, d'une éventuelle division par 2 d'un nombre impaire (Si le calcul de "InitialPeriod" était mauvais).

Cependant, si le nombre de sorties est vraiment conséquent et l'échantillonnage élevé, afin de mieux répartir la charge globale sur le temps, nous pouvons diviser  équitablement  les sorties en deux listes. Chacune partant du bit de poids opposé. Ainsi, on évite la charge "brusque" demandée lors des cycles à faible période.