Come definire il percorso di movimento di un oggetto su una superficie dell'altro?

4

Ho un problema non comune. Ci sono 2 oggetti 3D, che sono rappresentati da matrici di vertici e triangoli (file .stl). Ciascuno di essi contiene una quantità sufficiente di vertici: 1-10 mln. Le superfici di questi modelli sono ruvide e possono contenere diversi spuntoni o cavità.

L'obiettivo è determinare il percorso di uno di questi oggetti, quando si muove con il contatto sulla superficie dell'altro. Inoltre, l'algoritmo dovrebbe considerare quanti gradi di libertà sono disponibili. In ogni caso ci sono solo 2 oggetti e uno di essi è fisso.

Esempio, l'oggetto M1 si sposta su una superficie dell'oggetto M2 , che è fisso. È necessario spostare M1 dal punto A a B . Per M1 è disponibile anche un altro grado di libertà: lungo l'asse (chiamiamolo AC ) perpendicolare a AB . Quindi, il percorso può essere solo la curva nel piano (AC, AB) . Ma a causa di questo percorso, durante il movimento M1 dovrebbe sempre avere almeno un punto di contatto.

Ho provato a eseguirlo con l'algoritmo di rilevamento delle collisioni, ma sembra che si tratti di calcoli molto complicati per i computer ordinari. Qualcuno può consigliare alcuni algoritmi, librerie o concetti su come realizzare questa idea? Post scriptum Io uso C, C ++ e Java.

    
posta Eugene 31.07.2014 - 15:34
fonte

1 risposta

2

Un problema è capire come può muovere l'oggetto libero (ad esempio capovolgi lungo un asse o movimenti di traslazione). L'altro problema è determinare fino a che punto può muoversi l'oggetto libero, dove fa nuovamente contatto con l'oggetto fisso (cioè il rilevamento di collisione).

Suppongo che questo rilevamento delle collisioni sia il collo di bottiglia. È possibile ridurre notevolmente il numero di calcoli necessari se si semplifica la forma degli oggetti (ad esempio, ridurre il numero di vertici). Tuttavia, l'oggetto semplificato deve essere più grande dell'oggetto reale. Quando si esegue il rilevamento delle collisioni, si inizia con una copia del modello ridotto. Quando trovi una collisione, aggiungi i vertici ecc. Dal modello di dettaglio completo alla copia, ma solo nella regione attorno alla collisione! Quindi riprendi il rilevamento delle collisioni con tutti i dettagli. Per il movimento successivo, riavvii il rilevamento delle collisioni con una nuova copia del modello a dettaglio ridotto.

Questa strategia di dettaglio dinamico può essere sovrapposta più volte. Se ogni livello ha solo la metà del numero di vertici rispetto al livello precedente, ridurre il numero di vertici da 10 milioni a meno di mille richiederebbe 14 livelli di dettaglio. Meno vertici significa meno calcoli da eseguire durante il rilevamento delle collisioni, sebbene la memorizzazione di più livelli richieda più memoria.

    
risposta data 31.07.2014 - 18:22
fonte

Leggi altre domande sui tag