Lettres caligraphiées

Discutez des programmes disponibles sur ce site Web.

Lettres caligraphiées

Messagepar Laurae » 16 Mai 2009 16:51

Faisons vivre le forum...

ça doit bien faire 1 an et demi que je suis là à faire n'importe quoi avec mes calculatrices.


bon, là c'est une requête, plus qu'une question.

J'aimerais savoir si quelqu'un serait capable de créer une librarie de lettres caligraphiées utilisant ce format là :
- 26 lettres majuscules : 3x3, avec x/y modifiables, entrée dans Liste 1 / Liste 2
- 26 lettres minuscules : 2x2, avec x/y modifiables, entrée dans Liste 1 / Liste 2

en fait, j'ai déjà 2 lettres majuscules (C, L) et 6 minuscules (a, e, h, o, r, u). Il me faudrait tout le reste.
http://fsnc.21.forumer.com/viewtopic.ph ... &start=225

De cette manière, je n'aurais plus à programmer toutes les lettres caligraphiées à chaque fois.

Par exemple ici : http://www.youtube.com/watch?v=9CvEiXLy2t0
et quand vous regardez le script (faut ouvrir le "plus d'infos" et chercher dans les liens pour trouver le script en entier), vous remarquerez que il y a toujours une allocation au niveau des listes pour pouvoir réaliser ces lettres. J'aimerais pour éviter cela, en faisant tout simplement quelque chose semblable à cela :

Code: Tout sélectionner
<abscisse x de début> -> A
<ordonnée y de début> -> B
<grandissement de la lettre> -> C
Prog "Lettre <la lettre que je veut>"


par exemple, je veux la lettre "L" commençant en (0,0) :
Code: Tout sélectionner
0->A
0->B
1->C
Prog "Lettre L"


cela est BIEN mieux que ceci :

Code: Tout sélectionner
{1,1/3,3/2,7/3,11/5,7/4,3/2,3/2,6/5,1/3,2/3,6/5,9/5,11/4}→List 1
{3,7/3,2,5/2,13/5,5/2,2,5/4,2/5,0,3/4,2/5,1/5,0}→List 2


qui est horrible et illisible à la fois.

par programme, tout ressemblerait à cela :

Code: Tout sélectionner
Program Lettre L
{1,1/3,3/2,7/3,11/5,7/4,3/2,3/2,6/5,1/3,2/3,6/5,9/5,11/4}→List 1
{3,7/3,2,5/2,13/5,5/2,2,5/4,2/5,0,3/4,2/5,1/5,0}→List 2
List 1*C+A -> List 1
List 2*C+B -> List 2


fini! mais le problème, c'est de trouver quelqu'un qui possède ou veuille bien me les donner...

c'est juste pour pouvoir faire à priori écrire n'importe quoi de manière caligraphiée, mais il faudra tout de même un niveau minimum de programmation pour pouvoir utiliser le programme si il devra être "released".


D'un autre côté, pour ceux qui ont regardé la vidéo, le script que j'utilise est le suivant :

Code: Tout sélectionner
Prog="LETTRES"

Cls
GridOff
AxesOff
LabelOff
S-WindMan
ViewWindow -0.5,11.5,1,-1,4,1,0,1,1/32
"DRAW"?->O
If Not O
Then "DEGRE (2~7,0)"?→L
L≠0┼L≠2┼L≠3┼L≠4┼L≠5┼L≠6┼L≠7┼2→L
"PRECISION (-10~10)"?→P
(38-4L+P)→Tpitch
L=0┼"MILIEU (0.5)"?→N
IfEnd
{1,1/3,3/2,7/3,11/5,7/4,3/2,3/2,6/5,1/3,2/3,6/5,9/5,11/4}→List 1
{3,7/3,2,5/2,13/5,5/2,2,5/4,2/5,0,3/4,2/5,1/5,0}→List 2
If O
Then Prog "LETTRE P"
Else Prog "LETTRE G"
IfEnd
{14/3,7/2,13/4,4,9/2,14/3,9/2,14/3,19/4}→List 1
{3/2,5/4,1/4,0,1/2,3/2,1/2,1/6,0}→List 2
If O
Then Prog "LETTRE P"
Else Prog "LETTRE G"
IfEnd
{21/4,26/5,28/5,6,20/3,27/4,20/3,27/4,34/5}→List 1
{3/2,3/4,0,1/6,3/4,3/2,3/4,1/3,0}→List 2
If O
Then Prog "LETTRE P"
Else Prog "LETTRE G"
IfEnd
{179/24,173/24,22/3,15/2,8,17/2,44/5}→List 1
{3/2,0,4/5,1,6/5,7/5,3/2}→List 2
If O
Then Prog "LETTRE P"
Else Prog "LETTRE G"
IfEnd
{32/3,19/2,37/4,10,21/2,32/3,21/2,32/3,43/4}→List 1
{3/2,5/4,1/4,0,1/2,3/2,1/2,1/6,0}→List 2
If O
Then Prog "LETTRE P"
Else Prog "LETTRE G"
IfEnd


Code: Tout sélectionner
Prog="LETTRE P"

For 1→Z To Dim List 1-1
For 0→N To 3
PlotOn √((1-0.25N)List 1[Z]²+0.25NList 1[Z+1]²),√((1-0.25N)List 2[Z]²+0.25NList 2[Z+1]²)
Next
Next


Code: Tout sélectionner
Prog="LETTRE G"

For 1→Z To Dim List 1
PlotOn List 1[Z],List 2[Z]
Next
For 1→Z To Dim List 1-L
If L=2
Then 2(List 1[Z]-2List 1[Z+1]+List 1[Z+2])→A
-3List 1[Z]+4List 1[Z+1]-List 1[Z+2]→B
List 1[Z]→C
2(List 2[Z]-2List 2[Z+1]+List 2[Z+2])→D
-3List 2[Z]+4List 2[Z+1]-List 2[Z+2]→E
List 2[Z]→F
Graph(X,Y)=(AT²+BT+C,DT²+ET+F)
Else If L=3
Then (-9/2)(List 1[Z]-3List 1[Z+1]+3List 1[Z+2]-List 1[Z+3])→A
(9/2)(2List 1[Z]-5List 1[Z+1]+4List 1[Z+2]-List 1[Z+3])→B
(-1/2)(11List 1[Z]-18List 1[Z+1]+9List 1[Z+2]-2List 1[Z+3])→C
List 1[Z]→D
(-9/2)(List 2[Z]-3List 2[Z+1]+3List 2[Z+2]-List 2[Z+3])→E
(9/2)(2List 2[Z]-5List 2[Z+1]+4List 2[Z+2]-List 2[Z+3])→F
(-1/2)(11List 2[Z]-18List 2[Z+1]+9List 2[Z+2]-2List 2[Z+3]→G
List 2[Z]→H
Graph(X,Y)=(AT^3+BT²+CT+D,ET^3+FT²+GT+H)
Else If L=4
Then (32/3)(List 1[Z]-4List 1[Z+1]+6List 1[Z+2]-4List 1[Z+3]+List 1[Z+4])→A
(-16/3)(5List 1[Z]-18List 1[Z+1]+24List 1[Z+2]-14List 1[Z+3]+3List 1[Z+4])→B
(2/3)(35List 1[Z]-104List 1[Z+1]+114List 1[Z+2]-56List 1[Z+3]+11List 1[Z+4])→C
(-1/3)(25List 1[Z]-48List 1[Z+1]+36List 1[Z+2]-16List 1[Z+3]+3List 1[Z+4])→D
List 1[Z]→E
(32/3)(List 2[Z]-4List 2[Z+1]+6List 2[Z+2]-4List 2[Z+3]+List 2[Z+4])→F
(-16/3)(5List 2[Z]-18List 2[Z+1]+24List 2[Z+2]-14List 2[Z+3]+3List 2[Z+4])→G
(2/3)(35List 2[Z]-104List 2[Z+1]+114List 2[Z+2]-56List 2[Z+3]+11List 2[Z+4])→H
(-1/3)(25List 2[Z]-48List 2[Z+1]+36List 2[Z+2]-16List 2[Z+3]+3List 2[Z+4])→I
List 2[Z]→J
Graph(X,Y)=(AT^4+BT^3+CT²+DT+E,FT^4+GT^3+HT²+IT+J)
Else If L=5
Then (-625/24)(List 1[Z]-5List 1[Z+1]+10List 1[Z+2]-10List 1[Z+3]+5List 1[Z+4]-List 1[Z+5])→A
(625/24)(3List 1[Z]-14List 1[Z+1]+26List 1[Z+2]-24List 1[Z+3]+11List 1[Z+4]-2List 1[Z+5])→B
(-125/24)(17List 1[Z]-71List 1[Z+1]+118List 1[Z+2]-98List 1[Z+3]+41List 1[Z+4]-7List 1[Z+5])→C
(25/24)(45List 1[Z]-154List 1[Z+1]+214List 1[Z+2]-156List 1[Z+3]+61List 1[Z+4]-10List 1[Z+5])→D
(-1/12)(137List 1[Z]-300List 1[Z+1]+300List 1[Z+2]-200List 1[Z+3]+75List 1[Z+4]-12List 1[Z+5])→E
List 1[Z]→F
(-625/24)(List 2[Z]-5List 2[Z+1]+10List 2[Z+2]-10List 2[Z+3]+5List 2[Z+4]-List 2[Z+5])→G
(625/24)(3List 2[Z]-14List 2[Z+1]+26List 2[Z+2]-24List 2[Z+3]+11List 2[Z+4]-2List 2[Z+5])→H
(-125/24)(17List 2[Z]-71List 2[Z+1]+118List 2[Z+2]-98List 2[Z+3]+41List 2[Z+4]-7List 2[Z+5])→I
(25/24)(45List 2[Z]-154List 2[Z+1]+214List 2[Z+2]-156List 2[Z+3]+61List 2[Z+4]-10List 2[Z+5])→J
(-1/12)(137List 2[Z]-300List 2[Z+1]+300List 2[Z+2]-200List 2[Z+3]+75List 2[Z+4]-12List 2[Z+5])→K
List 2[Z]→M
Graph(X,Y)=(AT^5+BT^4+CT^3+DT²+ET+F,GT^5+HT^4+IT^3+JT²+KT+M)
Else If L=6
Then (324/5)(List 1[Z]-6List 1[Z+1]+15List 1[Z+2]-20List 1[Z+3]+15List 1[Z+4]-6List 1[Z+5]+List 1[Z+6])→A
(-162/5)(7List 1[Z]-40List 1[Z+1]+95List 1[Z+2]-120List 1[Z+3]+85List 1[Z+4]-32List 1[Z+5]+5List 1[Z+6])→B
9(35List 1[Z]-186List 1[Z+1]+411List 1[Z+2]-484List 1[Z+3]+321List 1[Z+4]-114List 1[Z+5]+17List 1[Z+6])→C
(-9/2)(49List 1[Z]-232List 1[Z+1]+461List 1[Z+2]-496List 1[Z+3]+307List 1[Z+4]-104List 1[Z+5]+15List 1[Z+6])→D
(1/10)(812List 1[Z]-3132List 1[Z+1]+5265List 1[Z+2]-5080List 1[Z+3]+2970List 1[Z+4]-972List 1[Z+5]+137List 1[Z+6])→E
(-1/10)(147List 1[Z]-360List 1[Z+1]+450List 1[Z+2]-400List 1[Z+3]+225List 1[Z+4]-72List 1[Z+5]+10List 1[Z+6])→F
List 1[Z]→G
(324/5)(List 2[Z]-6List 2[Z+1]+15List 2[Z+2]-20List 2[Z+3]+15List 2[Z+4]-6List 2[Z+5]+List 2[Z+6])→H
(-162/5)(7List 2[Z]-40List 2[Z+1]+95List 2[Z+2]-120List 2[Z+3]+85List 2[Z+4]-32List 2[Z+5]+5List 2[Z+6])→I
9(35List 2[Z]-186List 2[Z+1]+411List 2[Z+2]-484List 2[Z+3]+321List 2[Z+4]-114List 2[Z+5]+17List 2[Z+6])→J
(-9/2)(49List 2[Z]-232List 2[Z+1]+461List 2[Z+2]-496List 2[Z+3]+307List 2[Z+4]-104List 2[Z+5]+15List 2[Z+6])→K
(1/10)(812List 2[Z]-3132List 2[Z+1]+5265List 2[Z+2]-5080List 2[Z+3]+2970List 2[Z+4]-972List 2[Z+5]+137List 2[Z+6])→M
(-1/10)(147List 2[Z]-360List 2[Z+1]+450List 2[Z+2]-400List 2[Z+3]+225List 2[Z+4]-72List 2[Z+5]+10List 2[Z+6])→N
List 2[Z]→P
Graph(X,Y)=(AT^6+BT^5+CT^4+DT^3+ET²+FT+G,HT^6+IT^5+JT^4+KT^3+MT²+NT+P)
Else If L=7
Then (-117649/720)(List 1[Z]-7List 1[Z+1]+21List 1[Z+2]-35List 1[Z+3]+35List 1[Z+4]-21List 1[Z+5]+7List 1[Z+6]-List 1[Z+7])→A
(117649/720)(4List 1[Z]-27List 1[Z+1]+78List 1[Z+2]-125List 1[Z+3]+120List 1[Z+4]-69List 1[Z+5]+22List 1[Z+6]-3List 1[Z+7])→B
(-16807/720)(46List 1[Z]-295List 1[Z+1]+810List 1[Z+2]-1235List 1[Z+3]+1130List 1[Z+4]-621List 1[Z+5]+190List 1[Z+6]-25List 1[Z+7])→C
(2401/144)(56List 1[Z]-333List 1[Z+1]+852List 1[Z+2]-1219List 1[Z+3]+1056List 1[Z+4]-555List 1[Z+5]+164List 1[Z+6]-21List 1[Z+7])→D
(-343/720)(967List 1[Z]-5104List 1[Z+1]+11787List 1[Z+2]-15560List 1[Z+3]+12725List 1[Z+4]-6432List 1[Z+5]+1849List 1[Z+6]-232List 1[Z+7])→E
(49/360)(938List 1[Z]-4014List 1[Z+1]+7911List 1[Z+2]-9490List 1[Z+3]+7380List 1[Z+4]-3618List 1[Z+5]+1019List 1[Z+6]-126List 1[Z+7])→F
(-1/60)(1089List 1[Z]-2940List 1[Z+1]+4410List 1[Z+2]-4900List 1[Z+3]+3675List 1[Z+4]-1764List 1[Z+5]+490List 1[Z+6]-60List 1[Z+7])→G
List 1[Z]→H
(-117649/720)(List 2[Z]-7List 2[Z+1]+21List 2[Z+2]-35List 2[Z+3]+35List 2[Z+4]-21List 2[Z+5]+7List 2[Z+6]-List 2[Z+7])→I
(117649/720)(4List 2[Z]-27List 2[Z+1]+78List 2[Z+2]-125List 2[Z+3]+120List 2[Z+4]-69List 2[Z+5]+22List 2[Z+6]-3List 2[Z+7])→J
(-16807/720)(46List 2[Z]-295List 2[Z+1]+810List 2[Z+2]-1235List 2[Z+3]+1130List 2[Z+4]-621List 2[Z+5]+190List 2[Z+6]-25List 2[Z+7])→K
(2401/144)(56List 2[Z]-333List 2[Z+1]+852List 2[Z+2]-1219List 2[Z+3]+1056List 2[Z+4]-555List 2[Z+5]+164List 2[Z+6]-21List 2[Z+7])→M
(-343/720)(967List 2[Z]-5104List 2[Z+1]+11787List 2[Z+2]-15560List 2[Z+3]+12725List 2[Z+4]-6432List 2[Z+5]+1849List 2[Z+6]-232List 2[Z+7])→N
(49/360)(938List 2[Z]-4014List 2[Z+1]+7911List 2[Z+2]-9490List 2[Z+3]+7380List 2[Z+4]-3618List 2[Z+5]+1019List 2[Z+6]-126List 2[Z+7])→P
(-1/60)(1089List 2[Z]-2940List 2[Z+1]+4410List 2[Z+2]-4900List 2[Z+3]+3675List 2[Z+4]-1764List 2[Z+5]+490List 2[Z+6]-60List 2[Z+7])→Q
List 2[Z]→R
Graph(X,Y)=(AT^7+BT^6+CT^5+DT^4+ET^3+FT²+GT+H,IT^7+JT^6+KT^5+MT^4+NT^3+PT²+QT+R)
Else (N(List 1[Z]-List 1[Z+2])-List 1[Z]+List 1[Z+1])/(N(N-1))→A
(-(N²List 1[Z]-N²List 1[Z+2]-List 1[Z]+List 1[Z+1]))/(N²-N)→B
List 1[Z]→C
(N(List 2[Z]-List 2[Z+2])-List 2[Z]+List 2[Z+1])/(N(N-1))→D
(-(N²List 2[Z]-N²List 2[Z+2]-List 2[Z]+List 2[Z+1]))/(N²-N)→E
List 2[Z]→F
Graph(X,Y)=(AT²+BT+C,DT²+ET+F)
Z+2=Dim List 1┼Return
IfEnd
IfEnd
IfEnd
IfEnd
IfEnd
IfEnd
Next


Le "┼" étant "=>".
Ce script là permet de réaliser des courbes qui relie les points entre eux. Ce ne sont ni des courbes de Bezier (car pas assez précises) ni des courbes splines (je ne sais pas encore en faire).

Un exemple de ce script en action à vitesse élevée (à travers le JASS de Warcraft 3 ;D) est ici : http://www.youtube.com/watch?v=O0nd0fK2-JQ. Je pense que les courbes de Bezier sont facilement visibles (semblent horribles à un certain niveau) par rapport aux courbes "normales" (meilleures dans certains cas). Je remercie fortement White-Flower pour avoir fait le script Warcraft 3. Mais il faut (bien sûr) une librairie de lettres... (ce qui est stupide)

Dans le cas où vous voudriez un script reliant des points (de degré n-1, avec n en-dessous de 5..) utilisant les courbes de Bezier (jusqu'au degré 4), je peux le mettre en ligne ici. Mais cela ne ressemblera qu'a une sorte de régression (les courbes de Bezier ne passant presque jamais par les points voulus mais de manière lisse..)
Mod CasioExpert.com
Co-administrateur TI-Planet (avec une partie Casio)
Laurae
 
Messages: 141
Inscription: 25 Novembre 2007 19:23
Localisation: Ozoir-la-Ferrière

Re: Lettres caligraphiées

Messagepar Mike » 17 Mai 2009 21:35

Sympa l'idée avec un grand challenge !

Pourquoi ne pas utiliser les courbes de Bézier, les polices d'écriture sur PC sont réalisées à partir de ces algorithmes et la qualité est très bonne.

Avec la méthode actuelle utilisée, cela semble très long à écrire à cause de la puissance de la calculatrice. Et pourtant cela coute quasiment rien à un ordinateur d'afficher des polices TrueType ou OpenType.

Est-ce vraiment la bonne méthode ?
Mike
Administrateur
 
Messages: 368
Inscription: 21 Janvier 2004 8:01
Localisation: Paris, France

Re: Lettres caligraphiées

Messagepar Laurae » 18 Mai 2009 10:42

C'était à la base un challenge pour lier au maximum 8 points (sorte de régression paramétrique de degré 7).

J'utilise la calculatrice car j'ai pas souvent l'accés à un ordinateur. A propos de la vitesse : en degré 2 avec 5 lettres (voir vidéo) avec une précision neutre, il faut à peu près 80 secondes pour tout lier.


Pour l'instant je ne connais presque rien sur le lien entre les courbes de Bezier et les polices même je sais qu'elles sont liées.

C'est principalement pour voir si la calculatrice est capable de réaliser ce genre de choses que j'ai fait cela. Ca semble bien marcher, même si la vitesse est très lente.

Pour l'instant j'ai jamais essayé Bezier sur ce type d'algorithme. Cela semble très simple à mettre en place. La méthode de résolution normale permet de bien lier les courbes, en étant sûr qu'elles passent par tous les points qui ont été définis avec un degré de coube défini. Les courbes de Bezier semblent un peu plus dur à mettre en place, car elles ne passent (presque) jamais par les points de contrôles, à par le premier et le dernier de la liste.

Par contre, la méthode du "Plotting" sur calculatrice semble intéressante, malgré le petit commencement que j'ai fait. Mais ce ne sont là que des méthodes proches de la régression linéaire (si on lie les points, on obtiendra presque une droite).

Il existe aussi une autre méthode qui sont les splines, mais pour l'instant je ne pense pas que je vais introduire cela. Il y a tout simplement trop de paramètres réglables, surtout au niveau des splines de degré 3. Les splines de degré 1 semblent par contre très faciles à générer, mais il faut à la base faire la régression d'une courbe passant par les points voulus (donc ça rajoutera encore plus à la lenteur de la calculatrice).

La précision des courbes actuelles que j'utilise (régression passant par tous les points à coup sûr) est assez élevée, malgré quelques recoupment pour lisser les courbes (ex: degré 2, pour un point dans [2, n-2], il y a obligatoirement 3 courbes qui passent par ce point). La différence est percevable facilement, mais cela est principalement du au lissage des courbes entre elles par le fait qu'il y ait plusieurs courbes pour un seul point.
exemple :
Image
Mod CasioExpert.com
Co-administrateur TI-Planet (avec une partie Casio)
Laurae
 
Messages: 141
Inscription: 25 Novembre 2007 19:23
Localisation: Ozoir-la-Ferrière


Retourner vers Programmes

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron

xhtml css      © 2001-2014 CasioExpert.com      CasioExpert.com v6      conception & réalisation Mickaël Morier