Algoritmo per il prelievo di valori minimi / massimi ragionevoli dato un singolo valore

0

Sto facendo un semplicistico IDE nel browser per alcune codifiche specifiche del dominio. Perché mi piace pensieri di Bret Victor sulla Programmazione Apprendimento così tanto che ho pensato di inserire alcuni numeri trascurabili a Tangle.js (fai clic qui per vedere di cosa sto parlando) .

La mia implementazione è un controllo di input del cursore molto più semplice, ma l'idea è la stessa. Tuttavia, si presenta un problema. Il cursore di trascinamento ha bisogno di valori per min, max e step. Poiché i valori sono inseriti dall'utente, non riesco a codificarli. Attualmente faccio {min: currentValue/10, max: currentValue*5} , ma è così semplicistico che non ha senso in una grande classe di casi.

Quello che mi piacerebbe è un algoritmo (che immagino sarebbe solo un semplice calcolo) che dato un valore per un numero farebbe delle buone ipotesi sui valori min, max e step. (O qualsiasi 2 di quelli da quando ottenere il terzo sarebbe banale).

ad es.

   fn(15) -> {min: 0, max: 35, step: 1}
   fn(1.478) -> {min: -2, max: 5, step: .2}
   fn(-7034) -> {min: -35000, max: -500, step: 100}

Ovviamente non è necessario e non può essere perfetto, ma mi chiedo se qualcuno abbia un'idea per un algoritmo o qualcosa di mistico che abbia senso qui.

    
posta George Mauer 13.02.2013 - 16:59
fonte

2 risposte

1

Potrei provare qualcosa del tipo:

stepSize = abs (currentValue / numSteps);

offset = numSteps * stepSize / 2;

minValue = currentValue - offset;

maxValue = currentValue + offset;

Dove puoi scegliere quanti passi (la tua precisione) vuoi per la dimensione dell'incremento della barra di avanzamento.

    
risposta data 13.02.2013 - 17:15
fonte
0

Posso pensare ad alcune cose che potresti provare. Dovrai comunque sperimentare - ciò che funziona meglio nella maggior parte delle situazioni si baserà in gran parte su come ci si sente a usare:

  • Utilizza la formula corrente, ma modifica quelle costanti.
  • Basare la dimensione del passo sul numero di cifre nel valore corrente / precedente, piuttosto che sul valore effettivo. Immagino che questo potrebbe essere un po 'più intuitivo per gli utenti.
  • Se non lo sei già, potresti provare a aggiornare dinamicamente i tuoi valori min / max / step in base al valore corrente, anziché al valore precedente.
  • Se la dimensione del tuo passo non deve essere costante, prova ad aumentarla in base alla differenza tra il valore corrente e il valore precedente.
  • Potresti essere in grado di trarre qualche vantaggio da legge di Benford : utilizza una dimensione di passo minore se la prima cifra del valore attuale / precedente più bassa. Fondamentalmente potresti provare ad usare una gamma più piccola e amp; dimensione del passo se la prima cifra è inferiore. Ciò potrebbe però confondere gli utenti!

... Dove per valore corrente intendo il valore attualmente selezionato. Con valore precedente intendo il valore com'era quando l'utente ha iniziato a manipolarlo (cioè, cliccato su di esso nell'esempio Tangle.js).

    
risposta data 13.02.2013 - 18:20
fonte

Leggi altre domande sui tag