Visualizing Livello superfici
-
10-10-2019 - |
Domanda
Sto cercando di sviluppare un visualizzatore superficie piana utilizzando questo metodo (non so se questo è il metodo standard o se c'è qualcosa di meglio):
-
1. Prendere qualsiasi funzione
f(x,y,z)=k
(dove k è costante), e dai limiti per x, y, z. Anche prendere in due parametri di rete StepX e Stepz.
-
2. ridurre ad un problema curva di livello, iterare da zmin a Zmax con intervalli Stepz. così
f(x,y,z)=k => f(x,y,fixedZ)=k
-
3. Eseguire la stessa procedura con StepX, riducendo il problema a
f(fixedX, y, fixedZ)=k
-
4. risolvere
f(fixedX, y, fixedZ) - k = 0
per tutti i valori di y che soddisfi l'equazione (utilizzando qualche tipo di un calcolo di uno zero di una funzione).
-
5. Per tutti i punti generati, tracciare quelli come curva di livello (il ciclo interno genera curve di livello in un determinato z, poi per diversi valori di z ci sono solo pile di curve di livello)
-
6 (opzionale). Generare una maglia da queste curve di livello / punti che appartengono al livello impostato.
Il problema che sto funzionando in è con il passaggio 4. Non ho modo di sapere prima di mano il numero di possibili valori di y soddisferanno che l'equazione (più specificatamente, il numero di valori unici e reali di y).
Inoltre, sto cercando di mantenere il programma più generale possibile quindi sto cercando di non limitare la funzione f(x,y,z)=k
originale per eventuali vincoli, come levigatezza o polinomiale diverso k deve essere costante come richiesto per una superficie piana.
C'è un algoritmo (senza l'utilizzo di un CAS / solving simbolico) che può identificare la radice (s) di una funzione, anche se ha radici multiple? So che bisezione metodi hanno un momento difficile con questo a causa della possibilità di cambiamenti firma sopra la regione, ma come fa il metodo tariffa secanti / Newton? Che insieme di funzioni possono metodo secanti / newton essere utilizzato su, e possono esso rilevare e trovare tutte le radici reali unici entro due date limiti? O c'è un metodo migliore per la generazione / visualizzazione di superfici piane?
Soluzione
credo di aver trovato la soluzione al mio problema. Ho fatto un po 'di più la ricerca e ha scoperto che il livello di superficie è sinonimo di isosurface. Quindi, in teoria, qualcosa di simile a un metodo di cubetti di marcia dovrebbe funzionare.
Altri suggerimenti
Nel caso in cui hai bisogno di un esempio dei cubi algoritmo di marcia, controlla
http://stemkoski.github.com/Three.js/Marching- Cubes.html
(utilizza JavaScript / Three.js per la grafica).
Per maggiori dettagli sulla teoria, si dovrebbe verificare l'articolo a
Un modo semplice,
2D: plot (x, y) di colore = floor (q * f (x, y)) in scala di grigi, dove q è un fattore arbitrario. 3D: plot (x, y, piano (q * f (x, y))
efficace altezze della funzione che sono equivalenti saranno rappresentare sullo stesso piano.
Se ad ottenere le curve di livello è possibile utilizzare il metodo categorizzazione e il bordo 2D rilevamento / regione per ottenere i punti (x, y) sullo stesso livello.