Come posso concentrare i punti in aree con curvatura più elevata?


11

Come posso distribuire punti su una superficie implicita, per concentrarli più densamente in aree con curvatura più elevata?

Ho preso in considerazione l'aggiunta di punti in modo casuale e il rifiuto di punti non richiesti in base alla curvatura, ma mi piacerebbe sapere se esiste un approccio migliore che dia una distribuzione più uniforme su aree di curvatura simile, pur fornendo la densità più alta richiesta in alta regioni di curvatura.

Sto specificamente cercando di utilizzare questi punti per una triangolazione della superficie e non voglio creare più triangoli di quelli necessari per parti relativamente piatte.


Questo verrà applicato alle forme con una derivata nota in modo da poter calcolare la curvatura in un determinato punto.

Questo non deve essere un approccio in tempo reale.


Stai cercando un modo più preciso per campionare da una distribuzione, senza test di montecarlo intendo? Se non ti interessa molto l'approccio computazionale (cioè stai cercando un approccio accurato piuttosto che lo sforzo computazionale), potrei avere una soluzione, ma ovviamente potrebbe essere ottimizzata.
user8469759

3
Conosci la funzione analitica o puoi solo campionarla? Conosci la sua derivata analitica?
Julien Guertault,

@JulienGuertault La mia modifica chiarisce?
trichoplax,

@Lukkio Vorrei prima la precisione, poi l'ottimizzazione può arrivare dopo che l'approccio funziona.
trichoplax,

1
Potresti voler dare un'occhiata ai metodi agli elementi finiti , che usano anche la triangolazione (o più in generale: simplices) e spesso affrontano il problema di aver bisogno di una densità di campionamento più elevata in regioni selezionate. Sono tenuti ad avere sviluppato algoritmi per questo.
Wrzlprmft,

Risposte:


11

L'idea che vorrei provare ad applicare sarebbe la seguente: faccio l'esempio per la curva, ma dovrebbe essere semplice per l'applicazione per la superficie.

Diciamo che abbiamo una curva parametrizzata in modo uniforme. Diciamo che il parametro della curva è s . Il tuo obiettivo è di campionare il punto corrispondente al valore di s in modo che la curvatura sia alta.γss

Se ottieni la grandezza della curvatura , anche questa sarà funzione di s . Quindi, se si normalizza la funzione | c | , otterrai una distribuzione di probabilità. Se ottieni l'integrale di tale distribuzione, avrai la distribuzione cumulativa. Chiamiamo questa funzione cumulativa C ( s ) .cs|c|C(s)

Il problema di campionamento da una distribuzione data dalla funzione cumulativa è ben noto, quindi sostanzialmente una volta che hai campionato un set di valori , tale valore sarà correlato ai punti di interesse.s0,s1,,sn

L'applicazione di questo metodo al caso della superficie dovrebbe essere diritta, poiché in pratica si ha una funzione di distribuzione cumulativa bidimensionale, ma il problema del campionamento è esattamente lo stesso.

Giusto per dare qualche dettaglio, è fondamentalmente il campionamento da una distribuzione dato che la funzione cumulativa prevede due passaggi:

  1. accetta un valore casuale nell'intervallo , diciamo k[0,1]k

  2. risolvere l'equazione .C(s)=k

Questo approccio è esatto, ovviamente è costoso, ma se ti piace tale approccio puoi lavorare sull'ottimizzazione.


1
Nessun supporto in lattice ancora.
joojaa,

Stavo cercando qualcosa che potesse essere usato con una superficie implicita anche se non ha una parametrizzazione. È sempre possibile parametrizzare una superficie implicita se la derivata è nota?
trichoplax,

Qualsiasi domanda che trarrebbe beneficio da MathJax per le formule può essere aggiunta a questa meta risposta per aumentare le nostre possibilità di ottenere MathJax. (Questo è già stato aggiunto.)
trichoplax,

Ricorda che ciò di cui hai bisogno è la funzione di distribuzione derivata dalla curvatura, hai detto che puoi derivare tutto (a proposito che tipo di superficie hai? Cioè l'equazione). Comunque ... cosa intendi con "derivato conosciuto"? conosci una formula esplicita della derivata? o è anche implicito? (ovvero descritto mediante equazione differenziale)?
user8469759

1
A proposito ... se la curva / superficie è algebrica (intendo espressa da personale polinomiale o razionale) ci sono metodi computazionali basati su bspline / nurbs che spiegano come eseguire la parametrizzazione di tali curve. Ho dato un'occhiata qui docs.lib.purdue.edu/cgi/… , ulteriori metodi (anche avanzati) sono stati trovati in uno dei miei libri preferiti su Nurbs (The NURBS di Tiller).
user8469759

2

Un buon punto di partenza è il classico documento Uso delle particelle per campionare e controllare le superfici implicite , pubblicato in SIGGRAPH 1994.

Una semplice simulazione di particelle descritta nel documento Campionamento di oggetti impliciti con sistemi di particelle a base fisica ( Computers & Graphics , 1996) per curve funziona anche per superfici; vedere Texture dinamica per superfici implicite per esempi.

Per un esempio più recente, vedere Rappresentazione di forme e tonalità per superfici implicite ( Computer e grafica , 2011).


2

Il seguente approccio ingenuo probabilmente non produrrà punti così ben distribuiti come quelli forniti da Lhf , ma dovrebbe essere molto più facile da implementare e computazionalmente più veloce:

xyd(x,y)xyxy

A

  1. xd(x,x)

  2. A

  3. A

    1. xyA
    2. zd(x,y)A
    3. zd(x,y)A

      • se sì, scartalo.
      • xzyzzA

A

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.