« KeyboardEvaluator » : différence entre les versions
(Nouvelle page : == Introduction == Cette page décrit le projet KeyboardEvaluator, présent sous subversion dans svn://svn.tuxfamily.org/svnroot/dvorak/svn/KeyboardEvaluator/trunk Ce projet conti...) |
|||
Ligne 12 : | Ligne 12 : | ||
== Propositions de Règles pour les Coûts des Ditouches == | == Propositions de Règles pour les Coûts des Ditouches == | ||
L'évaluateur basé sur les coûts des ditouches sera décrit ici, pour l'instant il est décrit uniquement sur la liste de diffusion. | L'évaluateur basé sur les coûts des ditouches sera décrit ici, pour l'instant il est décrit uniquement sur la liste de diffusion. À faire : | ||
* décrire le principe ici | |||
* lister les outils ($1.row(), $1.isI(), ...) | |||
* illustrer la numérotation des doigts, des colonnes et des lignes | |||
Voici un exemple de jeu de règles utilisé pour se faire une idée de ce que peut donner la méthode. Toute proposition d'affinage, de correction ou de nouveau jeu de règle est la bienvenue. | Voici un exemple de jeu de règles utilisé pour se faire une idée de ce que peut donner la méthode. Toute proposition d'affinage, de correction ou de nouveau jeu de règle est la bienvenue. | ||
<pre> | |||
FADE 0.5 0.1 0 | |||
.... | |||
// variables de configuration pour la suite des règles | |||
var distanceToHomeRowMalus = 1.0; | |||
var exteriorMalus = 0.5; | |||
var rowChangeMalus = 3.0; | |||
var sameFingerMultiplier = 1.5; | |||
// coût de base | |||
value = 0.5; | |||
/////////////////////////// | |||
if (!($1.isI() || $2.isI())) { // pas de pouce en jeu | |||
// Math.abs => valeur absolue | |||
// malus quand on est hors de la home row (pour la première touche) | |||
value += distanceToHomeRowMalus * Math.abs($1.row()); | |||
// malus si le ditouche est vers l'extérieur (mais pas avec le même doigt) | |||
if ($2.fingerNumber() > $1.fingerNumber()) value += exteriorMalus; | |||
// malus pour le changement de ligne | |||
// basé aussi sur la distance entre les doigts (plus les numéros de doigts sont proches plus c'est difficile) | |||
var divider = 0. + Math.abs($1.fingerNumber() - $2.fingerNumber()); | |||
if ($1.fingerNumber() == $2.fingerNumber()) divider = 1.0; | |||
value += rowChangeMalus * Math.abs($1.row() - $2.row()) / divider; | |||
/////////////////////////// | |||
} else { // cas avec un pouce | |||
// ditouches avec espace (ou altgr) | |||
if ($1.isI() && $2.isV()) value += 2.5; | |||
if ($2.isI() && $1.isV()) value += 2.5; | |||
if ($1.isI() && $2.isIV()) value += 2; | |||
if ($2.isI() && $1.isIV()) value += 2; | |||
if ($1.isI() && $2.isIII()) value += 1.3; | |||
if ($2.isI() && $1.isIII()) value += 1.3; | |||
if ($1.isI() && $2.isII()) value += 1; | |||
if ($2.isI() && $1.isII()) value += 1; | |||
/////////////////////////// | |||
} | |||
// ditouche avec un seul doigt (on multiplie le coût calculé) | |||
if ($1.fingerNumber() == $2.fingerNumber()) value *= sameFingerMultiplier; | |||
// légende/outils (À faire : illustration) | |||
//$1.isLeftHand() | |||
//$1.isRightHand() | |||
//$1.row() // access row as defined before in this file | |||
//$1.column() // access column as defined before in this file | |||
//$1.isKey("1C") //e.g. return key | |||
//$1.fingerNumber() // access integer version for finger's roman number (I->1, II->2, ...) | |||
//$1.isI() // Finger I (Thumb) | |||
//$1.isII() // Finger II (index) | |||
//$1.isIII() // Finger III ... | |||
//$1.isIV() // Finger IV ... | |||
//$1.isV() // Finger V (little finger) | |||
.. | |||
</pre> |
Version du 19 février 2008 à 08:27
Introduction
Cette page décrit le projet KeyboardEvaluator, présent sous subversion dans
svn://svn.tuxfamily.org/svnroot/dvorak/svn/KeyboardEvaluator/trunk
Ce projet contient différents systèmes d'évaluation :
- un évaluateur basé sur le modèle de Klay (se référer à la page de Klay pour l'instant)
- un évaluateur basé sur les coûts des ditouches (frappe successives de deux touches)
- d'autres outils
Propositions de Règles pour les Coûts des Ditouches
L'évaluateur basé sur les coûts des ditouches sera décrit ici, pour l'instant il est décrit uniquement sur la liste de diffusion. À faire :
- décrire le principe ici
- lister les outils ($1.row(), $1.isI(), ...)
- illustrer la numérotation des doigts, des colonnes et des lignes
Voici un exemple de jeu de règles utilisé pour se faire une idée de ce que peut donner la méthode. Toute proposition d'affinage, de correction ou de nouveau jeu de règle est la bienvenue.
FADE 0.5 0.1 0 .... // variables de configuration pour la suite des règles var distanceToHomeRowMalus = 1.0; var exteriorMalus = 0.5; var rowChangeMalus = 3.0; var sameFingerMultiplier = 1.5; // coût de base value = 0.5; /////////////////////////// if (!($1.isI() || $2.isI())) { // pas de pouce en jeu // Math.abs => valeur absolue // malus quand on est hors de la home row (pour la première touche) value += distanceToHomeRowMalus * Math.abs($1.row()); // malus si le ditouche est vers l'extérieur (mais pas avec le même doigt) if ($2.fingerNumber() > $1.fingerNumber()) value += exteriorMalus; // malus pour le changement de ligne // basé aussi sur la distance entre les doigts (plus les numéros de doigts sont proches plus c'est difficile) var divider = 0. + Math.abs($1.fingerNumber() - $2.fingerNumber()); if ($1.fingerNumber() == $2.fingerNumber()) divider = 1.0; value += rowChangeMalus * Math.abs($1.row() - $2.row()) / divider; /////////////////////////// } else { // cas avec un pouce // ditouches avec espace (ou altgr) if ($1.isI() && $2.isV()) value += 2.5; if ($2.isI() && $1.isV()) value += 2.5; if ($1.isI() && $2.isIV()) value += 2; if ($2.isI() && $1.isIV()) value += 2; if ($1.isI() && $2.isIII()) value += 1.3; if ($2.isI() && $1.isIII()) value += 1.3; if ($1.isI() && $2.isII()) value += 1; if ($2.isI() && $1.isII()) value += 1; /////////////////////////// } // ditouche avec un seul doigt (on multiplie le coût calculé) if ($1.fingerNumber() == $2.fingerNumber()) value *= sameFingerMultiplier; // légende/outils (À faire : illustration) //$1.isLeftHand() //$1.isRightHand() //$1.row() // access row as defined before in this file //$1.column() // access column as defined before in this file //$1.isKey("1C") //e.g. return key //$1.fingerNumber() // access integer version for finger's roman number (I->1, II->2, ...) //$1.isI() // Finger I (Thumb) //$1.isII() // Finger II (index) //$1.isIII() // Finger III ... //$1.isIV() // Finger IV ... //$1.isV() // Finger V (little finger) ..