Strutture dati per memorizzare movimenti di dita / stilo nell'applicazione di disegno?

6

Ho una domanda generale sulla creazione di un'applicazione di disegno, la lingua potrebbe essere C ++ o ObjectiveC con OpenGL. Mi piacerebbe sapere quali sono i metodi e le pratiche migliori per la memorizzazione dei dati dei tratti. Pensa alle numerose app per iPad che ti consentono di disegnare con le dita (o uno stilo) o altre funzioni simili su un'app desktop.

Per riassumere, la struttura dei dati deve:

  • sii molto reattivo al movimento
  • memorizza valori precisi (chiudi nello spazio / tempo)
  • utilizzabili per il rendering dei tratti con trame complesse (trame in base alla dinamica del tratto, ecc.)
  • esportabile in un file di testo per il salvataggio / caricamento
posta mαττjαĸøb 10.10.2012 - 18:19
fonte

2 risposte

3

Indipendentemente dalla struttura dei dati che utilizzi, può essere utile rimuovere i punti di dati non necessari utilizzando un algoritmo come Algoritmo Ramer-Douglas-Peucker . Prenderà una curva a tratti lineare e rimuoverà punti che deviano meno di una piccola quantità dalla curva in generale. In questo modo, se il tuo utente disegna una linea più o meno dritta, non memorizzerai tutti i punti intermedi in cui il dito è stato.

Il problema è come semplificare e uniformare le curve lineari a tratti. C'è un documento gratuito qui Smoothing efficiente di tratti lineari a tratti con minima deviazione (c'è un collegamento PDF a destra).

Come menzionato dalla World Engineer nella sua risposta, la grafica vettoriale è un'opzione. SVG è un formato popolare ed è basato su XML, quindi è facile da manipolare con gli strumenti esistenti. Insieme ai semplici "punti", può gestire i percorsi (Bézier ed ellittico), il testo, le forme, le informazioni sullo stile (tratto, ecc.) E molto altro. SVG ti offre gli strumenti per rendere il disegno dell'utente esattamente come desideri. Le immagini SVG sono supportate anche nella maggior parte dei browser. Inoltre, poiché è un formato ben stabilito, sono sicuro che ci sono un sacco di librerie esistenti per manipolare le immagini, es. simple-svg . Oppure c'è sempre un buon vecchio bitmap.

Immagino che il processo sarebbe qualcosa di simile a:

  1. Attendi che l'utente disegna una curva
  2. Semplifica la curva (tanto o quanto vuoi)
  3. Rendi la curva, il percorso, la forma, ecc. semplificati sulla tela usando lo stile selezionato.
risposta data 11.10.2012 - 01:37
fonte
1

Consiglierei di memorizzarlo come immagine grafica vettoriale. Ci sono strutture di dati che fanno questo tipo di thing . Per quanto riguarda la precisione, la grafica vettoriale è molto precisa. La risposta sarà in gran parte una questione di implementazione mantenendo il sovraccarico e il blocco al minimo.

    
risposta data 11.10.2012 - 00:21
fonte

Leggi altre domande sui tag