Algoritmi e Strutture Dati per la Modellazione Interattiva...

136
UNIVERSIT ` A DEGLI STUDI DI PISA Facolt` a di Scienze Matematiche Fisiche e Naturali Corso di Laurea Specialistica in Informatica Tesi di laurea Algoritmi e Strutture Dati per la Modellazione Interattiva di Tagli su Oggetti Deformabili Candidato: Nico Pietroni Relatori: Dott. P. Cignoni Dott. F. Ganovelli Controrelatore: Prof. Francesco Romani Anno Accademico 2002/03

Transcript of Algoritmi e Strutture Dati per la Modellazione Interattiva...

UNIVERSITA DEGLI STUDI DI PISA

Facolta di Scienze

Matematiche Fisiche e Naturali

Corso di LaureaSpecialistica in Informatica

Tesi di laurea

Algoritmi e Strutture Dati per la

Modellazione Interattiva di Tagli su

Oggetti Deformabili

Candidato:

Nico Pietroni

Relatori:

Dott. P. Cignoni

Dott. F. Ganovelli

Controrelatore:

Prof. Francesco Romani

Anno Accademico 2002/03

Prova a riconoscere i differenti poliedri presenti nel quadro di M.C Escher.

Ringraziamenti

Il primo ringraziamento va alla mia famiglia ed in particolare ai miei geni-

tori per la fiducia mostrata durante questi anni di studio. Un grazie speciale

a Paola per il grande affetto donato durante questi giorni di scleri. Grazie a

Dinstensao per avermi mostrato la via del magico mondo dell’Universita di

Pisa. Grazie a Fabio, Paolo e Mr.Mendoza (che parla ispano-franco-italiano)

per l’aiuto offerto durante lo svolgimento di questa tesi. Non posso dimen-

ticare infine di includere nei ringraziamenti tutta casa Notari, gli amici di

Sangi e Roncordi per l’energia creativa che mi hanno dato.

Algoritmi e Strutture Dati per la Modellazione Interattiva

di Tagli su Oggetti Deformabili

Nico Pietroni

Dipartimento di Informatica

Universita di Pisa

Sommario

Nel campo della simulazione del comportamento di oggetti deformabili,

uno dei problemi aperti e quello della modellazione e simulazione di tagli.

Questa tesi presenta delle strutture dati ed algoritmi per simulare interatti-

vamente l’applicazione di tagli su oggetti deformabili rappresentati con mesh

volumetriche tetraedrali.

L’algoritmo puo simulare l’effetto dell’azione di taglio sulla superficie con di-

versi livelli di dettaglio, permettendo di bilanciare precisione e performance

in base ad una misura dell’errore percepito dall’utente. La scelta di model-

lare le modifiche sugli oggetti per mezzo di operatori atomici permette di

allocare le risorse di calcolo disponibili con un’alta granularita.

Indice

1 Introduzione 1

1.1 Schema generico di un simulatore . . . . . . . . . . . . . . . . 4

1.2 Obiettivi della tesi . . . . . . . . . . . . . . . . . . . . . . . . 6

1.3 Organizzazione della tesi . . . . . . . . . . . . . . . . . . . . . 7

2 Stato dell’arte 8

2.1 Modellazione del tessuto . . . . . . . . . . . . . . . . . . . . . 8

2.1.1 Concetti di base . . . . . . . . . . . . . . . . . . . . . . 9

2.1.2 Elasticita lineare . . . . . . . . . . . . . . . . . . . . . 10

2.1.3 Modelli continui: FEM . . . . . . . . . . . . . . . . . . 12

2.1.4 Modelli discreti . . . . . . . . . . . . . . . . . . . . . . 14

2.1.5 Particle systems . . . . . . . . . . . . . . . . . . . . . . 14

2.1.6 Il modello Mass Spring . . . . . . . . . . . . . . . . . . 15

2.1.7 Modelli ibridi: Tensor mass . . . . . . . . . . . . . . . 16

2.1.8 Tensor Mass e Mass Spring a confronto . . . . . . . . . 18

2.1.9 Modelli continui e modelli discreti . . . . . . . . . . . . 18

2.2 Definizione di mesh tetraedrali . . . . . . . . . . . . . . . . . . 19

INDICE ii

2.3 Utilizzo di mesh tetraedrali nella rappresentazione dei modelli 20

2.4 Modifiche geometriche e topologiche . . . . . . . . . . . . . . 21

2.4.1 Il taglio di una mesh tetraedrale . . . . . . . . . . . . . 22

2.4.2 Modifiche topologiche nella mesh tetraedrale . . . . . . 23

2.4.3 Approccio con distruzione di tetraedri . . . . . . . . . 24

2.4.4 Approccio con duplicazione di facce . . . . . . . . . . . 24

2.4.5 Approccio con suddivisione di tetraedri . . . . . . . . . 25

2.5 Metodi di integrazione numerica . . . . . . . . . . . . . . . . . 28

2.5.1 Metodi di Runge Kutta . . . . . . . . . . . . . . . . . 30

2.5.2 Metodi impliciti . . . . . . . . . . . . . . . . . . . . . . 31

3 Tecniche di taglio su mesh tetraedrali 33

3.1 Strutture dati e algoritmi per mesh tetraedrali . . . . . . . . . 34

3.1.1 Relazioni di adiacenza . . . . . . . . . . . . . . . . . . 36

3.1.2 Operatori di navigazione sulla mesh . . . . . . . . . . . 42

3.2 Modifiche topologiche: tagli . . . . . . . . . . . . . . . . . . . 50

3.2.1 Gli operatori di taglio . . . . . . . . . . . . . . . . . . 52

3.2.2 Problemi connessi all’uso degli operatori di taglio . . . 53

3.2.3 Vertex-split . . . . . . . . . . . . . . . . . . . . . . . . 56

3.2.4 Edge-split . . . . . . . . . . . . . . . . . . . . . . . . . 64

3.2.5 Riassegnamento dei parametri fisici dopo il taglio . . . 70

3.3 Semplificazione . . . . . . . . . . . . . . . . . . . . . . . . . . 71

3.3.1 Edge Collapse . . . . . . . . . . . . . . . . . . . . . . . 73

3.3.2 Correttezza topologica . . . . . . . . . . . . . . . . . . 74

INDICE iii

3.3.3 Correttezza geometrica . . . . . . . . . . . . . . . . . . 76

3.3.4 Riassegnamento dei parametri fisici dopo la semplifi-

cazione . . . . . . . . . . . . . . . . . . . . . . . . . . 78

3.3.5 Implementazione della decimazione . . . . . . . . . . . 78

4 La modellazione del contatto 81

4.1 Collision Detection . . . . . . . . . . . . . . . . . . . . . . . . 81

4.1.1 Tecniche di Collision Detection . . . . . . . . . . . . . 82

4.1.2 La Collision Detection nella simulazione chirurgica . . 83

4.1.3 La Collision Detection con hardware grafico . . . . . . 84

4.1.4 L’intersezione geometrica . . . . . . . . . . . . . . . . . 89

4.2 Il contatto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

4.2.1 Le forze di di deformazione . . . . . . . . . . . . . . . . 92

4.2.2 Approccio con molla . . . . . . . . . . . . . . . . . . . 93

4.2.3 Approccio con Force Grid . . . . . . . . . . . . . . . . 94

4.2.4 Approccio con spostamento delle facce . . . . . . . . . 95

4.3 Il taglio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

4.3.1 Modellazione del taglio guidata dall’errore . . . . . . . 98

4.3.2 Vertex-split, calcolo della sezione di taglio . . . . . . . 101

5 Risultati sperimentali e sviluppi futuri 104

5.1 Risultati sperimentali . . . . . . . . . . . . . . . . . . . . . . . 104

5.2 Sviluppi futuri . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

5.2.1 Interazione con un solido . . . . . . . . . . . . . . . . . 109

5.2.2 Lacerazioni . . . . . . . . . . . . . . . . . . . . . . . . 110

INDICE iv

5.2.3 Self Collision . . . . . . . . . . . . . . . . . . . . . . . 111

5.2.4 Sutura . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

5.3 Conclusioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

5.4 Alcune immagini del simulatore . . . . . . . . . . . . . . . . . 115

Capitolo 1

Introduzione

Questa tesi affronta il problema della simulazione realistica dell’interazio-

ne con oggetti deformabili mediante contatto con particolare riferimento al

campo di applicazione della chirurgia virtuale.

Con l’aggettivo deformabile si indica un oggetto la cui forma cambia in

modo sensibile se sottoposto ad uno stress. La difficolta principale nel mo-

dellare questo tipo di oggetti e il costo computazionale di simulare il com-

portamento fisico del materiale, infatti solo nell’ultimo decennio l’evoluzione

delle macchine calcolatrici ha reso possibile l’implementazione delle prime

applicazioni interattive anche su personal computer.

La ricaduta applicativa di maggior rilievo in questo campo e quella della

modellazione di scenari chirurgici a scopo didattico e di addestramento. In

questo contesto si introduce la necessita di modellare non solo la deformazio-

ne ma anche il taglio interattivo del materiale. Questo requisito ha generato

una serie di problemi sia nella modellazione della fisica, sia nel rilevamen-

to del contatto e delle collisioni con altri oggetti sia, in modo minore, nella

visualizzazione, poiche tutte le soluzioni proposte in questo campo si sono

sviluppate nell’ipotesi che la topologia degli oggetti simulati rimanga inva-

riata e che questi possano essere sempre rappresentati con lo stesso modello

geometrico.

Il contributo principale di questa tesi e la definizione e implementazio-

2

ne di strutture dati ed algoritmi per rappresentare oggetti deformabili che

possono subire interattivamente tagli o lacerazioni. I problemi da affrontare

sono i seguenti:

frammentazione Gli oggetti sono rappresentati come un complesso di pri-

mitive geometriche, nella maggior parte dei casi tetraedri, e l’applica-

zione di tagli inevitabilmente porta ad un incremento del loro numero,

con conseguente aumento del costo computazionale del tempo simu-

lazione della fisica, che e proporzionale dal numero di primitive che

compongono l’oggetto;

frame-rate costante L’aggiornamento della vista ad una frequenza non in-

feriore ai 20Hz e un requisito irrinunciabile per poter definire un’opera-

zione interattiva. Mentre il costo di un passo di simulazione della fisica

e costante per tutti i passi, quello di aggiornare la topologia dipende da

quanta parte dell’oggetto e interessata al taglio ed anche alla velocita

con cui tale taglio viene effettuato, quindi si va ad aggiungere come

overhead e in generale puo causare un rallentamento percepibile della

simulazione;

L’approccio seguito si basa su due strategie. La prima e quella di definire

algoritmi basati sulla concatenazione di operazioni atomiche che occupino un

tempo trascurabile e terminino lasciando il sistema in uno stato corretto e

consistente, cosı da ottenere algoritmi interrompibili. La seconda e di avere

piu modi di rappresentare uno stesso taglio, con diversa accuratezza visiva

e costo computazionale, e di poter valutare l’errore percepito dall’utente in

modo da scegliere un modo meno accurato ma piu veloce di rappresentare il

taglio se la differenza in termini di immagine sullo schermo e trascurabile. Al

fine di valutare sperimentalmente le soluzioni proposte si e implementato un

3

prototipo di simulatore che consente all’utente di gestire il bisturi virtuale ed

interagire con gli oggetti che compongono la scena deformandoli e tagliandoli.

1.1 Schema generico di un simulatore 4

Figura 1.1: Schema generico di un simulatore.

1.1 Schema generico di un simulatore

In un simulatore chirurgico l’utente interagisce col modello fisico utilizzando

un tool virtuale (bisturi) . Il contatto tra il tool ed il modello simulato

provochera deformazioni, tagli o lacerazioni di tessuto restituendo sul bisturi

virtuale (tramite periferica) una forza di feedback in modo tale da dare la

sensazione toccare veramente il modello con il tool.

Il simulatore, se analizzato ad alto livello, puo essere composto da una serie

di moduli (Figura 1.1) :

Physical engine Data una descrizione dell’oggetto in termini di geometrie

e di proprieta fisiche del materiale (quali le costanti di elasticita del

materiale cui e composto il modello ) l’engine si occupa di calcolare

quali deformazioni intervengono in conseguenza di sollecitazioni esterne

durante, ad esempio, il contatto con un altro oggetto, e interne, come

la forza di gravita. Il modulo di topological modification si occupa di

modellare le modifiche che intervengono sul modello deformabile (tagli,

1.1 Schema generico di un simulatore 5

lacerazioni. . . ) .

Rendering Questo modulo visualizza gli oggetti che compongono la scena.

Collision detection Il modulo Collision Detection rileva quando esiste un

contatto tra i vari elementi presenti nella scena corrente. Fornisce dati

indispensabili per individuare dove e come sia avvenuto il contatto:

quali siano le entita interessate direttamente, quale sia superficie di

contatto e le forze esercitate tra loro; tutti dati indispensabili all’engine

fisico durante il calcolo e la conseguente deformazione degli oggetti

coinvolti.

Haptic feedback L’interfaccia attraverso cui l’utente interagisce con la sce-

na e costituita di solito da un sistema di force feedback. Questo modulo

deve comunicare col sistema di feedback esterno fornendo al sistema i

dati relativi alla posizione ed all’orientamento del tool nello spazio. Ad

ogni contatto rilevato con il modello deformabile questo modulo utiliz-

zara i dati forniti dall’engine fisico per simulare il contatto tramite una

forza di feedback sull’interfaccia.

Avere una buona frequenza di aggiornamento del sistema (quindi un buon

frame-rate) e l’obiettivo primario da perseguire affinche la simulazione risulti

il piu possibile realistica. I sistemi proposti finora per modellare oggetti

deformabili sono molto efficienti in situazioni in cui il modello non e mai

soggetto a modifiche di tipo topologico (ad esempio i tagli) ; quando pero il

modello viene modificato in tempo reale l’engine fisico deve essere in grado

di reinterpretare e simulare di conseguenza le nuove situazioni.

1.2 Obiettivi della tesi 6

1.2 Obiettivi della tesi

In una simulazione chirurgica l’utente deve essere in grado almeno di tagliare

liberamente il tessuto su cui sta operando. Modifiche topologiche di questo

tipo incrementano la complessita della descrizione del modello aumentan-

do di conseguenza anche il tempo necessario all’engine fisico per simulare il

comportamento dei vari tessuti. La vera difficolta sta fondamentalmente nel

creare sistemi di modifica topologica che non incrementino troppo la descri-

zione del modello fisico, accompagnati tecniche di semplificazione geometrica

che riducano il set di dati su cui dovra lavorare il framework. Le caratteri-

stiche principali del sistema di taglio quı proposto possono essere riassunte

in questi 3 punti fondamentali:

1. Le operazioni non dovranno incrementare inutilmente la complessita del

modello deformabile. Ogni taglio introduce sempre una quantita di in-

formazioni in piu nel modello ; piu informazioni introduce e maggiore e

il realismo fisico dell’azione di taglio; purtroppo pero tutto questo dimi-

nuisce il rate dell’aggiornamento del sistema. Rendere veramente reale

lo scenario per l’utente significa anche avere un sistema che reagisca in

modo istantaneo alle sollecitazioni esterne (il tempo di computazione

non deve essere percepito) . Il giusto bilanciamento tra realta e sem-

plicita sara quindi la filosofia che sta alla base della costruzione degli

operatori di taglio.

2. Le operazioni di modifica saranno accompagnate da operazioni di sem-

plificazione del modello. Questa caratteristica puo far tendere la com-

plessita del modello ad una situazione costante.

3. Le operazioni saranno, nella loro semplicita abbastanza versatili da

consentirne in futuro l’utilizzo nella simulazione altre operazioni (ad

esempio le lacerazioni del tessuto) .

1.3 Organizzazione della tesi 7

1.3 Organizzazione della tesi

Nel capitolo 2 di questa tesi verra illustrato lo stato dell’arte relativo alla

modellazione di oggetti deformabili. In particolar modo verranno illustrati i

possibili modelli matematici utilizzati nella simulazione di oggetti deformabili

e le principali tecniche di rappresentazione di taglio proposte finora.

Nel capitolo 3 verranno presentate inizialmente le strutture dati utilizzate per

la rappresentazione dell’oggetto deformabile oltre alle strutture necessarie ad

effettuare interrogazioni sulle sue proprieta geometriche. Sulla base di queste

strutture verranno poi definite le operazioni di modifica e semplificazione

necessarie all’esecuzione del taglio.

Nel capitolo 4 verra definita in dettaglio l’interazione tra il bisturi e l’oggetto

deformabile mettendo in particolare rilievo le differenze con gli altri metodi

finora utilizzati.

Infine il capitolo 5 sara dedicato all’analisi dei risultati ottenuti e ai possibili

sviluppi futuri del simulatore.

Capitolo 2

Stato dell’arte

La realizzazione di ognuno dei componenti di un simulatore propone problemi

che spaziano in vari campi della computer graphics e della robotica. Questo

capitolo presenta un breve stato dell’arte sul tema, con particolare rilievo sui

problemi studiati in questa tesi.

2.1 Modellazione del tessuto

Un modello deformabile deve reagire in maniera realistica agli stress impo-

sti dagli eventi esterni relativamente alle sue proprieta elastiche e geometri-

che. Nel simulatore che ci proponiamo di realizzare la tecnica adottata per

modellare un tessuto deve soddisfare 2 caratteristiche:

• L’interattivita dell’ applicazione comporta che la deformazione del tes-

suto sia elaborata in tempo reale.

• La possibilita di effettuare tagli impone che il modello sia facilmente

adattabile alle modifiche geometriche.

2.1 Modellazione del tessuto 9

2.1.1 Concetti di base

Ogni modello per una simulazione del comportamento fisico di un oggetto si

basa sulla seconda legge del moto di Newton:

mx + γx +∂Erg(x)

∂u= f (2.1)

dove x indica la posizione del punto di massa m e γ il damping factor, ov-

vero la resistenza al movimento dovuta all’attrito. Il termine ∂Erg(x)∂u

indica

la derivata dell’energia potenziale rispetto alla posizione del punto, infine

f e la forza esterna esercitata sulla massa. Se, ad esempio, il punto fosse

legato all’origine del sistema di coordinate da una molla di coefficiente k e

si stesse muovendo lungo l’asse x, allora E(x) =∫ x0 kudu = 1

2ku2 e quindi

∂Erg(x)∂u

= kx. Supponiamo che un oggetto sia rappresentato da un numero

di punti x0, . . . , xn di massa m0, . . . ,mn, distribuiti in uno spazio continuo.

Se riusciamo a trovare l’equazione dell’energia associata alla posizione di cia-

scuno di questi punti potremmo predire e quindi calcolare il comportamento

dell’oggetto risolvendo le equazioni differenziali risultanti.

Modelli discreti e modelli continui Anche se adesso fossimo in grado

di descrivere il comportamento di questo oggetto per ogni punto attraverso

l’equazione 2.1, bisogna stabilire quale sia l’insieme di punti scelto in modo

tale da descrivere comportamento del modello in maniera adeguata.

Le strategie di rappresentazione di un modello possono essere raggruppate

in due grandi classi: I modelli discreti ed i modelli continui. Nei modelli

discreti la rappresentazione del modello viene ridotta ad un sottoinsieme dei

suoi punti tali da caratterizzare in modo piu realistico possibile le proprieta

meccaniche dell’oggetto. La complessita fisica dell’oggetto richiedera una

distribuzione di punti adeguata: Se ad esempio l’oggetto da rappresentare

avesse la forma di una barra di gomma; il sistema potrebbe essere forma-

to da un insieme di punti uniformemente distribuiti lungo l’estensione della

2.1 Modellazione del tessuto 10

barra; ognuno di essi sarebbe legato agli adiacenti tramite una molla. Piu

complesso e l’oggetto da descrivere e piu complessa sara la definizione dell’e-

nergia. I modelli continui si basano invece su una rappresentazione continua

dell’oggetto formata da infiniti punti distribuiti nello spazio del modello. In

questo caso l’equazione del moto dovra essere riscritta come :

µ(u)x + λ(u)x +∂Erg(x)

∂u= f(x) (2.2)

dove x = x(u, t) e la posizione del punto u al tempo t. Siccome questa equa-

zione e risolvibile per via analitica solo in casi ideali (non e possibile descrive-

re analiticamente la forma di molti oggetti), il problema verra discretizzato

attraverso l’analisi ad elementi finiti.

2.1.2 Elasticita lineare

Quasi tutti i materiali possiedono una certa quantita di di elasticita. Se forze

esterne producono una deformazione che non eccede un certo limite, la de-

formazione scomparira appena le forze saranno rimosse. Lo stress σ, definito

come forza per unita di area e lo strain ε (tensione) , definito come lo spo-

stamento per unita di lunghezza, soddisfano la seguente relazione conosciuta

come la legge di Hook [TG85]:

εx =σx

E(2.3)

dove E e il modulo di elasticita. L’estensione dell’elemento lungo la di-

rezione delle x e accompagnata da componenti laterali di strain (l’oggetto

allungato si contrae e si assottiglia) :

εy = −νυσx

E(2.4)

εz = −νυσx

E(2.5)

2.1 Modellazione del tessuto 11

dove ν e una costante chiamata coefficiente di Poisson. Le equazioni 2.3,

2.4 e 2.5 possono essere utilizzate anche per descrivere forze di compressione

sul modello (il modulo di elasticita ed il coefficiente di Poisson sono gli stessi

che in caso di tensione) . Le due costanti E e ν definiscono completamente

le proprieta elastiche di un corpo.

L’Energia elastica Prima di tutto definiamo il piu semplice modello bio-

meccanico: il modello elastico lineare. Denotiamo come Minitial il modello

allo stato iniziale.

Sotto eventi esterni il modello si deforma. Rappresentiamo la deformazione

di un modello dalla sua forma iniziale con un vettore di spostamento U(x, y, z)

con (x, y, z) ∈ Minitial; quindi:

Mdeformed = Minitial + U(x, y, z) (2.6)

L’energia elastica Welastic misura la quantita di deformazione di Mdeformed

e puo essere espressa come[CA99]:

Welastic = λ2(trE)2 + µ(trE)2 (2.7)

dove:

• la matrice 3 x 3 simmetrica E, detta anche green tensor e definita come:

E =1

2(∇U +∇UT ) (2.8)

• λ e µ sono i coefficienti di Lame che caratterizzano la rigidezza di un

materiale, definiti come:

λ =νE

(1 + ν)(1− 2ν)(2.9)

2.1 Modellazione del tessuto 12

µ =E

2(1 + ν)(2.10)

dove E e ν rappresentano il modulo di elasticita ed il coefficiente di

Poisson.

2.1.3 Modelli continui: FEM

Questa sezione e dedicata principalmente ad illustrare la soluzione proposta

dal metodo ad elementi finiti (FEM)[Zie67]. Il modello sui cui e stata definita

l’equazione 2.1 e composto da masse puntiformi. Questa equazione puo essere

estesa in un dominio continuo: sia Ω il dominio dei punti del volume occupato

dal modello, estendendo l’equazione 2.1 nel continuo otteniamo:∫Ω

∂Erg(x)

∂udu−

∫Ω

fdu = 0 (2.11)

L’energia potenziale dovuta alla deformazione equivale al lavoro esercitato

dalla forza che agisce sul corpo. Consideriamo tale corpo sotto l’azione di

carichi distribuiti, ad esempio la forza di gravita, e sia f la somma di tali

forze. Se il sistema e in equilibrio, quando uno spostamento viene imposto

dall’esterno, il lavoro esterno dato dal carico deve equivalere al cambio di

energia di strain interna del corpo:

1

2

∫Ω[σ]T εdΩ−

∫Ω[σ]T pdΩ−

∫§[σ]T q = 0 (2.12)

dove σ e ε sono il vettore di strain e di stress, δ e lo spostamento, p e

la densita della forza nel corpo, q e la densita della forza sulla superficie S

(boundary stress) . Questa situazione non e risolvibile analiticamente, eccetto

per casi ideali. L’idea principale del FEM consiste nel decomporre il dominio

Ω in un insieme di elementi finiti di cui si conosca la descrizione analitica

del dominio di integrazione (e quindi del volume stesso occupato da questi

elementi) . L’integrazione su tutto il dominio, cosı come avevamo descritto

2.1 Modellazione del tessuto 13

precedentemente, sara sostituita dalla sommatoria di tutti gli integrali che

costituiscono gli elementi in cui viene decomposto il modello:

1

2

∑e

∫Ωe

[σ]T εdΩ−∑e

∫Ωe

[σ]T pdΩ−∑e

∫Se

[σ]T qdS = 0 (2.13)

dove Ωe e la parte di dominio locale dell’elemento finito, che sara definito

da un insieme di punti (ad esempio un elemento esaedrale o tetraedrale) .

L’integrazione dell’intero dominio si riduce cosı ad una serie di integrali sui

singoli elementi. Possiamo esprimere lo spostamento δ come interpolazione

lineare di degli spostamenti dei punti che definiscono l’elemento cella. Sia

quindi definita la funzione:

δ = Nδe (2.14)

dove δe e un vettore di spostamenti di nodi con 3 componenti per ogni

vertice. Sostituendo δ in 2.13 possiamo ottenere la formulazione discreta:

Kδ = F (2.15)

Naturalmente i nodi di ciascun elemento sono condivisi dagli elementi

adiacenti, per questo le equazioni non sono indipendenti. La matrice K di

3n × 3n e chiamata matrice di rigidita (Stiffness matrix ) . La soluzione di

questo sistema definisce la posizione dei vertici nello spazio, e quindi la defor-

mazione dell’oggetto. Una volta definita l’energia, diventa di fondamentale

importanza definire la funzione di interpolazione δ. Tale funzione risultera

definita sul tipo di elemento primitivo utilizzato per suddividere il dominio.

L’idea e di approssimare la funzione δ tramite una somma pesata dei vertici

che definiscono la forma della primitiva:

δ(x, y, z) =l−1∑i=0

δihi(x, y, z) (2.16)

2.1 Modellazione del tessuto 14

dove l e il numero di elementi che definiscono la forma (4 per un tetraedro)

. Una funzione di interpolazione deve essere almeno C1 continua lungo gli

spigoli dell’elemento (la tensione non puo essere infinita) . Aumentando la

granularita della suddivisione il metodo tendera verso la soluzione corretta.

2.1.4 Modelli discreti

I modelli discreti rappresentano il comportamento di un materiale attraverso

un insieme di parti meccaniche elementari e un insieme di relazioni tra essi. In

questo tipo si modelli i piu utilizzati sono quelli che si basano su una struttura

di tipo particle system[Wita]; la loro popolarita e dovuta soprattutto alla

semplicita di realizzazione oltre che alla loro versatilita.

2.1.5 Particle systems

I Particle sono oggetti che hanno massa, posizione, velocita, rispondono alle

forze pur non avendo una dimensione spaziale. Nonostante la loro semplicita

i particles possono presentare una grande quantita di caratteristiche inte-

ressanti. Come tutti i corpi il moto delle particle e governato dalla legge

f = m · a. Le particles possono essere messe in relazione tra loro in modo

tale che alcune forze interne vengano trasmesse da un insieme di particles

ad un altro; questa caratteristica puo essere utilizzata per simulare proprieta

meccaniche di un fluido ad esempio, oppure (nel caso non ci sia alcun legame

tra le particelle) di un gas. La semplicita di queste strutture diventa effi-

cienza quando si tratta di simulare il comportamento di strutture non rigide

(deformabili ed interattive nel nostro caso) . Le forze interne si trasmettono

tra le varie particle secondo un modello numerico che simuli l’elasticita del

modello. L’imposizione di una qualsiasi forza esterna al particle system cau-

sera la deformazione del modello ed il conseguente aggiornamento dello stato

delle particelle.

2.1 Modellazione del tessuto 15

1. La situazione iniziale di equilibrio viene perturbata da forze esterne

cambiando la posizione iniziale di un insieme di particles.

2. La forza scaturita si trasmette alle altre particle secondo un modello

elastico lineare.

3. Il solver di equazioni differenziali calcola l’accelerazione la velocita e la

prossima posizione della particle.

4. Il sistema perturbato continua a mutare fino a raggiungere una posi-

zione di equilibrio.

2.1.6 Il modello Mass Spring

Una particolare istanza del Particle system per la modellazione degli ogget-

ti deformabili e il modello Mass spring. In questo modello le particle che

costituiscono il modello sono interconnesse tra di loro tramite molle. Le

connessioni tra particles possono seguire ad esempio una rete spigoli di celle

tetraedrali che descrivano l’intero volume dell’oggetto deformabile. Il valore

della forza interna agente sulla particella Pi assume la forma:

Fi =∑

j∈N(Pi)

kij(‖PiPj‖ − l0ij)PiPj

‖PiPj‖(2.17)

Dove N(Pi) e l’insieme dei vertici Pj adiacenti a Pi, kij e il coefficiente di

rigidita tra i vertici Pi e Pj, l0ij e la lunghezza iniziale della molla tra Pi e Pj.

Il modello Mass spring costituisce nel complesso un metodo abbastanza sem-

plice da implementare; purtroppo la resa dal punto di vista del realismo fisico

e piu scarsa rispetto ai metodi continui come il FEM. Nel FEM la variazio-

ne di energia interna dell’oggetto viene calcolata basandosi sul volume del

dominio di integrazione prescelto all’interno del quale la massa e distribuita

2.1 Modellazione del tessuto 16

in maniera uniforme. Questo tipo di modello fisico costituisce una rappre-

sentazione piu accurata della realta; le differenze col modello Mass Spring

si notano poi in termini di realismo durante la simulazione. Un metodo di-

screto che simuli il comportamento dell’oggetto in maniera piu efficiente e il

modello Tensor Mass.

2.1.7 Modelli ibridi: Tensor mass

Un altro modello discreto (ma che puo essere considerato un modello ibrido)

e il modello Tensor Mass[CA99]. Supponiamo che il volume dell’oggetto

deformabile sia suddiviso in tetraedri (questa rappresentazione sara trattata

piu in dettaglio piu nella prossima sezione) . Denotiamo come Minitial il

modello allo stato iniziale a con P 0i la posizione del vertice i-esimo all’istante

zero. Procediamo in 3 passi:

1. definiamo le equazioni di interpolazione che definiscono il vettore di

spostamento di un punto (x, y, z) dentro al tetraedro Ti come funzione

dei 4 vettori di spostamento dei 4 vertici di Ti.

2. Scriviamo l’energia elastica del tetraedro come funzione dei 4 vettori di

spostamento dei 4 vertici di Ti.

3. Calcoliamo la forza elastica Fi che agisce sul vertice Pi.

Vettore di spostamento Dato Ti, il tetraedro definito dai quattro vertici

Ti(j), j=0,. . . ,3, allora il vettore di spostamento sara definito come:

UTi(x, y, z) =

3∑j=0

bj(x, y, z)P 0Ti(j)PTi(j) (2.18)

Dove bj(x, y, z) sono le coordinate baricentriche del punto (x,y,z) dentro

il tetraedro Ti. Poiche le coordinate baricentriche sono lineari rispetto alle

2.1 Modellazione del tessuto 17

coordinate (x,y,z), la matrice E(x, y, x) definita in 2.8 rimane costante per

ogni punto del tetraedro Ti.

Energia elastica Se λi e µi sono i coefficienti di Lame del tetraedro Ti,

allora possiamo esprimere l’energia elastica Welastic(Ti) del tetraedro Ti come:

WElastic(Ti) = V (Ti)(λi

2(div(U))2 + µitr(∇UT∇U)− µi

2‖curlU‖2) (2.19)

Dove div e la funzione di divergenza, mentre curl e la funzione roto-

re. L’energia totale Welastic(Mdeformed) sara la somma delle energie di ogni

tetraedro.

Forza lineare elastica Data l’espressione dell’energia elastica deriviamo

la forza Fi applicata su un vertice Pi tramite la relazione:

Fi = −∂Welastic(Mdeformed)

∂Pi=

∑Tj∈L(i)−

∂Welastic(Tj)

∂Pi

dove L(i) e l’insieme dei tetraedri adiacenti al vertice Pi. Mentre all’inter-

no del tetraedro la forza FTj(j) applicata sul vertice PTj(j) assume la seguente

forma:

FTj(j) =∑3

k=0[KTijk ]P 0

Ti(k)PTi(k)

dove KTijk e una matrice 3 x 3 chiamata matrice di rigidita definita come:

dato un tetraedro Ti ed i suoi vertici P 0Ti(0)

, P 0Ti(1), P

0Ti(2), P

0Ti(3)

, i sei tensori

sono definiti come:

[KTijk ] = 1

36V (Ti)(λiMkM

Tj + µiMjM

Tk + µi(MjMk)[Id3x3])

dove [Id3x3] e una matrice identita di 3 righe e 3 colonne.

E importante sottolineare come tale matrice dipenda solamente dalle ca-

ratteristiche del materiale (λi, µi) e dalla geometria dell’ oggetto allo stato

2.1 Modellazione del tessuto 18

iniziale (tale matrice non deve essere quindi aggiornata ad ogni passo della

simulazione) .

Per un dato vertice Pi, la forza elastica Fi sara allora la somma dei

contributi FTj(j) dei tetraedri adiacenti Ti:

Fi = [KiiP0i Pi] +

∑j∈N(Pi)[KijP

0j Pj]

dove Kij e la somma dei tensori [KTj

ii ] associati ai tetraedri adiacenti a Pj,

Kij e la somma dei tensori KTj

ij associati ai tetraedri adiacenti attraverso

l’edge (i, j) e N(Pi) e la lista dei vertici vicini a Pj.

2.1.8 Tensor Mass e Mass Spring a confronto

I due metodi hanno la stessa complessita, che risulta lineare rispetto al nume-

ro degli edge (il metodo del tensor mass necessita di qualche calcolo iniziale in

piu nella valutazione della matrice K) . Il modello mass spring si basa su una

rappresentazione discreta e il suo realismo e fortemente influenzato dalla di-

sposizione della rete di molle all’interno volume dell’oggetto. In questo caso,

effettuare un taglio puo significare rimuovere una o piu molle; cio potrebbe

stravolgere notevolmente il comportamento del modello stesso. D’altro lato

il modello tensor mass offre una simulazione piu realistica e, essendo basato

su una descrizione continua del modello, tale metodo viene influenzato in

maniera minore dalla topologia interna della mesh.

2.1.9 Modelli continui e modelli discreti

Il Metodo ad Elementi Finiti, come gia esposto, scompone il volume dell’og-

getto in un insieme di elementi di cui si riesca a descrivere analiticamente

il dominio di integrazione; di fatto di compie quindi una discretizzazione di

un volume; ma la rappresentazione dell’oggetto rimane di fatto sempre con-

tinue e costituita da infiniti punti. Nei metodi discreti invece il modello a

2.2 Definizione di mesh tetraedrali 19

cui facciamo riferimento durante la simulazione e costituito da un insieme di

masse puntiformi che interagiscono tra loro. Partendo da questo tipo di ap-

prossimazione della realta e ovvio che la resa dal punto di vista del realismo

e peggiore di quella dei modelli continui. Per quanto riguarda la complessita

dei calcoli coinvolti nella simulazione risultano piu efficienti i metodi discreti.

In questi metodi la massa e concentrata nelle particelle di dimensione infini-

tesime costituenti il modello, di conseguenza ogni calcolo di forze o energie e

basato sulle proprieta di questo insieme finito di punti. Nei metodi continui

invece la massa e distribuita nei volumi delle celle, il calcolo viene quindi

ripartito ad un insieme di integrazioni sulle singole celle. I modelli discreti

hanno inoltre la importante caratteristica di essere piu flessibili e piu facil-

mente adattabili a modifiche geometriche del modello. Questo deriva dal

fatto che molti dei metodi continui necessitano spesso una significativa pre-

computazione di strutture dati ausiliarie; una eventuale modifica del modello

(ad esempio un taglio) produrrebbe una incoerenza tra i dati e quello che e

la reale condizione dell’oggetto (a meno che tali dati non vengano anch’essi

ricalcolati) .

2.2 Definizione di mesh tetraedrali

Esponiamo alcune definizioni formali utilizzate in seguito.

Definizione 1 Un simplesso σ a d dimensioni e l’insieme dei punti

dati dalla combinazione convessa di d+1 punti linearmente indipendenti (un

segmento per d=1, un triangolo per d=2. . . ) .

Definizione 2 La faccia di un simplesso σ e un simplesso i cui punti

sono un sottoinsieme di σ (un punto e una faccia di un segmento e di un

triangolo, un segmento e una faccia di un triangolo. . . )

2.3 Utilizzo di mesh tetraedrali nella rappresentazione dei modelli 20

Definizione 3 Dato il simplesso σ di dimensione d, le facce proprie di σ

sono l’insieme di facce di dimensione d-1 appartenenti a σ.

Definizione 4 Dati due simplessi σ di dimensione n e σ′ di dimensione

m con (n > m) allora si dice che σ′ ∈ σ se esiste una sequenza di facce

S = F0, F1, . . . , Fn−m tali che F0 = σ′, Fn−m = σ e per ogni Fi ∈ S − Fn−m

Fi e faccia propria di Fi+1;

Definizione 5 Un complesso simpliciale Γ a d dimensioni (o d-

complex) e un insieme di simplessi tali che:

• per ogni simplesso σ appartenente a Γ , tutte le facce di σ appartengono

a Γ.

• per ogni coppia di simplessi σ, σ’ appartenenti a Γ, tali che σ∩σ′ 6= ∅,σ ∩ σ′ e una faccia di entrambi (σ e σ′).

• d e il massimo ordine di simplessi appartenenti a Γ.

Una mesh tetraedrale e un complesso simpliciale di dimensione 3. Ogni faccia

di tetraedro (triangolo) appartene alla mesh. L’intersezione tra 2 tetraedri

adiacenti se non e nulla e una faccia del tetraedro o un edge (segmento)

oppure un punto, in tutti i casi sono facce del tetraedro stesso. In una mesh

di tetraedri non esistono simplessi di ordine maggiore di tre.

2.3 Utilizzo di mesh tetraedrali nella rappre-

sentazione dei modelli

Si possono pensare diversi modi per modellare organi con i quali interagire.

La strategia piu utilizzata e quella di rappresentare gli organi come mesh

tetraedrali irregolari. Tali mesh, sebbene difficili da generare, offrono notevoli

vantaggi:

2.4 Modifiche geometriche e topologiche 21

• Le rappresentazioni basate su dati volumetrici sono superiori in termini

di qualita rispetto agli approcci basati sulla modellazione di superfici

in quanto la deformazione calcolata risulta piu realistica.

• Rispetto ai sistemi basati sui voxel utilizzando mesh tetraedrali la

rappresentazione della superficie e piu accurata.

• Il tetraedro e l’oggetto volumetrico con la topologia piu semplice. In

caso di tagli sul tetraedro stesso la topologia generata risulta la piu

semplice da gestire.

2.4 Modifiche geometriche e topologiche

Il taglio di tessuto e una delle attivita principali effettuate nella chirurgia, il

risultato delle modifiche geometriche conseguenti ad un taglio puo incidere

in modo rilevante sul realismo del processo di taglio stesso e sulla comples-

sita del modello deformabile. Ci sono alcune caratteristiche fondamentali da

rispettare durante la simulazione di un taglio affinche esso risulti realistico:

Accuratezza I tagli devono essere piu fedeli possibile alle forme tracciate

con l’haptic-device dall’utente. Non bisogna costringere mai l’uten-

te a tagliare lungo posizioni prestabilite (come se si muovesse lungo

una griglia) , perche il senso di realismo ne risulterebbe gravemente

compromesso.

Interattivita L’intervallo di tempo che intercorre tra quando l’utente esegue

il taglio e quando questo viene rappresentato non deve essere percepi-

bile.

Frammentazione Le operazioni di taglio tendono ad aumentare la com-

plessita della descrizione del modello, per mantenere il rate di aggior-

2.4 Modifiche geometriche e topologiche 22

Figura 2.1: a) La superficie di taglio compresa tra due istanti successivi t0 e t1. b)

La triangolazione della superficie di taglio.

namento della simulazione costante, il numero dei nuovi elementi creati

deve essere minimo.

2.4.1 Il taglio di una mesh tetraedrale

Prima di definire come si possono effettuare tagli dobbiamo stabilire una

rappresentazione dei bisturi nello spazio; la letteratura esistente a riguardo

descrive il movimento del bisturi come:

Definizione 6 La posizione del bisturi nello spazio e definita da un

segmento (tail,head) che definisce la linea della lama.

Definizione 7 La superficie di taglio St′,t′′ e la superficie (tail, head)t, t ∈ [t′, t′′];

ovvero la parte di spazio spazzata dalla lama nell’intervallo di tempo.

Durante la simulazione la posizione del bisturi e conosciuta ad intervalli di-

screti ∆ t. La superficie di taglio tra due istanti consecutivi e ricavata come

2.4 Modifiche geometriche e topologiche 23

Figura 2.2: a) Approccio con distruzione di tetraedri. b) Approccio con duplicazione

delle facce. c) Approccio con suddivisione di tetraedri.

interpolazione lineare dei due estremi del bisturi. Nel caso pratico, essen-

do l’intervallo temporale piccolo, questo piano puo essere descritto con due

triangoli quasi complanari. La superficie di taglio St′,t′′ sara cosı descritta da

una serie di triangoli (Figura 2.1) .

2.4.2 Modifiche topologiche nella mesh tetraedrale

Gli approcci proposti finora si possono raggruppare in 3 tipologie:

• Approccio con distruzione di tetraedri (Figura 2.2.a) .

• Approccio con duplicazione di facce (Figura 2.2.b) .

• Approccio con suddivisione di tetraedri (Figura 2.2.c) .

2.4 Modifiche geometriche e topologiche 24

2.4.3 Approccio con distruzione di tetraedri

Il taglio viene effettuato eliminando i tetraedri che intersecano con il tool[FDA02].

Cancellando i tetraedri il tempo di calcolo della simulazione naturalmente

diminuisce; come conseguenza pero tale metodo viola i principi fisici di con-

servazione della massa.

Se si utilizza l’approccio con distruzione dei tetraedri per ottenere un effetto

realistico la mesh deve essere molto dettagliata. Alcuni approcci propongono

di dettagliare maggiormente la mesh nei punti dove si effettuano i tagli (per

fare cio dovremmo conoscere in anticipo dove i tagli avverranno) .

2.4.4 Approccio con duplicazione di facce

Il taglio viene effettuato duplicando i nodi, e di conseguenza le facce, che sono

vicini al bisturi[Nie03, MLBdC01], rimuovendo poi le relazioni di adiacenza

lungo il taglio:

• I nodi della mesh piu vicini alla traiettoria di taglio sono spostati in

modo tale che le loro facce interne siano lungo la traiettoria di taglio.

• I vertici che sono stati spostati vengono duplicati ed associati alle

relative facce interne.

Diversamente dall’approccio precedente non c’e perdita di volume, e il nu-

mero di nodi rimane ancora pressoche costante.

La duplicazione dei nodi comporta la modifica della matrice di rigidita so-

lamente dei nodi duplicati; la localita delle modifiche rende questo metodo

facilmente integrabile con i metodi di analisi ad elementi finiti. Muovere i

nodi nella mesh significa cambiare la posizione di energia minima, invalidan-

do cosı la simulazione per tali nodi. Piu grandi saranno le distanze tra le

particle e maggiore sara lo spostamento da effettuare; tale spostamento puo

provocare in alcuni casi comportamenti anomali.

2.4 Modifiche geometriche e topologiche 25

2.4.5 Approccio con suddivisione di tetraedri

Il taglio viene effettuato suddividendo i tetraedri che sono intersecati dal

tool[GCMS00, BMG99].

Definizione 8 Dato un tetraedro σ ∈ Γ e una superficie di taglio S tale che

S ∩ σ 6= ∅, chiamiamo sostituzione valida una sostituzione di σ con un

insieme di elementi T tali che:

• ∀σ′ ∈ T, S ∪ σ′ ⊂ δσ′: non c’e intersezione propria tra la superficie dei

taglio ed ognuno dei tetraedri di T.

• Ω(σ) =⋃

σ′∈T Ω(σ′): Il volume occupato dall’insieme dei tetraedri in T

e lo stesso volume che occupava σ.

• Γ \ σ ∪ T e un complesso simpliciale.

Definizione 9 L’operatore di taglio e una funzione tale che, utilizzando

una superficie di taglio S ed una mesh Γ, applica una azione di sostituzione

valida a tutti i tetraedri σ ∈ Γ intersecati da S

In questo metodo assumiamo innanzitutto che che la superficie di taglio

interseca un tetraedro se e solo se taglia uno dei suoi edge, inoltre se appros-

simiamo S∩σ con una superficie, la suddivisione del tetraedro sara piu facile

da trovare che nel caso generale.

Suddivisione di un tetraedro Date le precedenti assunzioni ci sono solo

5 modi in cui gli edge di un tetraedro possono essere intersecati da una

superficie di taglio, queste sono chiamate configurazioni di taglio ( Figura

2.3 ).

Nelle prime due configurazioni S interseca rispettivamente 3 e 4 spigoli,

dividendo il tetraedro in due parti, mentre negli altri casi il tetraedro e inter-

secato senza essere diviso completamente. Questa soluzione mira a cercare

2.4 Modifiche geometriche e topologiche 26

Figura 2.3: Suddivisioni possibili di un tetraedro

la suddivisione valida che crei il minor numero possibile di tetraedri.

Per fare questo si utilizza una tabella, chiamata look up table che viene in-

dirizzata dagli edge intersecati dalla superficie di taglio. Per ogni possibile

configurazione di taglio scriviamo nella lookup table quali vertici andranno

inseriti e quali facce del tetraedro andranno divise, preservando per costru-

zione le proporieta del complesso simpliciale. La terza condizione per una

sostituzione valida puo essere riscritta come:

• T e un complesso simpliciale.

• T ∩ (Γ \ σ) e un complesso simpliciale.

Le facce del tetraedro diviso dal piano di taglio devono essere suddivise

in triangoli (si puo notare che nelle divisioni mostrate nell’esempio di Figura

2.3 si crea sempre almeno faccia che non e piu un triangolo) . In pratica, il

problema resta nei bordi della nuova triangolazione che sono condivisi con

il resto della mesh. Affinche le proprieta del complesso simpliciale vengano

2.4 Modifiche geometriche e topologiche 27

Figura 2.4: a) La superficie di taglio raffigurata in puo essere triangolarizzata nelle

due maniere riportate in b) . c) Una faccia che non e completamente

divisa d) Faccia in cui due spigoli vengono divisi

preservate i tetraedri che hanno facce in comune con il tetraedro suddiviso

andranno a loro volta suddivisi in modo tale che l’intersezione tra di essi sia

ancora una volta una faccia. Le Figure 2.4.a 2.4.b e mostrano un caso prati-

co: supponiamo che la superficie di taglio intersechi due tetraedri adiacenti

σ1 e σ2 nei punti a,b,c,d. Dopo due sostituzioni valide i due tetraedri sono

sostituiti rispettivamente dagli insiemi T1 e T2. Siccome la faccia (p1, p2, p3)

e condivisa da σ1 e σ2 le nuove facce (a, b, p2) e (p1, a, b, p3) andranno trian-

golarizzate nella giusta maniera. Nell’esempio illustrato due triangolazioni

sono possibili per la faccia (p1, a, b, p3), introducendo lo spigolo (p1, b) oppure

(a, p3).

In generale il problema viene risolto garantendo una triangolazione fissa

in questi casi. Osserviamo che la faccia condivisa f puo trovarsi solo in due

2.5 Metodi di integrazione numerica 28

situazioni:

• Solo uno spigolo di f viene diviso.

• Due spigoli di f vengono divisi.

Nel primo caso viene generato un poligono a 6 vertici, esso viene triango-

larizzato utilizzando le diagonali che connettono il nuovo vertice a con i tre

vertici p1, p2, p3. Nel secondo caso viene generata una faccia triangolare ed

un quadrilatero. Utilizzando un ordine totale dei vertici sceglieremo in modo

univoco la stessa diagonale. A seconda dell’ordine in cui sono messi i vertici

possiamo quindi avere differenti divisioni per la stessa configurazione di ta-

glio. Alla fine otterremo una lookup table di 33 entrate. Chiaramente ogni

caso va considerato per ogni possibile rotazione del tetraedro ( ad esempio il

caso A genera 4 differenti tipi di taglio, ognuno per ogni possibile rotazione

del tetraedro) .

2.5 Metodi di integrazione numerica

I vertici che compongono l’oggetto deformabile si muovono in relazione alle

forze interne scaturite durante la deformazione. Utilizzando le equazioni

del moto possiamo essere in grado di stabilire, conoscendo le forze interne

al modello, la posizione di ciascun vertice v in un istante di tempo t. Per

risolvere le equazioni del moto dobbiamo risolvere delle equazioni differenziali

di secondo grado.

Ogni equazione differenziali con grado maggiore di uno puo essere riscritto

in un sistema di equazioni di primo ordine, il problema si riconduce quindi

alla soluzione del sistema[Witb]:

x(t) = φ(x, t) (2.20)

2.5 Metodi di integrazione numerica 29

Figura 2.5: In alto a sinistra viene raffigurato un esempio di taglio di tipo A: i tre

spigoli intersecati dalla superficie di taglio producono il numero 42 utiliz-

zato per accedere alla lookup table che definisce l’insieme dei 4 tetraedri

utilizzati per la sostituzione. In basso a destra viene raffigurato lo schema

necessario all’interpretazione del numero dei vertici restituiti dalla tabella;

infine in basso a sinistra la decomposizione nei 4 tetraedri.

2.5 Metodi di integrazione numerica 30

I metodi piu utilizzati per la risoluzione numerica di questi sistemi id

equazioni sono i metodi di Runge Kutta.

2.5.1 Metodi di Runge Kutta

L’idea base e quella di esprimere x(t + h) utilizzando la serie di Taylor :

x(t + h) = x(t) + hx′(t) +h2

2!x′′(t) +

h3

3!x′′′(t) +

hn

n!

dnx

dtn(2.21)

Assumendo che x(t) sia C∞, possiamo troncare questa serie ad un dato

termine, ad esempio il secondo:

x(t + h) = x(t) + hx′(t) + O(h2) (2.22)

Otterremmo cosı una approssimazione di x(t + h) con un errore O(h2).

Chiamiamo φ la funzione che calcola x′ possiamo scrivere la formula prece-

dente come:

x(t + h) = x(t) + hφ(x, t) + O(h2) (2.23)

Questa approssimazione del metodi di Runge-Kutta al primo ordine vie-

ne chiamato anche metodo di Eulero. Il metodo di Runge-Kutta al secondo

ordine viene ottenuto troncando la serie al terzo termine della serie. L’appros-

simazione di x(t + h) generera un errore O(h2) . Chiaramente maggiore sara

l’ordine e piu accurato sara il risultato, d’altra parte il numero di valutazioni

di φ(x, t) e un punto cruciale nella complessita computazionale. Questi me-

todi vengono detti espliciti in quanto cio che non e conosciuto viene espresso

come soluzione di un qualcosa che sappiamo gia.

2.5 Metodi di integrazione numerica 31

2.5.2 Metodi impliciti

Diversamente dai metodi espliciti nei metodi impliciti esprimiamo cio che

non e conosciuto come soluzione di un sistema di coppie di equazioni[Bar].

Per le equazioni differenziali questo significa esprimere il valore x(t + h)

utilizzando φ(x(t + h), t + h), in particolare il passo di Eulero puo essere

riscritto come:

x(t + h) = x(t) + hφ(x(t + h), t + h) + O(h2) (2.24)

dove il termine φ(x(t + h), t + h) viene approssimato attraverso la serie

di Taylor troncata al primo termine:

φ(x(t + h), t + h) = φ(x(t), t) + hφ′(x(t), t) (2.25)

Consideriamo adesso che x e una variabile singola appartenente all’insie-

me dei numeri reali, x(t) e φ(x, t) sono vettori, mentre φ(x, t) e una matrice.

Sostituendo 2.25 in 2.24 e risolvendo per x(t + h):

x(t + h) = x(t) + (1

hI − φ′(x(t), t))−1φ(x(t), t) (2.26)

Questo metodo richiede la computazione di una matrice inversa (o equi-

valentemente risolvere un sistema lineare) ad ogni passo della simulazione.

Questo rende i metodi impliciti piu complessi in termini di numero di opera-

zioni rispetto ai metodi espliciti per un singolo passo di integrazione. D’altra

parte sono metodi che possono essere utilizzati in contesti pratici in cui il

valore di h e elevato. Entrambi i metodi (espliciti ed impliciti) fanno parte

della classe di metodi chiamati single step, ovvero i metodi che esprimono

il valore di x(t + h) usando solamente lo stato dello stato precedente (ovve-

ro x(t)) . Al contrario i metodi multistep utilizzano una interpolazione dei

precedenti n punti:

2.5 Metodi di integrazione numerica 32

x(t + h) = x(t) + hφ(β0x(t + h) + β1x(t) + . . . + βnx(t− (n− 1)h)) (2.27)

Possiamo notare come questa formulazione esprime anche i metodi single

step (in questo caso i = 1) sia espliciti (β0 = 0) che impliciti (β0 6= 0).

Capitolo 3

Tecniche di taglio su mesh tetraedrali

Le tecniche di taglio su mesh tetraedrali presentate nel capitolo precedente

curavano ognuna un singolo aspetto del problema:

• La tecnica di cancellazione di tetraedri riduce il numero di tetraedri

della mesh ma non preserva il volume e non rappresenta il taglio in

maniera accurata.

• Nell’approccio con duplicazione delle facce e dei nodi viene modifica-

ta la posizione di equilibrio della mesh e di conseguenza la matrice di

rigidita. In alcuni casi grandi spostamenti di vertici possono rivelare al-

l’utente cambiamenti nella forma della mesh, degradando notevolmente

il fattore di realismo.

• La tecnica di rimpiazzamento dei tetraedri, nella sua precisione di rap-

presentazione dell’azione di taglio, ha lo svantaggio di creare un numero

elevato di entita incrementando la complessita di calcolo.

L’aumento di complessita nella descrizione della mesh puo causare un

ritardo percepibile, dovuto alle operazioni di aggiornamento, tra l’azione di

taglio da parte dell’utente e la divisione del tessuto.

Nella prima sezione di questo capitolo illustreremo la struttura della mesh

tetraedrale e definiremo le funzioni necessarie alla sua navigazione. Nella

3.1 Strutture dati e algoritmi per mesh tetraedrali 34

Figura 3.1: Convenzione sulla numerazione locale dei vertici degli edge e delle facce:

a) Orientamento del tetraedro: La numerazione locale dei vertici e tale

che: [(T (V1)− T (V0))× (T (V3)− T (V0))] · (T (V2)− T (V0) > 0. b) Le

facce associate alle triple di vertici. c) Gli edge associati alle coppie di

vertici.

seconda sezione invece verranno definite le operazioni modifica della mesh

utilizzate nella modellazione del taglio. Infine, nella terza sezione viene illu-

strato il metodo di semplificazione della mesh utilizzato nello svolgimento di

questa tesi.

3.1 Strutture dati e algoritmi per mesh te-

traedrali

Le entita principali che compongono una mesh di tetraedri sono i vertici, gli

edge, le facce ed i tetraedri. Una struttura dati costruita per rappresentare

3.1 Strutture dati e algoritmi per mesh tetraedrali 35

una mesh di tetraedri deve rappresentare queste entita e le relazioni di appar-

tenenza che intercorrono tra esse. Questa struttura dati deve essere costruita

in modo tale da mantenere la consistenza della connettivita delle entita della

mesh (questa caratteristica puo permettere ad esempio di conoscere tutti i

tetraedri che incidono in un edge). Piu in generale possiamo dire che una

caratteristica fondamentale della struttura dati e la possibilita di effettuare

query sui dati rappresentanti la mesh. Il contesto del problema impone inol-

tre che questa struttura dati possa essere aggiornata in tempo reale a causa

delle modifiche geometriche della stessa (deformazioni, tagli, semplificazioni)

.

L’efficienza di questa struttura dati si puo quindi esprimere in termini di:

• Utilizzo di memoria.

• Efficienza nelle esecuzione delle query.

• Efficienza nelle modifiche della connettivita.

Una mesh di tetraedri viene descritta da due entita esplicite fondamen-

tali: Il vertice ed il tetraedro. Ogni tetraedro viene descritto dalla posizione

dei quattro vertici nello spazio. Tali vertici devono essere condivisi in modo

appropriato dai tetraedri adiacenti. Questa condizione e di vitale importan-

za in quanto la modifica della posizione di un vertice della mesh durante la

sua deformazione si deve riflettere su tutti i tetraedri che incidono sul vertice

stesso.

In dettaglio una mesh contiene un insieme di vertici e di tetraedri; ogni te-

traedro e dotato di quattro puntatori, ciascuno per ogni vertice; in questo

modo l’istanza di ogni vertice risulta unica e condivisa dagli opportuni te-

traedri. Per la completezza della struttura stessa non esisteranno vertici che

appartengano a nessun tetraedro. I puntatori a vertice in ogni tetraedro sa-

ranno sistemati in modo tale che il vertice 0 veda i vertici 1 2 e 3 in senso

3.1 Strutture dati e algoritmi per mesh tetraedrali 36

antiorario. In particolare varra il seguente criterio: Sia T (Vi) il vertice i-

esimo del tetraedro T , allora affinche l’ordinamento dei vertici sia corretto

dovra valere il criterio (Figura 3.1.a) :

[(T (V1)− T (V0))× (T (V3)− T (V0))] · (T (V2)− T (V0) > 0 (3.1)

Se questo criterio non viene rispettato il vertice 2 ed il vertice 0 verranno

scambiati di posizione.

Le facce e gli spigoli del tetraedro esistono in quanto facce del tetraedro

descritte dai vertici. Risulta superfluo e complica la coerenza nell’aggiorna-

mento dei dati creare oggetti che modellino esplicitamente queste entita. Ai

fini della nostra applicazione una faccia o un edge sara solo l’insieme dei suoi

vertici. Le tabelle di Figura 3.1 riportano l’ordine dei vertici per ogni faccia

e l’ordine dei vertici per ogni spigolo.

Seguendo queste tabelle possiamo dedurre ad esempio che la faccia 1 di un

tetraedro e quella descritta dall’insieme dei vertici T (V0), T (V1), T (V3), op-

pure che l’edge 1 e quello che va dal vertice T (V0) a T (V2). Naturalmente

l’ordine in cui sono specificati i vertici sulle facce per ragioni di correttezza

e antiorario, mentre su uno spigolo l’ordine risulta superfluo. Da queste due

tabelle fondamentali si possono costruire altre tabelle in modo da fare un

numero minore di accessi possibile per ogni ricerca. La tabella 3.1.a riporta

le facce incidenti su ogni vertice, la 3.1.b gli spigoli incidenti su ogni vertice,

la 3.1.c gli spigoli di ogni faccia, la 3.1.d le facce per ogni spigolo. Queste

tabelle vengono spesso utilizzate nella navigazione della mesh.

3.1.1 Relazioni di adiacenza

Adiacenza tetraedro-tetraedro (via faccia) Se il tetraedro Ti condivi-

de tre vertici col tetraedro Tj, ci sara una faccia F , descritta da questi tre

3.1 Strutture dati e algoritmi per mesh tetraedrali 37

Vertici F0 F1 F2

0 0 1 2

1 0 1 3

2 0 2 3

3 1 2 3

Vertici E0 E1 E2

0 0 1 2

1 0 3 4

2 1 3 5

3 2 4 5

a b

Facce E0 E1 E2

0 0 3 1

1 2 4 0

2 1 5 2

3 4 5 3

Edge F0 F1

0 0 1

1 0 2

2 1 2

3 0 3

4 1 3

5 2 3

c d

Tabella 3.1: a) Tabella vertice-faccia. b) Tabella vertice-edge. c) Tabella faccia-edge.

d) Tabella edge-faccia.

Figura 3.2: Un primo esempio di mesh tetraedrale: a sinistra vengono messi in risalto

i tetraedri che compongono la mesh

3.1 Strutture dati e algoritmi per mesh tetraedrali 38

vertici che apparterra ad entrambi i tetraedri (Ti,Tj) . Per navigare all’inter-

no della mesh diventa fondamentale definire una funzione di adiacenza tra

tetraedri che condividono la stessa faccia.

Definizione 10 Dato un tetraedro Ti ed una faccia Fj ∈ Ti, la funzione di

adiacenza tetraedro-tetraedro TT (Ti, Fj) restituisce il tetraedro Tk 6= Ti,

tale che Fj ∈ T (k), se T (k) non esiste allora TT (Ti, Fj) = Ti.

L’ultimo caso della definizione precedente e relativo alle facce esterne del-

la mesh. Le facce esterne (quindi quelle che dovranno essere disegnate nella

fase di rendering) saranno quindi caratterizzate dal fatto che la funzione di

adiacenza tetraedro tetraedro restituira lo stesso tetraedro che figura come

paramento della funzione, cioe se TT (Ti, Fj) = Ti allora la faccia Fj del te-

traedro Ti e esterna.

Affinche la funzione possa essere invertibile dobbiamo definire un’altra fun-

zione:

Definizione 11 La funzione ZT (Ti, Fj) restituisce la faccia Fh tale che esi-

ste un tetraedro Tk 6= Ti tale che TT (Tk, Fh) = Ti

In altre parole la funzione ZT restituisce l’indice della faccia Fj del te-

traedro Ti vista dal tetraedro adiacente attraverso tale faccia. Nel caso di una

faccia esterna tale funzione avra valore uguale all’indice della faccia stessa.

Date queste due funzioni possiamo definire la proprieta invariante:

Proprieta 1 Data la mesh tetraedrale TM composta da tn tetraedri, allora:

∀(Ti, Fj)(i = 0 . . . tn), (j = 0 . . . 3), TT (TT (Ti, Fj), ZT (Ti, Fj)) = Ti

3.1 Strutture dati e algoritmi per mesh tetraedrali 39

Figura 3.3: a) I tetraedri T0 e T1 condividono la stessa faccia b) TT (T0, F2) = T1;

TT (T1, F3) = T0; ZT (T0, F2) = F3; ZT (T1, F3) = F2

Implementazione Per implementare tali funzioni e necessario utilizzare

strutture dati che mantengano nel tempo tale connettivita. Queste strutture

dati verranno inizializzate al momento della creazione della mesh stessa e

modificate localmente in caso di modifiche topologiche (tagli o collassi) .

Ogni istanza di tetraedro conterra un array di quattro puntatori a tetrae-

dro; ogni puntatore specifica l’adiacenza attraverso la faccia indicata della

posizione dell’array; naturalmente una faccia esterna e caratterizzata da un

puntatore allo stesso tetraedro. La funzione ZT verra anch’essa rappresen-

tata attraverso l’uso di un array di quattro interi, la faccia esterna sara

caratterizzata in questo caso dall’indice della faccia stessa.

Adiacenza vertice-tetraedro In alcune operazioni di modifica della mesh

risulta necessario conoscere tutti i tetraedri che condividono un vertice. De-

finire una funzione del genere sulla base della adiacenza tetraedro-tetraedro

e poco efficiente. Data una mesh tetraedrale TM di tn tetraedri e vn vertici,

allora:

Definizione 12 La funzione di adiacenza vertice-tetraedro V T (Vi), (i =

3.1 Strutture dati e algoritmi per mesh tetraedrali 40

0 . . . vn) restituisce l’insieme dei tetraedri Tj(0 ≤ j < tn) tale che Vi ∈ Tj

Implementazione della topologia vertice-tetraedro La funzione di

adiacenza vertice-tetraedro mette in relazione una entita esplicita (il vertice)

con in insieme di entita (i tetraedri che lo condividono) , questo dettaglio

rende l’implementazione di questa funzione piu problematica rispetto all’im-

plementazione della topologia tetraedro-tetraedro dove la relazione coinvolge

al massimo due tetraedri. In questo caso risulta necessario costruire strutture

dati ausiliarie che mantengano, per ogni vertice, il sottoinsieme di tetraedri

che incidono su di esso. Tale sottoinsieme non richiede un ordinamento par-

ticolare; le operazioni piu frequenti su questa struttura dati saranno la visita

completa e l’inserimento di nuovi elementi.

La struttura dati scelta per modellare questo tipo di relazione e la lista. Ogni

vertice delle mesh contiene il puntatore al primo tetraedro che compone la

lista e un intero che specifica l’indice di quel vertice all’interno del tetraedro.

Ogni tetraedro conterra sua volta due array di quattro elementi, ciascuno per

ogni vertice:

L’array Tp Per ogni posizione j (j = 0 . . . 4), un puntatore indichera il

prossimo tetraedro che condivide il vertice j-esimo.

L’array Zp Per ogni posizione j (j = 0 . . . 4), un intero indichera l’indice

del vertice j-esimo sul prossimo tetraedro della lista (Tp[j]) . tetraedro

L’inserimento di un nuovo tetraedro alla lista comportera quindi solo una

modifica alla testa della lista stessa, cioe l’istanza del vertice stesso (oltre alla

modifica degli array Tp e Zp del tetraedro da inserire) . Va precisato inoltre

che la fine della lista viene contrassegnata da un puntatore nullo nell’array

Tp ed un indice -1 nello Zp.

template < class VERT_TYPE > class TETRA_TYPE

public:

3.1 Strutture dati e algoritmi per mesh tetraedrali 41

a) b)

Figura 3.4: a) I tetraedri T0, T1 e T2 condividono lo stesso vertice V; V T (V ) =

T0,T1,T2 b) Implementazione della lista per il caso raffigurato

...

/// The vertex type

typedef typename VERT_TYPE MVTYPE;

typedef typename VERT_TYPE::scalar_type scalar_type;

MVTYPE *v[4];

...

///pointers to tetra for vertex-tetra topology

TETRA_TYPE *tv[4];

short int zv[4];

TETRA_TYPE *t[4];

int z[4];

...

scalar_type _volume;

;//end class

3.1 Strutture dati e algoritmi per mesh tetraedrali 42

3.1.2 Operatori di navigazione sulla mesh

Utilizzando le strutture di connettivita appena specificate sono stati defini-

ti alcuni operatori di navigazione sulla mesh. Gli operatori che definiremo

permettono di eseguire delle query (ad esempio se si volesse conoscere tutti i

tetraedri che condividono un vertice, oppure un edge. . . ) in modo efficiente

e astratto dalla struttura dati sottostante.

Data la frequenza e l’importanza d’utilizzo di tali oggetti nell’implementa-

zione delle operazioni di modifica che seguono, risulta utile descrivere la loro

struttura in dettaglio.

Iteratore vertice-tetraedro: NextV Risulta utile all’utente poter na-

vigare attraverso la connettivita di vertice-tetraedro in modo trasparente

rispetto alla sua rappresentazione in termini di strutture dati. Creare un og-

getto dedito a tale funzione, significa creare l’iteratore vertice-tetraedro che

scorre la lista dei tetraedri che condividono uno stesso vertice.

Un oggetto di questo tipo conterra un puntatore al tetraedro corrente ( t ) ed

l’indice del vertice sul tetraedro stesso. Inizializzando questo iteratore con i

valori dell’indice e del tetraedro presenti sul vertice stesso (relativamente Zp e

Tp del vertice) possiamo scorrere tutta la catena utilizzando una operazione

NextV cosı definita:

tmp=t;

t=tmp->Tp[z];//il puntatore al tetraedro viene aggiornato

al successivo nella lista

z=tmp->Zp[z];//l’indice z viene aggiornato coll’indice del

vertice sul nuovo tetraedro

Una importante proprieta invariante caratterizza questo operatore:

Proprieta 2 Siano t0 e z0 i valori corrispondenti a z e t dell’iteratore vertice

tetraedro e sia V il vertice di indice z0 del tetraedro t0; siano poi t1 e z1 i

3.1 Strutture dati e algoritmi per mesh tetraedrali 43

valori di z e t dopo una operazione di Next e sia V 1 il vertice di indice z1 del

tetraedro t1, allora:

• o z1 = −1 e t1 = NULL,

• oppure V 1 = V

In pratica il vertice indicato dall’iteratore sul tetraedro deve essere sem-

pre lo stesso, oppure diventa nullo nel caso in cui non ci siano piu tetraedri

da visitare. Questa proprieta e garantita naturalmente solo nel caso in cui sia

corretta la costruzione della topologia vertice-tetraedro. Nel caso di modifi-

che della mesh un test che sfrutti tale proprieta invariante, iterato su tutte

le catene, si e rivelato molto utile nella individuazione di alcuni errori.

Half-edge L’half-edge e un oggetto utilizzato nella navigazione di una me-

sh. Come spiega la parola stessa (meta edge) l’half-edge rappresenta un edge

orientato. Come rappresentato in Figura 3.5 in un complesso simpliciale a 1

dimensione (spezzata) rappresentare un edge orientato significa arricchire la

descrizione di un edge con qualcosa in piu che ne identifichi la direzione. I

due half-edge rappresentati, pur riferendosi allo stesso edge, sono differenti.

Potremmo cosı esprimere l’half-edge come una coppia (edge, vertice) nel no-

stro esempio di complesso simpliciale a una dimensione. Naturalmente gli

half-edge sono rappresentati solo da un sottoinsieme di tutte le possibili cop-

pie edge, vertice; cioe quelle in cui e il vertice e incluso nell’edge specificato

nella coppia. Attraverso le funzioni di adiacenza, possiamo definire adesso

delle funzioni di iterazione basate su questo tipo di concetto. Nella naviga-

zione della mesh potremmo cosı conoscere per ogni edge i vertici (e viceversa)

; inoltre operatori di iterazione permetterebbero la transizione dell’half-edge

da un edge all’altro oppure da un vertice all’altro.

Nella Figura 3.5 il concetto di half-edge viene anche espresso in un comples-

so simpliciale a due dimensioni (mesh di triangoli). In questo caso l’half-edge

3.1 Strutture dati e algoritmi per mesh tetraedrali 44

Figura 3.5: L’half-edge viene rappresentato graficamente come un triangolo rettan-

golo: a) I due half-edge He0 e He1 pur essendo definiti sullo stesso edge

hanno vertici differenti: He0 = (b, Edge1) mentre He01 = (c, Edge1)

b) L’half-edge definito sulla mesh di triangoli He2 = (l, Edge11, F5)

definito precedentemente viene esteso ad una tripla faccia, edge, vertice;nell’esempio viene mostrato in particolare l’half-edge l, Edge11, F5. Come

nel caso precedente solo un sottoinsieme di queste triple assume un signifi-

cato coerente con la mesh.

In generale un half-edge in un complesso simpliciale a n dimensioni puo essere

rappresentato come una di (n+1)-tupla dove:

Definizione 13 1. Hedge = Fn, Fn−1, . . . , F0, Fi e faccia del complesso

simpliciale a n-dimensioni.

2. F0 ∈ F1 ∈ F2 . . . Fn−1 ∈ Fn. Dove Fi ∈ Fi+1significa che Fi e una

faccia di Fi+1

Nel nostro caso, essendo la mesh tetraedrale (quindi un complesso sim-

pliciale a 3 dimensioni) , l’half-edge sara rappresentato da una quadrupla

3.1 Strutture dati e algoritmi per mesh tetraedrali 45

Figura 3.6: L’half-edge viene rappresentato graficamente come un triangolo rettan-

golo con un vettore indicante il tetraedro su cui e definito. In questo caso

l’half-edge e costituito dalla quadrupla (o,Edge3, F3, T1)

3.1 Strutture dati e algoritmi per mesh tetraedrali 46

tetraedro, faccia, edge, vertice. La condizione 2 implica che, per ogni pos-

sibile half-edge, il vertice specificato dovra appartenere all’edge, il quale a sua

volta sara parte della faccia anch’essa appartenente al tetraedro specificato.

L’half-edge rivela la sua vera importanza se utilizzato come base per co-

struire una serie di operatori di navigazione all’interno della mesh. Nell’im-

plementazione della quadrupla half-edge nella mesh tetraedrale, la faccia e

l’edge saranno due interi, mentre il vertice ed il tetraedro saranno puntatori

all’istanza del vertice e del tetraedro stesso.

Operazioni base sugli half-edge: flip Dato un half-edge Ti, Fj, Eh, Vk,possiamo notare che per ogni elemento della quadrupla esiste una sola pos-

sibile variazione che generi un half-edge come definito in 2. Ciascuna di

queste variazioni comporta la modifica di un solo elemento della quadrupla.

Ad esempio, come mostrato in Figura 3.7, modificando il vertice passiamo

dall’half-edge 0 all’half-edge 1: la successiva modifica del vertice riportera

l’half-edge nello stato 0. Le due configurazioni ottenute (0 e 1) sono le uni-

che due che possono essere ottenute variando solo il vertice nella quadrupla

dell’esempio. Una operazione di questo tipo viene chiamata flip dell’half-edge

sul vertice.

Effettuando la stesso tipo di operazione cambiando l’edge della quadrupla 0

(flip dell’half-edge sull’edge) passiamo dallo stato 0 allo stato 2, mentre il flip

sulla faccia dallo stato 0 al 3, infine il flip sul tetraedro dallo stato 0 al 4.

Se la mesh tetraedrale e una sola componente connessa, allora si puo provare

come, tramite successioni di questi operatori si possa di fatto visitare tutti

i possibili half-edge. La quantita di informazione presente dell’half-edge e

le operazioni di flip costituiscono il punto di partenza nella costruzione di

iteratori di navigazione della mesh. Le operazioni di flip appena esposte si

basano esclusivamente sulla topologia tetraedro-tetraedro.

3.1 Strutture dati e algoritmi per mesh tetraedrali 47

Figura 3.7: Possibili flip su una mesh di tetraedri: Partendo dallo stato 0 arriviamo

all’half-edge dello stato1 tramite flip sul vertice e viceversa. Ogni transi-

zione di stati viene raggiunta attraverso l’operazione indicata sulla freccia

(ad ogni operazione corrisponde anche l’inversa).

3.1 Strutture dati e algoritmi per mesh tetraedrali 48

Figura 3.8: Possibili Next su una mesh di tetraedri: a) Il next su una faccia corri-

sponde ad un flip sul tetraedro. b) Il next sull’edge restituisce in modo

ordinato tutti i tetraedri che condividono un edge.

Operazioni derivate sugli half-edge: Next Combinando tra loro le

operazioni di flip possiamo ottenere iteratori che permettono la visitare tutti

i possibili tetraedri della mesh. Operazioni di questo tipo sono chiamate

Next. In particolare possiamo implementare due tipi di Next significativi su

una mesh tetraedrale:

Definizione 14 (NextFace) L’half-edge viene ribaltato sul tetraedro che

condivide la stessa faccia. Come mostrato in Figura 3.8.a, si passa dallo

stato 0 allo stato 1 e viceversa; in questo caso, siccome esistono solo due te-

traedri che condividono la stessa faccia questa operazione si riduce ad un flip

sul tetraedro. Se nessun tetraedro condivide la faccia l’operazione di NextFace

non produrra nessun risultato.

3.1 Strutture dati e algoritmi per mesh tetraedrali 49

Figura 3.9: L’operazione di Next edge equivale ad effettuare una flip sul tetraedro

seguita da un flip sulla faccia.

NextFace = FlipTetra

Definizione 15 (Next edge) Questa operazione restituisce il prossimo half-

edge con tetraedro differente che condivide lo stesso edge.

Come mostrato in Figura 3.8.b, iterando questa operazione si possono ot-

tenere, ad ogni passo, l’insieme ordinato dei tetraedri che condividono tale

edge. L’ordinamento viene garantito da fatto che questo tipo di Next viene

effettuato combinando un flip sul tetraedro ed un flip sulla faccia. Come mo-

strato in Figura 3.9 la prima di queste due operazioni sposta l’half-edge sul

tetraedro che condivide la stessa faccia (e quindi lo stesso edge), mentre il

secondo flip (quello sulla faccia) muove l’half-edge sull’altra faccia dell stesso

tetraedro che condivide l’edge: In sostanza la prima operazione consente di

ottenere il prossimo tetraedro, mentre la seconda crea le condizioni per arri-

vare sul prossimo tetraedro (senza che si torni allo stato iniziale come nelle

operazioni di flip) .

Nextedge = FlipFace(FlipTetra)

Ciascuna di queste due operazioni di iterazione, essendo basate sulle ope-

razioni di flip, utilizzano esclusivamente le funzioni di adiacenza tetraedro-

etraedro; questo dettaglio si rivelera molto importante in un contesto di

3.2 Modifiche topologiche: tagli 50

modifica: dobbiamo essere in in grado di visitare un gruppo di tetraedri

modificandoli, senza che tale modifica influisca sulla visita stessa.

3.2 Modifiche topologiche: tagli

Prima di introdurre la strategia di taglio utilizzata conviene soffermarsi e

spiegare piu nel dettaglio i punti deboli delle altre strategie utilizzate.

Il punto di forza della strategia con duplicazione di facce consiste nel poter

effettuare tagli senza introdurre nuovi tetraedri all’interno della mesh. Per

contro, e richiesto che alcuni vertici vengano artificiosamente spostati sull’in-

tersezione tra il bisturi e la superficie, questa operazione puo dar luogo ad

anomalie. Consideriamo l’esempio illustrato in Figura 3.10: secondo l’imple-

mentazione dovremmo proiettare il vertice 0 (che e il piu vicino alla lama)

sulla superficie di taglio; in questo caso il taglio non potrebbe essere effettua-

to in quanto la superficie di taglio non interseca piu la mesh e sdoppiare il

vertice 0 non avrebbe quindi piu senso. Si potrebbe pensare a questo punto

di avvicinare il vertice 1 sulla superficie di taglio; questo lungo spostamento

puo risultare pero una modifica troppo grande e percepibile.

Nell’implementazione con rimpiazzamento di tetraedri si assume di poter

suddividere un tetraedro (ed eventualmente quelli a lui adiacenti) basandosi

sul movimento del bisturi all’interno del tetraedro stesso. Come mostrato

nel capitolo 2, il gruppo di tetraedri introdotto per rimpiazzare uno tagliato

dipende da quali edges di quest’ultimo sono intersecati dal tool. Questa

dipendenza crea due problemi:

1. Occorre gestire la mesh nell’intervallo di tempo in cui il tool ha attraver-

sato alcuni degli edges del tetraedro senza attraversarlo completamente

(e quindi non e stata individuata ancora una sostituzione valida) .

3.2 Modifiche topologiche: tagli 51

Figura 3.10: a) Il taglio illustrato in non puo essere effettuato con l’approccio con

duplicazione di facce. b) Se si seleziona il vertice piu vicino , ovvero il

vertice 0, avremmo un vertice e una faccia corrispondente da duplicare

che sono esterni e quindi non condivisi da nessuna altra entita dalla quale

sia possibile separare. c) Lo spostamento di un altro vertice, ad esempio

il vertice 1, puo causare modifiche al modello percepibili dall’utente.

2. Il numero e la qualita dei tetraedri possono degenerare velocemente (ad

esempio effettuando ripetutamente piu tagli nella stessa regione).

A nostro avviso, l’origine dei problemi sta nel fatto che in questo modello

il tool non interagisca con l’oggetto deformabile in maniera fisica, cioe tra-

mite il contatto con la superficie esterna, bensı il suo movimento determina

direttamente le modifiche della struttura geometrica (mesh) che rappresenta

l’oggetto. Per fare cio viene consentito che il tool si trovi all’interno dell’og-

getto, cioe che essi occupino lo stesso spazio fisico.

L’approccio proposto in questa tesi si basa invece su una modellazione del

taglio in funzione dello stress. Come avviene nella realta, un tessuto non si

lacera a causa del contatto con il bisturi, bensı a causa del fatto che la pres-

sione, o la tensione, esercitata da un oggetto esterno supera un certo limite.

Nel metodo proposto il volume della mesh e del bisturi non dovranno mai

3.2 Modifiche topologiche: tagli 52

intersecarsi, la deformazione ed il taglio avvengono proprio affinche questa

proprieta venga preservata.

Modellare il taglio attraverso questi accorgimenti fa si che il metodo propo-

sto (oltre che essere piu realistico del metodo con separazione di tetraedri)

sia adattabile a qualsiasi tool per il quale si conosca lo stress esercitato sulla

mesh durante il contatto, o piu in generale a una qualsiasi causa di stress,

come ad esempio quello indotto dalla forza di gravita. I due operatori de-

scritti nella sezione che segue saranno utilizzati per modellare il taglio in

corrispondenza dei punti di stress piu alto.

3.2.1 Gli operatori di taglio

Ci sono due funzioni per implementare il taglio che sono stati chiamati vertex-

split e edge-split:

Vertex-split: Separazione di vertici Come mostrato in Figura 3.11.a que-

sto operatore prende in input una sezione di taglio formata da un in-

sieme connesso di facce Fs0, Fs1, . . . , Fsn (evidenziate nell’esempio) e

produce come risultato la mesh stessa dove il vertice t e stato duplicato

e le facce di sezione sono diventate esterne.

Edge-split: Divisione di un edge Questo operatore prende in input un

punto su un edge della mesh Et. Come mostrato in Figura 3.11.b

l’applicazione di questo operatore sostituisce l’insieme dei tetraedri che

condividono l’edge Et con due nuovi sottoinsiemi di tetraedri ciascuno

dei quali condivide o l’edge E ′t oppure l’edge E ′′

t . Le facce interne

condivise dai due sottoinsiemi diventano come nel caso precedente facce

esterne ed il vertice condiviso dai due nuovi edge viene duplicato.

La mesh tetraedrale modella il volume di un oggetto, questo complesso

simpliciale (ovvero la mesh stessa) deve essere (e rimanere) manifold , cioe

3.2 Modifiche topologiche: tagli 53

Figura 3.11: a) Vertex-split duplica il vertice t utilizzando la superficie di taglio evi-

denziata. b) Edge-split suddivide in due l’edge Et, di conseguenza ogni

tetraedro che condivide l’edge genera due tetraedri.

omeomorfa ad una sfera in ogni punto. I due operatori di taglio appena

presentati devono preservare queste proprieta pur modificando la mesh.

3.2.2 Problemi connessi all’uso degli operatori di taglio

Riprendiamo gli operatori di taglio introdotti precedentemente, come possia-

mo notare in Figura 3.12, l’applicazione del vertex-split alla sezione di taglio

evidenziata produrra una mesh non piu manifold.

La mesh in Figura 3.12 rappresenta un caso non realistico nella modellazione

di un oggetto deformabile: i due tetraedri della mesh non possono fisicamen-

te essere attaccati l’uno all’altro attraverso due edge. Oltre al fatto che la

mesh di Figura 3.12 rappresenti un modello non realistico va precisato che

la funzione di adiacenza T-T non puo collegare i due tetraedri tra loro; di

conseguenze nessun half-edge definito sulla mesh permetterebbe la visita di

3.2 Modifiche topologiche: tagli 54

Figura 3.12: L’applicazione del vertex-split alla mesh tetraedrale raffigurata produce

una situazione in cui la mesh non e piu omeomorfa ad una sfera lungo

gli edge (V0, V2) e (V1, V2)

tutti i tetraedri, andando cosı a violare le nostre ipotesi.

Cerchiamo allora di definire sotto quali condizioni possa essere effettuato il

taglio effettuato dal vertex-split e come questo possa essere applicato in mo-

do che dopo la modifica la mesh sia ancora manifold.

Sia S una superficie di taglio composta da facce interne della mesh te-

traedrale T e sia σ(S) = v0, . . . , vh l’insieme dei vertici di bordo di S.

Definiamo una nuova mesh e(S) ottenuta da S coma segue:

Per ogni sequenza di vertici appartenenti a σ(S) che sono anche sul bordo

della mesh tetraedrale si aggiunga un vertice fittizio connesso a tutti i vertici

della sequenza e le relative facce (Figura 3.13) .

Diciamo che separiamo T attraverso S, in breve V Split(T, S), per indicare

l’operazione duplicazione di tutti i vertici interni (Figura 3.15) .

Lemma 1 Sia T una mesh 3-manifold e S una superficie di taglio 2-manifold

in T . Se e(S) e 2-manifold e non esiste un edge interno di e(S) tra due

vertici in σ(S), allora V Split(T, S) e 3-manifold.

3.2 Modifiche topologiche: tagli 55

Figura 3.13: Esempio di estensione di una sezione di taglio:I vertici fittizi vengono

connessi con le sequenze di vertici esterni nella mesh tetraedrale.

Figura 3.14: Una sezione di mesh tetraedrale che evidenzia la superficie di taglio S

(evidenziata): La superficie S viola le condizione esposte nel Lemma 1

in quanto non e 2 -manifold (a causa dell’edge (e, d0)) e gli edge interni

(a, b) e (c, d) connettono due vertici di bordo.

3.2 Modifiche topologiche: tagli 56

Figura 3.15: Esempio di V Split di una sezione di taglio: I vertici interni i relativi

edge e facce vengono duplicati.

Dim: Se la mesh tetraedrale e 3-manifold, gli unici punti in cui l’operazione

V Split(T, S) puo creare dei punti non omeomorfi ad una sfera sono gli edge

ed in vertici della superficie S. Data la definizione di V Split i vertici interni

ed i relativi edge verranno duplicati.

Un edge e non manifold quando l’operazione di V Split duplica le facce che

lo condividono senza duplicare l’edge stesso. Cio avviene solo nel caso in cui

un edge interno ad S colleghi due vertici di bordo, caso escluso per ipotesi.

I vertici appartenenti a σ(S) saranno tutti omeomorfi ad una semi-sfera dopo

l’operazione di V Split, in quanto bordo della nuova mesh tetraedrale.

Se, al contrario, c’e almeno un vertice non omeomorfo ad una semi-sfera

significa che lo era precedentemente (e quindi esterno nella mesh tetraedrale)

e unico elemento di una sequenza di vertici di bordo ma in questo caso la

mesh e(S) non e manifold come richiesto nelle ipotesi (Figura 3.14) .

3.2.3 Vertex-split

I due operatori di taglio qui descritti modificano la mesh utilizzando so-

lamente le informazioni di adiacenza fornite dalle funzioni TT e VT pre-

cedentemente descritte. L’azione del vertex-split puo essere suddivisa in 4

fasi:

3.2 Modifiche topologiche: tagli 57

Verifica delle Condizioni Questa fase controllera la sezione di taglio della

mesh S in accordo con le condizioni individuate nel Lemma 1. Una

sezione di taglio viene chiamata valida se rispetta tali condizioni.

Individuazione dei vertici da duplicare Se la sezione di taglio e valida

allora dobbiamo individuare i vertici da duplicare.

Individuazione dei tetraedri coinvolti nel taglio Per ogni vertice che

intendiamo duplicare dobbiamo individuare i tetraedri che condividono

tale vertice e, per ognuno di essi stabilire a quale dei due nuovi vertici

dovra riferirsi.

Sdoppiamento dei vertici e ripristino delle topologie Alla fine prov-

vederemo a duplicare i vertice stesso e ad aggiornare di conseguenza

adiacenza in modo tale da modellare il taglio.

Condizioni sulla sezione di taglio Il parametro su cui verranno poste

condizioni sull’ applicabilita del taglio sara la sezione di taglio vista come

mesh triangolare. Per l’efficienza dell’implementazione la sezione di taglio

estesa S ′ = φ(S) non viene esplicitamente costruita, bensı le condizioni per

cui S ′ e 2-manifold vengono espresse in termini di S con dei test che com-

prendono tutti i casi.

In seguito utilizzeremo la seguente notazione: se un vertice V o un edge E

sono di bordo nella mesh triangolare allora diremo che tali entita apparten-

gono all’insieme 2dB, rispettivamente 3dB se tali entita sono di bordo nella

mesh tetraedrale.

Data la mesh triangolare S indicante la sezione di taglio, allora l’opera-

zione di vertex-split puo essere applicata su S se:

1. La mesh S e una superficie composta da una sola componente connessa

omeomorfa ad un disco.

3.2 Modifiche topologiche: tagli 58

Figura 3.16: Condizioni sulla sezione di taglio del vertex-split (i vertici e gli edge

esterni sono evidenziati) . a) La sezione di taglio non e manifold. b)

Esiste un edge interno che connette due vertici esterni. c) Esiste un

vertice di bordo sulla mesh tetraedrale che sta tra due edge non di

bordo. d) Esiste una sequenza di edge di bordo composta da un solo

edge.

3.2 Modifiche topologiche: tagli 59

Figura 3.17: a) Tra i vertici interni alla sezione di taglio esiste un vertice v di bordo

nella mesh tetraedrale. b) Risultato dello split applicato alla mesh estesa:

la mesh M1 non e piu omeomorfa da una sfera in ogni punto.

2. Non esistono edge interni alla mesh S che uniscano 2 vertici apparte-

nenti all’insieme 2dB.

3. Non esiste tra due edge 2dB ma non 3dB (lungo cioe il bordo di S) un

vertice 3dB .

4. Non esiste una sequenza di edge 2dB e 3dB composta da un solo edge

3dB.

5. Tra i vertici interni di S non esistono vertici che sono 3dB.

Queste condizioni derivano dalle ipotesi del Lemma 1. In particolare i casi

esposti nelle condizioni 1 e 2 sono illustrati in Figura 3.16.a e 3.16.b, mentre le

condizioni 3 e 4 corrispondono alle mesh triangolari illustrate rispettivamente

in Figura 3.16.c e 3.16.d.

La condizione 5 risulta necessaria affinche il vertex-split non crei la situazione

mostrata in Figura 3.17.b.

3.2 Modifiche topologiche: tagli 60

Figura 3.18: a) Solamente i vertici b e c sono da duplicare in quanto si trovano

entrambi tra due edge esterni. b) La mesh prodotta dall’esecuzione del

vertex-split.

Individuazione dei vertici da duplicare Data una sezione di taglio S

che rispetta le condizioni 1. . . 5 definiamo i vertici V ∈ S che vanno duplicati.

Sia S’ l’estensione della sezione di taglio S (S ′ = ϕ(S)), vanno duplicati

(secondo la definizione dello split) tutti i vertici interni ad S’. Questa ultima

affermazione si traduce sulla mesh non estesa S come:

• Vanno duplicati tutti i vertici interni a S.

• Vanno duplicati tutti i vertici 2dB di S che sono anche 3dB e si trovano

tra due edge di S che sono sia 2dB che 3dB.

Nell’esempio rappresentato in Figura 3.18 i vertici di bordo a, b, c e d sono

di bordo sia nella mesh S, sia nella mesh tetraedrale; solamente i vertici b e

c sono da duplicare in quanto sono rispettivamente inclusi tra gli edge E0 ed

E1 (nel caso di b) e tra E0 ed E1 (nel caso di c).

Da notare l’importanza dell’half-edge nella navigazione sia della mesh di

3.2 Modifiche topologiche: tagli 61

triangoli sia della mesh di tetraedri: un esempio di utilizzo riguarda l’in-

dividuazione dell’edge esterno. In questa fase, attraverso l’operazione di

Next edge, possiamo verificare se esiste almeno una faccia esterna che incide

sull’edge.

Individuazione dei tetraedri coinvolti nel taglio Data la sezione di

taglio S sulla mesh tetraedrale, esiste sicuramente un insieme di tetraedri

T 6= ∅ che condividono alcune entita con essa. Ci possono essere tetraedri

che hanno una faccia sulla sezione di taglio, altri che condividono un edge,

altri ancora solamente un vertice. L’insieme T puo essere suddiviso in due

sottoinsiemi disgiunti Ta e Tb, rispetto alla sezione di taglio stessa. I due

sottoinsiemi devono essere tali che le uniche entita da essi condivise sono

quelle presenti sulla sezione di taglio, piu formalmente:

Sia S una sezione di taglio valida e sia T l’insieme dei tetraedri che

condividono almeno un’entita con S allora i due sottoinsiemi Ta e Tb devono

godere delle seguenti proprieta:

1. Ta ∩ Tb = ∅

2. Ta ∪ Tb = T

3. ∀Ti ∈ Ta, Tj ∈ Tb : Ta ∩ Tb 6= ∅ =⇒ Ta ∩ Tb ∈ S.

Un esempio di scomposizione in questi due sottoinsiemi e riportato in Fi-

gura 3.19. I due sottoinsiemi di tetraedri Ta e Tb vengano costruiti in modo

tale che ognuno di essi possa successivamente sostituire le entita che condi-

vide con S con una delle due che si creano dopo la duplicazione.

La proprieta 3 risulta fondamentale nella suddivisione dei tetraedri, non ri-

spettarla significherebbe creare un taglio non corretto rispetto alla sezione

definita (ci potremmo ritrovare ad esempio un tetraedro che attraversa il ta-

glio). La creazione dei due sottoinsiemi Ta e Tb viene effettuata attraverso

tre passi successivi:

3.2 Modifiche topologiche: tagli 62

Figura 3.19: a) Tutti i tetraedri che hanno una entita condivisa sulla sezione di

taglio (evidenziata) sono coinvolti nella divisione. b) Le due mesh

rappresentano i sottoinsiemi Ta e Tb.

Figura 3.20: a) La sezione di taglio S nella mesh tetraedrale con tutti i tetraedri

che condividono almeno una entita con la sezione. b) Suddivisione

dei tetraedri che condividono una faccia con la sezione. c) I tetrae-

dri che condividono vertici o edge con S vengono suddivisi sfruttando la

condivisione dei vertici.

3.2 Modifiche topologiche: tagli 63

1. Vengono inseriti in un insieme Ta0 tutti i tetraedri che hanno una fac-

cia sulla superficie di taglio; attraverso l’adiacenza tetraedro-tetraedro

l’altro tetraedro che condivide la faccia sara a lui opposto ed apparterra

all’insieme Tb0 (Figura 3.20.b) .

2. Per ogni tetraedro appartenente a T controlliamo se questo condivi-

de almeno un vertice V 6∈ S con un tetraedro Tx che appartiene a Ta

oppure Tb (una opzione esclude l’atra visto che un tetraedro non puo

avere contemporaneamente due vertici che stanno su due lati differen-

ti rispetto ad S) . Se tale vertice esiste, allora inseriamo il tetraedro

nell’insieme corrispondente Tx (Figura 3.20.b) .

3. Ripetiamo il passo 2 fino che tutti i tetraedri Ti ∈ T apparterranno a

Ta oppure a Tb.

Da notare che la divisione dei due sottoinsiemi puo essere descritta come:

Ta = t|∃v 6 ∈S, v ∈ t, v ∈ t′, t′ ∈ Ta ∨ t′ ∈ Ta0Tb = t|∃v 6 ∈S, v ∈ t, v ∈ t′, t′ ∈ Tb ∨ t′ ∈ Tb0

Sdoppiamento del vertice e ripristino delle topologie Quando arri-

viamo a questa fase sappiamo gia quale sia l’insieme dei vertici da duplicare

ed i due sottoinsiemi Ta e Tb divisi dalla sezione di taglio S.

A questo punto come prima cosa dobbiamo duplicare i vertici stabiliti; per

ogni tetraedro di Ta sostituiamo il vecchio vertice che stava sulla sezione as-

sociando una delle due copie create, di conseguenza nei tetraedri di Tb questa

sostituzione avviene utilizzando l’altra copia del vertice. Appena effettuate

questa sostituzioni dobbiamo modificare le funzioni di adiacenza:

• Le facce che si trovano sulla sezione di taglio vengono poste a fac-

ce esterne; modificando quindi la funzione di adiacenza tetraedro -

tetraedro.

3.2 Modifiche topologiche: tagli 64

• La funzione di adiacenza vertice-tetraedro viene inizializzata per ognu-

no dei vertici duplicati con il tetraedro cui e stato assegnato.

Queste due operazioni sulla topologia garantiscono la correttezza degli

iteratori che verranno riutilizzati all’interno della mesh.

3.2.4 Edge-split

L’operazione di vertex-split consente si modellare solo tagli che passano at-

traverso i vertici e gli edge della mesh originale. Cio puo non essere sufficiente

qualora il punto dove deve comparire il taglio e lontano dai vertici selezio-

nati, poiche risulterebbe visivamente inaccurato. Inoltre, come illustrato in

Figura 3.10, esistono casi in cui il taglio non sarebbe possibile.

L’edge-split viene introdotto per ovviare a queste limitazioni, modificando

la mesh in modo che l’applicazione del vertex-split risulti accurata. Tale

modifica consiste nell’inserimento di un nuovo vertice all’interno dell’edge

da dividere. Questa operazione portera ad un riassetto locale della mesh

suddividendo tutte le entita che condividevano l’edge suddiviso (tetraedri e

facce) oltre che ad una modifica delle funzioni di adiacenza. Piu in dettaglio

l’edge-split puo essere suddiviso in 2 fasi:

Edge Split La divisione in due di un edge coincide con la divisione dei te-

traedri ai quali appartiene. Cosı come l’edge viene sostituito da una

coppia di nuovi edge, anche i tetraedri che lo contengono saranno so-

stituiti da una coppia di tetraedri ciascuno contenente uno dei due

edge creati.Tutti i nuovi tetraedri dovranno essere connessi con gli altri

tramite le funzioni di adiacenza.

Modellazione del taglio Definiamo una sezione di taglio che comprenda

tutte le facce interne che stanno a meta del vecchio edge da dividere

3.2 Modifiche topologiche: tagli 65

Figura 3.21: a) Mesh allo stato iniziale. b) I tetraedri originali vengono sostituiti da

un nuovo insieme di tetraedri in modo tale che l’edge venga diviso in due

parti. c) Le funzioni di adiacenza vengono ripristinate. d) Utilizzando il

vertex-split si effettua la separazione dei tetraedri sulla sezione di taglio

appena definita.

(tutte queste facce apparterranno ai nuovi tetraedri) ed utilizziamo

l’operazione di vertex-split per modellare il taglio.

La prima fase non modifica l’apparenza del modello. Effettuano queste

operazioni sostituiamo un insieme di tetraedri con un altro che occupa lo

stesso spazio, passando situazione come mostrata in Figura 3.21.a quella

mostrata in Figura 3.21.b e poi in 3.21.c. la prima fase prepara la mesh

affinche si possa utilizzare , nella fase successiva, l’operazione di vertex-split

su una sezione di facce ben definita. Dopo quest’ultima fase si arriva alla

situazione mostrata in Figura 3.21.d: Il taglio ottenuto divide quindi l’edge

3.2 Modifiche topologiche: tagli 66

Figura 3.22: a) Divisione dell’edge 1: I due nuovi tetraedri saranno formati dalle

quadruple di vertici (0, 1, Vn, 3) e (V n,1, 2, 3). b) Divisione dell’edge 2:

I tetraedri creati sarebbero formati dai vertici (0, 2, Vn, 1) e (Vn, 2, 3, 1).

nelle due parti richieste.

Divisione di un edge Dato un edge Ei i tetraedri che dovranno essere

sostituiti sono tutti quelli che condividono l’edge Ei stesso. Lo strumento

adatto a scorrere in modo ordinato, rispetto ad un senso di rotazione, tutti

i tetraedri che condividono l’edge e l’half-edge (attraverso next edge) .

Supponiamo inizialmente di dover dividere l’edge 1; per suddividere tale

edge in due come prima cosa dobbiamo inserire un vertice nel punto in cui

l’edge va suddiviso. Come mostrato in Figura 3.22.a il vertice Vn e inserito

lungo edge 1 in modo tale da suddividerlo in due; il primo segmento va dal

vertice 0 a Vn, mentre il secondo da Vn al vertice 2. Per ogni tetraedro che

condivide l’edge dovremo creare due tetraedri come illustrato nell’esempio in

Figura 3.22.a; come possiamo notare i due tetraedri creati condivideranno i

vertici 1,3, e Vn, i primi due sono condivisi in quanto non fanno parte dell’edge

da separare. Il tetraedro Ta sara formato quindi dai vertici (0, 1, Vn, 3) mentre

il tetraedro Tb dai vertici (V n,1, 2, 3).

Se invece volessimo separare l’edge 2 i tetraedri creati sarebbero formati dai

3.2 Modifiche topologiche: tagli 67

Figura 3.23: Affinche la divisione di un edge sia effettuata in modo topologicamente

corretto e necessario suddividere tutti i tetraedri che lo condividono.

vertici (0, 2, Vn, 1) e (Vn, 2, 3, 1) Figura 3.22.b. Il caso ottenuto tagliando

l’edge 2 puo essere ricondotto al caso dell’edge 1 tramite una rotazione del

tetraedro, rotazione che deve essere effettuata in modo tale da far coincidere

l’edge 2 nella posizione dell’edge 1.

In pratica ogni caso di taglio di edge possibile puo essere ottenuto attraverso

rotazioni e mirroring del caso illustrato in Figura 3.22.a. Otterremo quindi

12 possibili casi di taglio (uno per ogni edge in entrambe le direzioni) , per

ognuno dei quali dovranno essere specificate le quadruple ordinate di vertici

che definiscono i tetraedri Ta e Tb.

Dopo che tutti i tetraedri che condividevano l’edge da dividere sono stati

sostituiti dai tetraedri Ta, i e Tb, j dobbiamo ripristinare le funzioni di adia-

cenza in modo corretto. Siano Told l’insieme dei tetraedri sostituiti e TA e

TB rispettivamente l’insieme dei tetraedri Ta e Tb definiti come illustrato nel

paragrafo precedente.

3.2 Modifiche topologiche: tagli 68

Per quanto riguarda la funzione di adiacenza vertice-tetraedro le operazioni

da effettuare sono 3:

1. Inserire tutti i tetraedri Ti ∈ TA ∪ TB nell’insieme di tetraedri asso-

ciato al nuovo vertice Vn (e ovvio che ogni nuovo tetraedro condividera

questo vertice).

2. Togliere ogni tetraedro Ti ∈ Told dagli insiemi associati ai suoi vertici.

3. Inserire ogni nuovo tetraedro Ti ∈ TA ∪ TB negli insiemi associati ai

suoi vertici.

Per quanto riguarda la funzione di adiacenza tetraedro-tetraedro, per ogni

nuovo tetraedro Ti ∈ TA ∪ TB:

1. Come illustrato nelle Figure 3.24.a e 3.24.b, le facce F1 ed F3 coinci-

deranno con le facce segnate come F ′1 ed F ′

3. La funzione di adiacenza

TT per queste facce connettera i nuovi tetraedri Ta e Tb con i tetraedri

cui era connesso T; se F1 ed F3 erano facce esterne allora anche F ′1 ed

F ′3 lo saranno.

2. Le faccia Fnew di Figura 3.24.c, sta tra Ta e Tb; la funzione TT per

questa faccia dovra quindi connettere i due tetraedri tra loro.

3. La funzione TT sulle facce F0 ed F2 (Figura 3.24.a) connetteva il tetrae-

dro T con gli altri che condividevano l’edge da dividere, oppure erano

facce esterne. Dopo la sostituzione ognuna di queste due facce viene

divisa in F0a, F0b e F2a, F2b. La funzione di adiacenza TT connettera

ognuna di queste due nuove facce con quelle che vengono create dalla

suddivisione del tetraedro successivo; oppure sara una faccia esterna.

3.2 Modifiche topologiche: tagli 69

Figura 3.24: a) Le adiacenze originali del tetraedro prima della modifica. b) Le adia-

cenze delle facce F1 ed F3 sono equivalenti a quelle delle facce F ′1 ed

F ′3. c) I due tetraedri creati vanno connessi tra loro tramite la faccia

condivisa. d) Tra le coppie di nuovi tetraedri creati vanno connessi in

senso ordinato rispetta all’edge diviso.

3.2 Modifiche topologiche: tagli 70

Modellazione del taglio La mesh si presenta in questa fase formalmente

corretta e dotata di tutte le funzioni di adiacenza. L’edge e gia stato sud-

diviso ma non e stato effettuato il taglio vero e proprio. In virtu di queste

ipotesi possiamo adesso utilizzare l’operazione di vertex-split definendo co-

me superficie di taglio le facce condivise tra ogni coppia di tetraedri di ogni

sostituzione (le facce Fnew di Figura 3.24.c) . Il vertex-split provvedera a

realizzare il resto del taglio restituendo una mesh omeomorfa ad una sfera in

ogni punto.

3.2.5 Riassegnamento dei parametri fisici dopo il taglio

La specifica degli operatori di taglio appena descritta astrae dal modello fi-

sico. In questa fase dobbiamo essere in grado di determinare i valori dei

parametri fisici da associare ai nuovi tetraedri utilizzando i parametri geo-

metrici ottenuti della divisione dei tetraedri.

Dobbiamo preservare il contributo di massa del dominio tetraedrale qualun-

que sia la sua decomposizione, assegnamo cioe il contributo di massa dei

nuovi tetraedri in maniera tale che la loro somma sia equivalente alla somma

dei contributi di massa dei tetraedri originali.

Supponiamo che M0 sia il valore di massa di un vertice della mesh prima

della sua divisione. I valori delle masse dei due vertici creati dalla sua divi-

sione m0 ed m1 devono essere tali che la loro somma sia equivalente ad M .

La ripartizione dei contributi di massa sui due nuovi vertici viene calcolata

in base alla somma dei volumi dei tetraedri che incidono sui due differenti

vertici (come se la massa fosse quindi concentrata all’interno del volume oc-

cupato dai tetraedri). Siano quindi T0 e T1 i due insiemi di tetraedri che

incidono sui vertici v0 e v1 creati dopo l’applicazione del vertex-split, allora

definiamo V ol0 e V ol1 come:

V ol0 =∑

ti∈T0V ol(ti)

3.3 Semplificazione 71

V ol1 =∑

ti∈T0V ol(ti)

Dove V ol(ti) e una funzione che restituisce il volume di un tetraedro. Dato

che T0 e T1 sono due insiemi disgiunti il volume V occupato dall’insieme di

tutti i tetraedri che incidevano sul vertice originale equivale alla somma dei

volumi ripartiti nei due sottoinsiemi creati dopo il taglio.I contributi di massa

dei due vertici saranno allora calcolati come:

m0 = (V ol0/V )M

m1 = (V ol1/V )M

3.3 Semplificazione

Il metodo di taglio proposto in questa tesi puo creare alcuni problemi relativi

alla creazione di nuovi tetraedri:

Problema della frammentazione Nell’utilizzo dell’edge-split, per ogni di-

visione di edge viene raddoppiato il numero dei tetraedri che condivi-

devano quell’edge. Anche se questi operatori di taglio sono stati creati

in modo tale da ridurre al minimo l’incremento di tetraedri in caso di

taglio (rispetto ad esempio all’approccio con suddivisione di tetraedri

gia illustrato nel secondo capitolo) , tale incremento, anche se minimo,

puo degradare col tempo le prestazioni della simulazione.

Tetraedri degeneri L’edge-split puo creare tetraedri degeneri. Un tetrae-

dro degenere e un tetraedro che ha una aspetto non regolare, nell’esem-

pio di Figura 3.25.a il tetraedro T2 puo essere considerato degenere (il

criterio per stabilire l’aspetto di un tetraedro sara esposto in seguito) .

Questi tetraedri possono generare comportamenti anomali nel calcolo

della deformazione del modello.

Il degrado delle prestazioni della simulazione e legato soprattutto al nu-

mero di tetraedri presenti sulla mesh: piu tetraedri ci sono e maggiore sara

3.3 Semplificazione 72

a) b)

Figura 3.25: a) Le operazioni di taglio possono creare tetraedri dall’aspetto non re-

golare (degeneri), in questo caso il tetraedro T2 non e un tetraedro di

buona qualita. b) La semplificazione diminuisce la quantita di tetraedri

eliminando i tetraedri di bassa qualita , migliorando di conseguenza la

qualita della mesh stessa. Le operazioni di taglio tendono invece ad

incrementare la complessita e peggiorare la qualita della mesh.

3.3 Semplificazione 73

la complessita nel calcolo delle forze interne al modello. Affinche il nume-

ro di tetraedri rimanga in un ordine costante e vengano eliminati i tetraedri

degeneri, le operazioni di taglio sulla mesh devono essere compensate da ope-

razioni di semplificazione in modo tale che il numero di tetraedri della mesh

tenda a stabilizzarsi (Figura 3.25.b) .

Un algoritmo di semplificazione costruisce una rappresentazione semplifica-

ta della mesh con un numero minore di entita cercando di preservare il piu

possibile il volume e la forma del modello iniziale. L’approccio adottato in

questa tesi e basato su una strategia di semplificazione di tipo incrementa-

le: La semplificazione procede attraverso una sequenza di modifiche locali

della mesh dove, ad ogni passo, si riduce la descrizione della mesh. La sem-

plificazione incrementale di una mesh e puo essere effettuata seguendo due

strategie:

Strategie di Raffinamento Partendo da una rappresentazione di massima

della regione da semplificare si aggiungono dettagli in modo da ottenere

un modello che si avvicini il piu possibile a quello reale.

Strategie di Decimazione Si eliminano dalla regione da semplificare en-

tita scelte secondo una strategia in modo da generare un modello ap-

prossimato che sia piu fedele possibile a quello reale.

L’algoritmo di semplificazione implementato in questa tesi si basa su una

strategia di decimazione.

3.3.1 Edge Collapse

Semplificare localmente una mesh significa togliere entita in modo da ottenere

una rappresentazione della mesh composta da un minor numero di tetraedri.

L’approccio adottato in questa tesi e basato sull’edge collapse. Ogni passo di

decimazione corrisponde col collasso di un edge; collassare un edge significa

3.3 Semplificazione 74

unificare i vertici dell’edge modificando di conseguenza la mesh, i tetraedri

che contenevano quell’edge saranno cancellati.

La Figura 3.26.a mostra il collasso di un edge su una mesh di triangoli: i

vertici Ve0 e Ve1 sono sostituiti dal solo vertice V col risultato che i triango-

li Fe0 e Fe1, che condividevano l’edge, vengono eliminati, mentre i triangoli

F0 . . . F7 vengono modificati in modo da condividere il vertice V. Non sem-

pre e possibile pero collassare un edge; la Figura 3.26.b mostra un caso in

cui non e possibile collassare l’edge evidenziato; un collasso di questo tipo

genererebbe una situazione topologicamente scorretta.

3.3.2 Correttezza topologica

Dato un edge da collassare c’e un insieme di condizioni necessarie e sufficien-

ti che preservano la correttezza topologica della mesh tetraedrale. Queste

condizioni vengono introdotte in [DEGN99] come link conditions.

Definiamo come Σi la mesh tetraedrale in cui ogni vertice esterno e connesso

ad un vertice fittizio VDummy; secondo questa rappresentazione ogni vertice

esterno genera un edge con VDummy, ogni edge esterno una faccia ed ogni fac-

cia esterna un tetraedro. Sia Ei l’edge da collassare e Σi+1 la mesh ottenuta

dopo il collasso. Sia σ una entita della mesh Σi, definiamo:

St(σ) = τ ∈ Σi|σ ∈ τ

Se σ ad esempio fosse un vertice allora St(σ) sarebbe l’insieme di tutti gli

edge, le facce ed i tetraedri a cui σ appartiene.

Definiamo adesso Lk(σ) come l’insieme di tutte gli elementi appartenenti a

St(σ) ma non incidenti in σ. Siano V0 V1 i vertici che delimitano l’edge da

collassare Ei, allora le seguenti affermazioni sono equivalenti:

• Lk(V0) ∩ Lk(V1) = Lk(Ei)

3.3 Semplificazione 75

a)

b)

Figura 3.26: a) Il collasso dell’edge evidenziato produce una nuova situazione in cui

il numero di triangoli e ridotto di due (ovvero coloro che condividevano

l’edge. b) Il collasso dell’edge evidenziato produrrebbe una situazione

in cui le due facce F0 ed F1 finirebbero schiacciate nel collasso.

3.3 Semplificazione 76

Figura 3.27: a) Lk(a) ∩ Lk(b) = x, y = Lk(Eab). b) Lk(a) ∩ Lk(b) =

x, y, z, Ezx 6= Lk(Eab) = x, y, z.

• Se Σi e un poliedro, allora anche Σi+1 e un poliedro.

Nella Figura 3.27 viene riportato un esempio di collasso su mesh trian-

golare. In 3.27.a Lk(a) ∩ Lk(b) = x, y che e uguale a Lk(Eab), quindi sa-

rebbe possibile effettuare il collasso dell’edge (Eab), la situazione e diversa

per l’esempio mostrato in 3.27.b: Lk(a) ∩ Lk(b) = x, y, z, Ezx, mentre

Lk(Eab) = x, y, z; non e possibile quindi collassare l’edge (Eab) .

Un semplice esempio di applicazione delle link conditions su una mesh

tetraedrale viene rappresentato in Figura 3.28: il vertice fittizio (Dummy)

viene posto al centro del tetraedro per semplicita di rappresentazione. In que-

sta situazione si cerca di collassare un edge di una mesh tetraedrale formata

da un solo tetraedro (e ovvio che tale collasso non debba essere effettuato

affinche la mesh rimanga poliedrica) ; Lk(a) ∩ Lk(b) 6= Lk(Eab) in quanto

Lk(a) ∩ Lk(b)− Lk(Eab) = Ex,Dummy, Ey,Dummy, Fx,y,Dummy.

3.3.3 Correttezza geometrica

La correttezza geometrica del modello risulta piu difficile da garantire. In

ordine di importanza e facilita di implementazione i seguenti test possono

3.3 Semplificazione 77

Figura 3.28: Le Link Conditions non vengono rispettate in quanto Lk(a) ∩ Lk(b)−Lk(Eab) = Ex,Dummy, Ey,Dummy, Fx,y,Dummy

essere effettuati sui tetraedri modificati [CCM+00]:

Flip In alcuni casi il collasso di un edge puo provocare l’inversione di un

tetraedro.

Shape Alcuni collassi possono creare tetraedri deformi (ci sono diversi me-

todi per valutare la qualita della forma di un tetraedro).

Auto Intersezioni In rari casi il collasso di un edge puo provocare una auto

intersezione della mesh.

Nel framework proposto questa tesi sono stati risolti i primi due problemi:

Per quanto riguarda il flipping del tetraedro e sufficiente effettuare il test

sull’ordinamento dei vertici definito in 3.1.

Il problema relativo ai tetraedri degeneri viene risolto attraverso l’ordine in

cui vengono effettuati i collassi durante la decimazione; i collassi cui vengono

eliminati tetraedri degeneri sono quelli con priorita piu alta.

Il problema delle auto intersezioni e un problema molto complesso in quan-

to e l’unico caso i cui effetti possono essere non locali rispetto al collasso (si

3.3 Semplificazione 78

possono creare cioe auto-intersezioni tra qualsiasi tetraedro appartenente alla

mesh anche se questi non e coinvolto direttamente nel collasso) . Fortuna-

tamente questi tipi di situazioni sono piuttosto rare e possono percio essere

trascurate.

3.3.4 Riassegnamento dei parametri fisici dopo la sem-

plificazione

Come avviene per le operazioni di taglio, la massa, alla fine di una operazione

di semplificazione, deve essere redistribuita sui vertici in modo proporzionale

al volume dei tetraedri vi incidono

L’oggetto deformabile deve essere trattato come se la sua massa fosse unifor-

memente distribuita all’interno del volume dei tetraedri. Ciascun tetraedro

contribuisce, in maniera proporzionale al suo volume ad alla densita di massa

del materiale cui e composto, alla massa presente su ciascun vertice. Sup-

ponendo che densita di massa sia la stessa in ciascun tetraedro della mesh,

dopo ciascuna operazione di edge collapse dobbiamo effettuare le seguenti

operazioni :

• Eliminare il contributo di massa dei tetraedri eliminati o modificati

durante il collasso.

• Aggiungere il contributo di massa dei tetraedri modificati dopo il col-

lasso.

3.3.5 Implementazione della decimazione

L’edge collapse e uno strumento che viene utilizzato per migliorare localmente

la mesh nei punti in cui sono stati effettuati dei tagli. Il dominio di questi

collassi sono tutti i tetraedri creati durante il taglio, ogni collasso interessa

un edge di questi tetraedri. L’approccio utilizzato consiste nel trovare quali

3.3 Semplificazione 79

siano i tetraedri di qualita peggiore e quindi quali siano gli edge da collassare

in modo da rimuovere quei tetraedri.

Come gia presentato precedentemente quando avviene un collasso l’edge viene

sostituito da un vertice; questo vertice puo essere posto sulla posizione di

uno dei due vertici, a meta dell’edge collassato, oppure possiamo cercare il

punto per il quale otteniamo come risultato la mesh migliore. Quest’ultima

soluzione risulta la piu efficace ma anche quella di complessita maggiore;

del resto gli edge che andremo a collassare (in quanto condivisi da tetraedri

degeneri) saranno di solito edge molto corti, percio la posizione su cui porre il

vertice durante il collasso non rappresenta un fattore importante nell’efficacia

della decimazione.

Aspect Ratio di un tetraedro Una misura della qualita di un tetraedro

puo essere ottenuta attraverso l’aspect ratio. Ci sono diversi metodi per

esprimere l’aspect ratio di un tetraedro, i piu utilizzati sono due:

• Misurare l’aspect ratio attraverso il rapporto tra la sfera inscritta e

quella circoscritta in un tetraedro.

• Misurare l’aspect ratio come il minimo angolo solido di un tetraedro.

Ogni collasso candidato avra quindi un indice di priorita calcolato in base

alla media aspect ratio dei tetraedri che lo condividono. L’algoritmo di de-

cimazione sceglie tra tutti i possibili collassi quello che elimina il gruppo di

tetraedri di peggiore qualita, reinserendo nell’insieme di tutti i candidati i

collassi relativi ai tetraedri appena modificati.

Il meccanismo delle marche temporali I collassi candidati devono es-

sere eseguiti nell’ordine giusto, prediligendo nel nostro caso quelli che coin-

volgono il gruppo di tetraedri che ha un aspect ratio medio peggiore.

Di solito si rappresenta l’insieme dei possibili collassi attraverso una coda con

3.3 Semplificazione 80

priorita (di solito un heap) contenente tutti i possibili collassi con la relativa

stima di priorita. Questa coda con priorita deve essere aggiornata dopo ogni

collasso modificando la priorita di ogni collasso adiacente a quello appena

eseguito (si possono modificare notevolmente le proprieta geometriche dei

tetraedri coinvolti e quindi anche il loro aspect ratio) .

Un buon metodo per evitare l’aggiornamento esplicito degli elementi della

coda con priorita e quello di utilizzare delle marche temporali sui vertici per

stabilire se un collasso sia aggiornato oppure no. Piu precisamente:

• Inizialmente ogni collasso candidato ed ogni vertice hanno la stessa

marca temporale.

• Per ogni collasso tolto dalla coda con priorita stabiliamo se e up to date.

Un collasso e up to date se la marca temporale del collasso e maggiore

o uguale a quella dei suoi vertici.

• Se il collasso appena estratto e up to date allora possiamo effettuare il

collasso marcando i vertici dell’edge coinvolto con la marca temporale

corrente.

Capitolo 4

La modellazione del contatto

Nel capitolo precedente sono state definite le operazioni di modifica e sempli-

ficazione della mesh tetraedrale. Ciascuna di queste operazioni (vertex-split,

edge-split e collasso) modifica la mesh tetraedrale preservando le sue pro-

prieta. Queste operazioni sono pertanto operazioni atomiche.

I due operatori di modifica sono stati realizzati con lo scopo di modellare

dei tagli sull’oggetto deformabile. Per simulare il taglio effettuato dal bistu-

ri sull’oggetto dobbiamo innanzitutto modellare il contatto tra il bisturi e la

mesh. Attraverso l’analisi degli stress imposti dal bisturi sulla mesh possiamo

stabilire dove utilizzare gli operatori di modifica simulando di conseguenza

il taglio. L’utente finale utilizzara una periferica di tipo force-feedback per

muovere il bisturi nello spazio e provare, quando avviene un contatto con

l’oggetto deformabile, la sensazione del contatto.

4.1 Collision Detection

Il termine collision detection indica il problema di rilevare le collisioni tra gli

oggetti presenti nella scena e di determinare le informazioni sul contatto quali

la posizione dove questo occorre e la profondita di penetrazione tra gli oggetti

coinvolti. La difficolta di questo problema varia con il comportamento degli

oggetti: dal caso piu facile, quello di oggetti rigidi, a quello piu complesso,

4.1 Collision Detection 82

quando gli oggetti sono fortemente deformabili. Nel caso preso in esame in

questa tesi gli oggetti che compongono la scena sono due: il bisturi (o un

qualsiasi altro attrezzo utilizzato in chirurgia) e il modello deformabile.

4.1.1 Tecniche di Collision Detection

La collision detection tra modelli generici e stata studiata negli anni in molti

campi: CAD/CAM, robotica, simulazioni e computer animation. Le soluzio-

ni proposte variano a seconda della rappresentazione geometrica degli oggetti

compongono la scena e dei dati che l’algoritmo di collision detection dovra

fornire.

Per esempio, gli algoritmi che mantengono la minima distanza euclidea tra

due oggetti sono spesso utilizzati nelle applicazioni di progettazione. Nel

nostro caso siamo interessati ai metodi che rilevano la collisione tra modelli

poligonali in tempo reale, non abbiamo quindi bisogno della distanza Eucli-

dea tra due oggetti che non collidono.

Molto del lavoro svolto nella collisione tra modelli poligonali e orientato verso

gli algoritmi che operano su poliedri convessi. Questi algoritmi si basano su

specifiche strutture dati create per la ricerca dei punti di contatto tra polie-

dri mantenendo la loro coerenza con la geometria durante l’animazione. Le

possibili ottimizzazioni su questi tipi di algoritmi si basano su organizzazioni

gerarchiche di bounding volumes: le soluzioni variano da alberi di box alli-

neati con gli assi,alberi di sfere, BSPTree.

Nonostante la loro efficienza questo tipo di algoritmi non puo essere utilizzato

nel caso di un simulatore chirurgico in quanto gli organi sono generalmente

non convessi e sottoposti in tempo reale a forti deformazioni.

L’algoritmo utilizzato nello svolgimento di questa tesi si basa sull’utilizzo

dell’hardware grafico.

4.1 Collision Detection 83

Figura 4.1: a) Esempio di collisione statica: nel time step di controllo t0 il bisturi

collide con la mesh.b) Esempio di collisione dinamica: la collisione avviene

tra due time step successivi (t0, t1) ma istantaneamente nessuno di essi

si trova in collisione con la mesh. ).

4.1.2 La Collision Detection nella simulazione chirur-

gica

Nel contesto della simulazione chirurgica, non possono essere applicate tec-

niche di collision detection basate sulla precomputazione di strutture dati

dipendenti dalla forma degli oggetti, in quanto sono presenti nella scena og-

getti deformabili, ovvero la cui forma non e costante.

Contatti tra il bisturi ed il modello deformabile possono avvenire ad ogni

istante (in una situazione reale il chirurgo operando provoca contatti molto

4.1 Collision Detection 84

di frequente) . Per questa ragione il controllo sulle intersezioni deve essere

effettuato ad ogni passo discreto della computazione; la collision detection

deve quindi essere effettuata in maniera molto efficiente. Non e sufficiente

pero testare la collisione in ogni passo discreto della computazione: il nostro

algoritmo di collision detection deve essere in grado di rilevare anche le colli-

sioni che avvengono tra due passi discreti consecutivi: oggetti che si muovono

possono anche entrare in collisione tra due time steps consecutivi senza che

in ognuno dei due istanti gli oggetti siano siano realmente in contatto tra

loro (Figura4.1) .

Le collisioni che vengono rilevante in un istante discreto sono dette stati-

che mentre quelle che avvengono tra due istanti successivi sono dinamiche.

Determinare l’intersezione geometrica tra le primitive che compongono gli

oggetti presenti nella scena e una operazione di elevato costo computazionale

e puo costituire un vero e proprio collo di bottiglia se tale controllo viene

effettuato ad ogni time step della simulazione.

Utilizzando un metodo basato sull’hardware grafico possiamo ridurre il nu-

mero di poligoni coinvolti nel test geometrico. Questo ultimo test infine

rivelera l’intersezione tra un sottoinsieme delle primitive che compongono la

scena, fornendo i dati necessari all’implementazione del contatto tra il bisturi

e l’oggetto deformabile.

4.1.3 La Collision Detection con hardware grafico

Rilevare una collisione tra due oggetti consiste nel verificare che il volume

del primo (ad esempio il tool che ha una forma regolare) intersechi quello del

secondo. Questo processo ha delle similitudini col processo di visualizzazione

di una scena.

In questo caso l’utente specifica un volume di vista, il view frustum, caratte-

rizzato dalla locazione, orientamento e proiezione della camera; l’algoritmo

4.1 Collision Detection 85

Figura 4.2: a) La camera ortografica in OpenGL. b) La camera Prospettica. In en-

trambi i casi il volume di vista viene limitato dai parametri Top, bottom,

left, right, near, far ).

4.1 Collision Detection 86

di frustum culling scarta i poligoni che non intersecano il volume di vista.

Il metodo che impieghiamo e stato proposto in [LCN99] e consiste nell’ap-

prossimare la forma del bisturi (che avendo una forma abbastanza semplice

puo del resto essere schematizzato come un parallelepipedo) con un view

frustum e sfruttare il vantaggio che l’algoritmo di frustum culling viene ese-

guito dall’hardware.In questo modo selezioniamo il sottoinsieme di primitive

componenti il modello che sulle quali effettuare il test geometrico.

Implementazione con OpenGL Il processo di visualizzazione puo esse-

re diviso in fase geometrica e fase di rasterizzazione. La parte geometrica

converte tutte i poligoni nel sistema di coordinate di camera, seleziona tutte

le facce che intersecano il volume di vista e calcola la proiezione dei vertici

sullo schermo. Successivamente, la fase di rastering determina quali pixel

devono essere accesi (utilizzando lo Z-Buffer ed il color buffer) . OpenGL

offre la possibilita di cambiare modalita di rendering in select mode. In que-

sto tipo di modalita di rendering, diversamente da quella classica non viene

effettuata alcuna fase di raster e vengono eliminate inoltre altre operazioni di

complessita notevole (ad esempio il calcolo dell’illuminazione) . Il select mode

(che si ottiene tramite la funzione glRenderMode(GL_SELECT)) restituisce le

informazioni relative ai gruppi di facce visibili. Ogni gruppo viene definito

utilizzando la funzione glPushName(), chiamata prima che ciascun gruppo

di facce sia disegnato. OpenGL riempie un array durante la fase geometrica

scrivendo tutti i gruppi che appaiono nel volume di vista. Associando un

nome per ogni tetraedro si possono cosı conoscere i tetraedri che appaiono

sul volume di vista.

La Collision Detection statica Chiamiamo adesso Head e Tail rispet-

tivamente la punta e la base del tool. La collisione statica tra il bisturi e

a mesh poligonale rappresentante l’organo puo essere effettuata associando

4.1 Collision Detection 87

Figura 4.3: a) I punti head e tail del bisturi b) La camera posizionata col volume di

vista corrispondente alla forma del bisturi

una camera ortografica al bisturi (Figura 4.3) . La camera e posizionata sul

punto Head ed e direzionata lungo l’asse (Head,Tail) (utilizzando al funzione

gluLookAt()) . I parametri Near e Far (che definiscono gli estremi del volu-

me di vista) sono rispettivamente 0 e ‖Tail −Head‖. La sezione del bisturi

e compresa utilizzando i parametri Left, Right, Top e Bottom della camera

in accordo con la forma del bisturi.

Il movimento del bisturi ed i dati restituiti La soluzione presentata

nel paragrafo precedente verifica la collisione tra il bisturi in una determinata

posizione e il modello deformabile in un preciso time step. Se l’utente muove

il bisturi in maniera veloce parte della superficie di taglio definita dal movi-

mento potrebbe non venire considerata nella verifica della collisione (Figura

4.4) .

Per risolvere questo di problema approssimiamo il volume descritto dal bi-

4.1 Collision Detection 88

Figura 4.4: a) Il tetraedro evidenziato viene individuato nel caso di collisione statica

b) Caso in cui un tetraedro che entra in collisione tra due time step

consecutivi non viene rilevato.

sturi durante il suo movimento. Piu in dettaglio creiamo un volume di vista

utilizzando la proiezione ortografica una posizione del bisturi sul quella del

time step successivo. Se in due time step successivi ti e t(i+1) abbiamo le

due coppie (Headti , Tailti) e (Headt(i+1), Tailt(i+1)

) il volume di vista sara co-

struito in modo tale da comprendere i volumi definiti nei due singoli istanti

(Figura 4.5.a) . Con questa estensione vengono riscontrate anche le collisioni

avvenute tra due time step successivi.

Ci possono essere pero situazioni in cui questo tipo di algoritmo individua

collisioni anche se in realta esse non accadono (Figura 4.5.b) . Il successi-

vo passo dell’algoritmo individuera tra i tetraedri restituiti da questo primo

passo di collision detection quelli che realmente sono stati toccati dal bisturi.

4.1 Collision Detection 89

Figura 4.5: a ) La regione di spazio individuata e la proiezione di un volume sul

successivo. b ) Caso in cui l’estensione rivela collisioni che in realta non

esistono (la superficie di taglio evidenziata non interseca nessun tetraedro

4.1.4 L’intersezione geometrica

I tetraedri che sono stati individuati nel passo precedente non son necessa-

riamente tetraedri che sono stati toccati dal bisturi. Per individuare questo

sottoinsieme e necessario basarsi sulle proprieta geometriche della superficie

di taglio e del modello deformabile. Come gia accennato nel capitolo 2 il mo-

vimento del bisturi, e quindi la superficie di taglio, puo essere schematizzata

come una serie di triangoli connessi.

Chiamiamo Tetra0 l’insieme dei tetraedri individuati dalla collision detection

al primo passo di selezione e siano (Headti , Tailti) e (Headt(i+1), Tailt(i+1)

)

i punti head e tail del bisturi agli istanti ti e t(i+1). Tra due time step

successivi si puo dividere la superficie di taglio nei due triangoli Tr0 =

(Headti , Tailti , Headti) e Tr1 = (Headt(i+1), Tailt(i+1)

, Tailti). L’insieme dei

tetraedri Tetra1 che sono intersecati dalla superficie di taglio sara:

4.1 Collision Detection 90

Figura 4.6: In questo schema sono sintetizzati i due passi della collision detection: Un

primo passo utilizza l’hardware grafico e produce un sovrainsieme di tutti

i tetraedri coinvolti nella collisione; mentre nel secondo passo vengono

determinati, tramite il test geometrico, quali tra essi sono effettivamente

entrati in contatto con la superficie di taglio

Tetra1 = Ti ∈ Tetra0 : (Ti ∩ Tr0) ∪ (Ti ∩ Tr1) 6= ∅ (4.1)

Ovvero l’insieme dei tetraedri selezionati al primo passo di collision de-

tection che si intersecano con uno dei due triangoli della superficie di taglio.

In caso tale collisione avvenisse l’algoritmo deve produrre i dati necessari

alla modellazione della deformazione.

Per modellare una deformazione (o successivamente un taglio) l’algoritmo di

collision detection, per ogni tetraedro coinvolto nel contatto, dovra restituire:

• Su quale faccia esterna del tetraedro sia avvenuto il contatto.

• Quale e il segmento di intersezione tra questa faccia e il triangolo della

superficie di taglio

• Quantificare la penetrazione del bisturi nella mesh.

Una buona quantificazione della penetrazione potrebbe essere la minima

distanza che occorre tra il segmento di taglio (head, tail) ed il segmento di

intersezione sulla faccia.

4.2 Il contatto 91

Figura 4.7: Il segmento (S1, S2) indica il punto in cui la superficie di taglio e entrata

in contatto con il tetraedro T, mentre il vettore d indica la penetrazione

all’interno del tetraedro stesso

Supponiamo di avere la situazione illustrata in Figura 4.7: la faccia da resti-

tuire e la faccia Fa del tetraedro T , il segmento di intersezione e costituito dal-

la coppia S1 e S2, e il vettore d rappresenta la penetrazione. Saranno questi

tutti dati indispensabili al calcolo della deformazione e della corrispondente

forza di feedback da restituire all’utente.

4.2 Il contatto

Simulare la deformazione di un tessuto significa calcolare la sua forma in ogni

istante di tempo. Per una realistica modellazione dell’intersezione con un og-

getto, la sola visualizzazione della deformazione del modello non e sufficiente;

e fondamentale fornire una forza di feedback all’haptic device in modo che

l’utente possa provare la sensazione di toccare il tessuto.

4.2 Il contatto 92

Affinche la forza di feedback della simulazione sia percepita in modo continuo

e realistico dall’utente, dovremmo ottenere una frequenza di aggiornamento

del sistema nell’ordine di 1KHz. Purtroppo la frequenza di aggiornamento

del framework puo variare nell’ordine delle decine di Hz. Questa differenza

tra le frequenza di aggiornamento cui necessita l’interfaccia haptic feedback

e la frequenza di aggiornamento del sistema, puo essere causa di instabilita

nell’haptic device (queste oscillazioni possono creare notevoli problemi all’u-

tente durante la simulazione) .

Il problema della deformazione del modello a contatto con il tool e connesso

al calcolo dell’approssimazione della forza di feedback restituita all’utente.

Durante lo svolgimento di questa tesi non e stato possibile purtroppo dispor-

re di un haptic device, mi sono limitato quindi, in questa fase del lavoro,

alla parte grafica della deformazione. Nelle sezioni che seguono illustrero le

varie tipologie di approcci alla deformazione ed al calcolo della forza di feed-

back, con particolare rilievo all’approccio utilizzato durante lo svolgimento

di questa tesi.

4.2.1 Le forze di di deformazione

Nel sistema di scambio di forze tra utente e oggetto deformabile che stia-

mo descrivendo, l’utente imprime una certa forza Fext al tool che produce

alcune deformazioni sul tessuto. Il tessuto resistera a tale deformazione con

una forza variabile dipendente dai suoi parametri fisici, restituendo cosı una

forza di reazione Ftissue. Maggiore sara la forza impressa dall’utente Fext e

maggiore sara la forza di reazione del tessuto Ftissue che continuera a defor-

marsi. Quando le due forze Fext e Ftissue risultano opposte ma con la stessa

intensita la deformazione avra raggiunto il suo massimo. Mentre nel caso in

cui |Fext| < |Ftissue| il tessuto tornera verso la situazione iniziale di equilibrio.

La forza che viene restituita all’utente equivale a Fext.

4.2 Il contatto 93

Figura 4.8: Un esempio di haptic device: Il phantom 1.5/6 DOF e un force feedback

device che fornisce una forza di feedback con 6 gradi di liberta. Questo

modello, oltre a restituire una forza all’utente offre la possibilita di definire

anche forze di torsione.

Su questo tipo di modello ideale sono state create differenti strategie per il

calcolo della deformazione e della forza Ftissue. Queste strategie approssima-

no il contatto tra il tool ed il tessuto modellando la superficie di contatto

come se fosse un punto (non una superficie come sarebbe nella realta) .

4.2.2 Approccio con molla

Questo metodo propone di modellare l’iterazione tra il tool ed il tessuto

ponendo una molla che connetta il punto in cui si trova l’estremita del tool

Ptool con il punto in cui il tool ha penetrato la superficie di contatto Pproxy.

La forza elastica della molla viene adesso utilizzata per calcolare la forza Fext:

Fext = −Fspring = c · (Ppoint − Pproxy) (4.2)

La forza esterna trovata viene poi applicata su un nodo della mesh producen-

do la deformazione desiderata.La costante c rappresenta la rigidita dinamica

4.2 Il contatto 94

Figura 4.9: Le fasi della deformazione del Tessuto: a) Deformazione b) Stato di

equilibrio c) Rilassamento

del materiale.

Mentre il tessuto e deformato la sue forza elastica Ftissue tendera a riportare il

tool fuori dall’intersezione con il tessuto. Il sistema raggiunge lo stato di equi-

librio quando Fext = −Ftissue (Figura 4.10) . Utilizzando questo approccio,

se non viene utilizzata una costante di elasticita della molla adeguato, pos-

siamo trovarci in situazioni in cui, durante la deformazione, la parte frontale

del tool svanisce all’interno della mesh.

4.2.3 Approccio con Force Grid

Consideriamo un haptic device con 3 gradi di liberta che produca una for-

za 3D in un punto Pproxy. L’oggetto deformabile e immerso in una griglia

regolare W . Ogni vertice di W contiene le forze di reazione che dovrebbe

essere restituita se la superficie dell’oggetto passasse par tale vertice. Tali

valori sono ottenuto proiettando la forza di reazione dei vertici dell’oggetto

sui vertici di W con una funzione basata sulla distanza. Ne segue che i valori

di W vengono aggiornati alla stessa frequenza del rendering visuale.

Disponendo della griglia W , la forza di reazione in un punto generico P vie-

4.2 Il contatto 95

Figura 4.10: Fasi del calcolo dell deformazione utilizzando una molla:La forza

Fext = −Ftissue, l’allungamento della molla da proxypoint a toolpoint

restituisce al tool la forza Fspring

ne ottenuta da quella memorizzata nei vertici della cella che contiene P per

interpolazione trilineare.

4.2.4 Approccio con spostamento delle facce

L’approccio utilizzato in questa tesi si concentra maggiormente sulla mo-

dellazione della deformazione piuttosto che sulla modellazione del contatto

stesso tramite l’haptic feedback device.

In questo metodo il modello viene modificato geometricamente in modo che

il tool non sia mai dentro il volume del modello deformabile; come reazio-

ne a questa deformazione geometrica il tessuto tendera a tornare alla forma

iniziale (di equilibrio) . Il principio su cui si basa questo metodo puo essere

visto come opposto rispetto all’approccio con la molla. Nell’approccio con la

molla viene posta una resistenza artificiale alle forze esterne, la deformazione

avviene quindi attraverso l’allungamento o la contrazione della molla stessa

e la forza di feedback viene calcolata di conseguenza. Il metodo dello sposta-

mento delle facce e invece un metodo di fatto adattivo: lo spostamento delle

4.2 Il contatto 96

Figura 4.11: Una parte di Force Grid

faccia esterna produce una perturbazione nello stato iniziale della mesh; le

proprieta elastiche intrinseche al modello deformabile creano una forza che

tende a riportare la mesh allo stato iniziale, le componenti normali alla su-

perficie costituiranno la forza di feedback.

Come illustrato in Figura 4.12 le facce che entrano in collisione con il tool

vengono spostate affinche i due volumi non si intersechino piu. Questo mo-

vimento crea delle forze interne al modello deformabile Fi0 ed Fi1 che ten-

derebbero a riportare il modello nella posizione di equilibrio. Annullando la

componente di tali forze lungo la normale delle faccia N impediamo che tool

e modello deformabile entrino di nuovo in contatto tra loro.

La forza di feedback sul tool puo essere calcolata tramite un’interpolazione

delle forze presenti sui tre vertici della faccia rispetto alla posizione attuale

del tool.

4.2 Il contatto 97

Figura 4.12: Le tre fasi dell’approccio con traslazione della faccia: a) Il tool interseca

la mesh. b) La faccia viene traslata affinche la mesh non intersechi piu il

tool, i vertici traslati (grazie alle proprieta elastiche del modello) reagi-

scono allo spostamento con una forza (Fi0 e Fi1) che tende a riportarli

nella posizione iniziale c) Le componenti di Fi0 e Fi1 lungo la direzione

della normale N, ovvero F ′i0 e F ′

i1, vengono annullate tramite due forze

opposte che agiscono sugli stessi vertici Fext0 e Fext1

4.3 Il taglio 98

4.3 Il taglio

Le soluzioni proposte finora nello stato dell’arte sono orientate verso una

concezione di taglio guidata dal movimento del tool all’interno del volume

della mesh.

Nell’approccio con suddivisione dei tetraedri, ad esempio, la suddivisione

di un insieme di tetraedri viene guidata dal movimento compiuto dal tool

all’interno del volume di un tetraedro. Questo tipo di rappresentazione del

taglio si basa su una rappresentazione errata della fisica del contatto tool-

tessuto. In realta i due volumi non si intersecano mai; il taglio avviene dove lo

stress esercitato dal tool sulla superficie del modello supera una certa soglia;

il tipo di taglio proposto in questa tesi si basa su questo principio. Quando

una faccia della mesh subisce uno stress troppo alto allora avviene il taglio.

Lo stress sulla faccia e una forza opposta alla forza di feedback ma di uguale

intensita.

Una volta individuato il vettore che definisce lo stress sulla superficie della

mesh dobbiamo scegliere quale dei due operatori di taglio utilizzare ed infine

come utilizzarli in maniera tale che il taglio sia una rappresentazione piu

fedele possibile degli stress a cui e sottoposta la mesh.

4.3.1 Modellazione del taglio guidata dall’errore

Supponiamo di conoscere il punto in cui deve avvenire il taglio e la dire-

zione dello stress imposto dal tool sulla superficie del modello deformabile.

Applicando l’edge-split potremmo modellare il taglio nel modo piu accurato

possibile: La faccia toccata dal tool verrebbe suddivisa nel punto di maggiore

stress (Figura 4.13.b) .

L’utilizzo dell’edge-split incrementa pero il numero di tetraedri della mesh. Il

vertex-split potrebbe essere invece utilizzato definendo una sezione di taglio

in modo tale da dividere i vertici di maggior stress. L’utilizzo del vertex-

4.3 Il taglio 99

Figura 4.13: differente utilizzo degli operatori di taglio: a) Il tool interseca la mesh,

creando i vettori di stress evidenziati b) Utilizzando l’edge split dividia-

mo la mesh esattamente nel punto di maggiore stress c) Utilizzando

l’operazione di vertex-split il taglio viene effettuato sul vertice che ha lo

stress maggiore

4.3 Il taglio 100

split produrrebbe quindi una rappresentazione piu approssimata del taglio;

il punto in cui il tool entra in contatto con superficie (che e anche il punto

di maggior stress) sarebbe cosı approssimato con il vertice, appartenente alla

stessa faccia, che subisce lo stress esterno maggiore (Figura 4.13.b ) . Pur

fornendo una soluzione al taglio meno accurata dell’edge-split, l’operazione

di vertex-split ha il grande vantaggio di non creare nuove entita nella me-

sh. Risulta quindi necessario formulare una strategia di scelta tra questi due

operatori durante la simulazione.

Ogni qualvolta che utilizziamo il vertex-split approssimiamo il taglio al ver-

tice della stessa faccia dove lo stress risulta maggiore. Questo errore puo es-

sere quantificato ed utilizzato per scegliere quale dei due operatori utilizzare.

Possiamo quindi esprimere l’errore come:

Err = |Pstress − Vstress| (4.3)

dove Pstress indica il punto di maggiore stress, mentre Vstress indica il vertice

nel caso in cui utilizzassimo il vertex-split. Questa misura dell’errore, anche

se corretta, e incompleta: dobbiamo considerare l’errore rispetto al punto di

vista dell’utente durante la simulazione.

Se ad esempio, durante il rendering, la mesh e lontana dal punto di vista

dell’utente l’errore commesso sara visibilmente meno evidente dello stesso

errore nel caso in cui avessimo un punto di vista ravvicinato. Possiamo quindi

considerare l’errore commesso come la proiezione dell’errore precedentemente

trovato sul punto di vista dell’utente, ottenendo cosı una stima dell’errore in

pixel. La funzione di OPENGL gluProject permette di ottenere , date

le coordinate 3d di un punto nel sistema di riferimento dell’ambiente, le

coordinate 2d della sua proiezione sulla finestra visualizzata. L’errore in

pixel potra essere quindi espresso come:

Errpixel = |gluProject(Pstress)− gluProject(Vstress)| (4.4)

4.3 Il taglio 101

Se l’errore stimato in pixel supera la tolleranza allora utilizzeremo l’edge-split,

altrimenti il vertex-split.

bool Tolerance(Point3d p0,Point3d p1)

return (ComputeError(p0,p1)<pixel);

void Docut(MESH_TYPE::MTTYPE *t0,int face)

.....// cut \‘e il punto di maggiore stress

//vcut \‘e il vertice nel caso in cui utilizzassimo

//vertex-split

if (!Tolerance(vcut->P(),cut))

Operator1(t0,face);

else

Operator0(vcut);

4.3.2 Vertex-split, calcolo della sezione di taglio

Supponiamo di dover modellare il taglio sul tessuto deformabile tramite l’ap-

plicazione del vertex-split. Come esposto nel precedente paragrafo questo

operatore va applicato in modo da duplicare il vertice di stress maggiore

Vstress.

Per applicare l’operazione di vertex-split dobbiamo innanzitutto definire una

sezione di taglio valida costruita in maniera tale da dividere il vertice Vstress.

Potremmo definirla utilizzando solamente facce che condividono tale vertice.

Siccome Vstress e vertice esterno questa sezione di taglio conterra sicuramen-

te due edge esterni che lo condividono, questo comporta la duplicazione di

Vstress durante l’applicazione del vertex-split. Possiamo costruire piu sezioni

4.3 Il taglio 102

da taglio di questo tipo utilizzando uno stesso vertice Vstress.

La deformazione del tessuto (ovvero lo spostamento della faccia a contatto

col tool) , date le proprieta elastiche del modello, crea delle forze di stress sui

vertici interni della mesh. La sezione di taglio prescelta deve essere costruita

in modo da separare le facce che contengono i vertici dove lo stress concen-

trato e massimo. La costruzione della sezione di taglio puo essere suddivisa

in due fasi:

Scelta della prima faccia Tra tutte le facce interne incidenti sul vertice

scegliamo quella i cui due vertici diversi da Vstress hanno in media uno

stress interno maggiore. Lo stress interno viene valutato come proie-

zione della forza interna sulla forza esterna impressa sul vertice Vstress

(Figura 4.14.a) .

Completamento della sezione di taglio Supponiamo che Finit sia la fac-

cia iniziale selezionata. Come illustrato in Figura 4.14.b , a partire dai

due edge E0 ed E1 vengono selezionate le facce che condividono questi

due edge e che sono piu complanari possibile rispetto alla faccia ini-

ziale. Iterando questo passo i nuovi edge selezionato saranno E2 ed

E3. Questa operazione di selezione viene ripetuta fino a che verranno

selezionati due edge esterni (Figura 4.14.c ) .

4.3 Il taglio 103

Figura 4.14: Creazione di una superficie di taglio: a) La faccia Finit e quella di

maggiore stress interno. b) A partire dai due edge E0 ed E1 vengono

selezionate le facce che condividono questi due edge e che sono piu

complanari possibile rispetto alla faccia iniziale. c) Nell’ultima iterazione

gli edge E4 ed E5 sono esterni.

Capitolo 5

Risultati sperimentali e sviluppi futuri

5.1 Risultati sperimentali

Le Tabelle che seguono sono i risultati dei test eseguiti su un PC Intel Pen-

tium 4 2.53 GHz. Le Tabelle 5.1 e 5.2 riportano rispettivamente i tempi medi

di esecuzione dell’edge-split e del vertex-split espressi in millisecondi ottenuti

utilizzando due mesh tetraedrali di diversa grandezza e forma.

Le tabella 5.3 illustra il tempo medio necessario all’esecuzione di un pas-

so di decimazione. Il test e stato ottenuto effettuando collassi su un numero

molto elevato di edge della mesh senza che intervenissero operazioni esterne

ad incrementare la dimensione in entita della mesh. I collassi effettuati mo-

tetraedri vertici edge-split Tempo Media

768 243 384 140 0.3645

6000 1331 3000 1375 0.4583

Tabella 5.1: Tabella dei tempi di esecuzione dell’edge-split: prime due colonne della

tabella riportano il numero di tetraedri e di vertici della mesh allo stato

iniziale, mentre la terza indica il numero di volte che l’edge-split e stato

eseguito. Seguono il tempo totale di esecuzione e la media di tempo per

operazione espressi in millisecondi.

5.1 Risultati sperimentali 105

tetraedri vertici Split effettuati Split non effettuati Tempo Media

768 243 127 84 15 0.0712

6000 1331 980 142 63 0.05614

Tabella 5.2: Tabella dei tempi di esecuzione del vertex-split: Le prime due colonne

della tabella riportano il numero di tetraedri e di vertici della mesh allo

stato iniziale, mentre la terza e la quarta indicano il numero di volte che

il vertex-split e stato eseguito ed il numero di volte in cui la sezione di

taglio definita non era valida. Seguono il tempo totale di esecuzione e

la media di tempo per operazione espressi in millisecondi.

tetraedri vertici collassi effettuati collassi non effettuati Tempo Media

1168 288 82 101 500 2.73

1168 288 206 494 953 1.36

1168 288 241 814 1047 0.99

Tabella 5.3: Tabella dei tempi della decimazione con tolleranza massima di

cambiamento di volume pari a 1/50 del volume originale

dificano la mesh per un volume minore di 1/50 del volume totale.

L’elevato numero di collassi non effettuati di questo test deriva dalle link

conditions che si fanno sempre piu difficili da soddisfare all’aumentare dei

colassi effettuati. Nel simulatore la decimazione coinvolge solo localmente la

mesh nelle zone in cui sono stati effettuati divisioni di tetraedri, pertanto

non presenta una percentuale di fallimento cosı alta.

La tabella 5.4 riporta invece i tempi necessari al ripristino della proprieta

fisiche della mesh dopo un collasso (redistribuzione delle masse sui vertici,

assegnazione delle proprieta elastiche dei tetraedri modificati) .

Nel grafico riportato in Figura 5.1 vengono riportate le differenti distribu-

zioni relative all’aspect Ratio dei tetraedri dell’intera mesh dopo le operazioni

di taglio riportate nella tabella 5.5.

5.1 Risultati sperimentali 106

tetraedri vertici collassi effettuati Tempo Media

768 243 3840 31 0.00807

1168 288 5840 47 0.00807

6000 1331 30000 266 0.0088

Tabella 5.4: Tabella dei tempi di ripristino delle proprieta fisiche della mesh dopo un

collasso

Figura 5.1: Il grafico di sinistra riporta la distribuzione dell’aspect ratio dei tetraedri

creati dopo il test riportato in tabella 5.5. Il grafico a destra illustra il

numero di tetraedri totali dopo l’esperimento.

5.1 Risultati sperimentali 107

ratio media tetraedri vertici e-v e-s collassi

0.201192 660 201 0 0 0

0.159835 1227 303 16 83 0

0.177829 724 239 16 83 64

Tabella 5.5: Risultati finali del test illustrato nel grafico di distribuzione dell’Aspect

Ratio di Figura 5.1. La prima riga della tabella mostra i dati della me-

sh allo stato iniziale, senza che nessuna operazione di taglio sia stata

effettuata. Nella seconda riga invece sono stati effettuati tagli ma non

collassi, mentre la terza riga mostra l’effetto delle stesse modifiche ap-

portate alla mesh con l’utilizzo dei collassi (tolleranza sulla variazione di

volume sui collassi pari a 1/1000 del volume originale) .

Emerge dal grafico che la distribuzione dell’aspect ratio senza l’utilizzo della

decimazione e peggiore di quella ottenuta dalle stesse operazioni di taglio ac-

compagnate dalla decimazione. La distribuzione dell’aspect ratio nel caso del

test effettuato con l’utilizzo della decimazione si avvicina alla distribuzione

dell’aspect ratio della mesh allo stato iniziale.

Nella parte destra del grafico viene riportato il numero dei tetraedri compo-

nenti la mesh dopo le operazioni di taglio. Anche in questo caso la decima-

zione riduce in modo evidente il numero totale dei tetraedri.

Da queste tabelle emerge il vantaggio apportato alla simulazione dalla de-

cimazione in termini di riduzione e miglioramento della qualita dei tetrae-

dri della mesh.Come espresso nella tabella 5.3 il passo di decimazione viene

eseguito ad una velocita media di circa 1msec.

La tabella 5.7 riporta il numero di entita create per ciascun utilizzo del

vertex-split. Questa tabella mostra innanzitutto che all’aumentare della tol-

leranza in pixel viene utilizzato in maniera minore l’edge-split. Anche i col-

lassi aumentano al diminuire della tolleranza in pixel. Infatti piu tetraedri

vengono suddivisi e maggiore sara il numero di edge da collassare nell’heap

5.2 Sviluppi futuri 108

vertex-split edge-split collassi tetraedri vertici pixel

19.3 43 19.3 75 33.6 3

23.3 19.6 10.3 30 46.6 4

Tabella 5.6: Tabella delle entita create e del numero di operazioni coinvolte in una

serie di tagli con differenti approssimazioni.

pixel edge-split collassi tetraedri vertici

2 3.222 2.444 0.666 2.222

3 2.375 1.625 2.125 2

4 2.14 1.45 0.71 0.71

Tabella 5.7: Tabella delle medie di entita create e del numero di operazioni coinvolte

per ogni split effettuato con differenti approssimazioni.

di decimazione.

Da questa tabella possiamo dedurre che ciascuna divisione di un vertice com-

porta un aumento del numero di tetraedri di circa 0.666 nel caso di una tol-

leranza di 2 pixel, di 2.125 nel caso di una tolleranza di 3 pixel e di 0.71 nel

caso di una tolleranza di 4 pixel. Il minore aumento di tetraedri nel caso del

taglio con tolleranza pari a 2 pixel e dovuto all’elevato numero di collassi che

ne consegue.

L’efficienza del metodo di taglio proposto in questa tesi risiede proprio nel

basso numero di entita create durante il taglio: I metodi basati sulla Look-up

Table creano in media un numero di tetraedri per taglio di circa 4.5 [GCMS00]

contro un risultato ottenuto in questa Tesi che varia dagli 0.6 ai 2.2.

5.2 Sviluppi futuri

Come illustrato nei capitoli precedenti il taglio del modello viene guidato

dall’interazione delle forze elastiche interne e da quelle esterne impresse dal

5.2 Sviluppi futuri 109

Figura 5.2: a) Il solido S entra in contatto con la mesh attraverso la superficie C

esercitando un pressione. b) Il bisturi T avendo una superficie di contatto

minore del solido S, pur imprimendo la stessa forza, esercita una pressione

maggiore.

bisturi. Alla base di questa metodologia le operazioni di modifica geometrica

sulla mesh sono create in maniera tale da rappresentare situazioni reali di

modifica della struttura del tessuto.

Questo tipo di rappresentazione oltre a rendere la simulazione del taglio piu

realistica offre una vasta gamma di possibilita di sviluppi futuri. I paragrafi

che seguono illustrano alcuni degli sviluppi futuri basati sulla struttura dati

e sulle operazioni di modifica su di essa definite.

5.2.1 Interazione con un solido

In una operazione chirurgica esistono altri strumenti oltre che al bisturi che

un chirurgo puo utilizzare. Modellando l’interazione di forze tra un solido

qualsiasi e la mesh deformabile avremmo la possibilita di rappresentare nuovi

5.2 Sviluppi futuri 110

Figura 5.3: a) Le forze F0 ed F1 propagano forze di stress di direzione opposta sui

vertici delle due facce evidenziate. b) Tramite vertex-split viene realizzata

la lacerazione.

strumenti utilizzabili dall’utente durante la simulazione.

Come rappresentato in Figura 5.2.a, il solido S modifica la posizione delle

facce con cui entra in contatto, annullando le componenti delle forze interne

che tendono a riportare la faccia in posizione di rilassamento.

La pressione che il solido imprime su una faccia della mesh e il rapporto tra

questa forza e la superficie di contatto tra i due oggetti C. In proporzione alla

pressione esercitata possiamo cosı stabilire quando applicare le operazioni di

modifica. Nel caso di un bisturi che imprime una forza utilizzando la sua

lama, la pressione esercitata sara sicuramente maggiore della stessa forza

impressa dal solido S.

5.2.2 Lacerazioni

Quando due forze di direzione opposta vengono esercitate su un tessuto de-

formabile si potrebbero creare delle lacerazioni.

Generalizzando la definizione della superficie di taglio possiamo essere in

5.2 Sviluppi futuri 111

grado di separare due insiemi qualsiasi di tetraedri adiacenti. La lacerazione

potrebbe avvenire in corrispondenza delle facce i cui vertici sono sottoposti

a due diverse forze esterne di direzione opposta. Su queste facce potrebbe

essere definita una sezione di taglio che porterebbe poi, tramite l’utilizzo del

vertex-split, alla separazione dei vertici (Figura 5.3) .

5.2.3 Self Collision

Il termine self collision indica l’autointersezione della superficie di un ogget-

to. Nel caso in cui un oggetto viene tagliato e probabile che le parti separate,

che si trovano in prossimita, si tocchino. Segue quindi la necessita di intro-

durre tra i lavori futuri lo sviluppo di tecniche per la modellazione della self

collision, che e ancora un problema aperto nella simulazione interattiva di

oggetti deformabili[JTT01].

Inoltre questo problema assume particolare rilievo nel caso in cui si volesse

inserire nel simulazione la possibilita di effettuare operazioni di sutura.

5.2.4 Sutura

Un’altra possibilita importante da introdurre in un simulatore di operazioni

chirurgiche sarebbe quella di poter effettuare suture. La simulazione di una

sutura introduce due problemi:

Rappresentazione dell’ago L’inserimento dell’ago nel tessuto non puo es-

sere modellato attraverso l’interazione di un solido con la mesh te-

traedrale. Il foro provocato della pressione di un ago nel tessuto non

puo essere il risultato degli operatori di modifica della mesh definiti e

comporta quindi un trattamento a parte.

Triangolazione delle regioni di tessuto rimarginate Se volessimo simu-

lare la rimarginazione della ferita suturata il problema maggiore sa-

5.2 Sviluppi futuri 112

Figura 5.4: a) Le due mesh devono essere attaccate. b) Il vero problema consiste nel

ricreare una triangolazione unica della superficie di contatto.

rebbe quello di costruire una triangolazione unica delle due regioni di

superficie esterna che vengono attaccate tra loro (Figura 5.4).

Modellazione dell’ago Seppure la forza di resistenza offerta dal tessuto

alla penetrazione dell’ago risulta minima l’inserimento di una ago nel tessuto

comporta una maggiore resistenza alle forze di movimento dell’ago che non

siano nella direzione del foro provocato (ad esempio forze di torsione). Non

possiamo quindi utilizzare uno degli operatori definiti in quanto portereb-

be alla creazione di una superficie di taglio lungo la quale l’ago potrebbe

muoversi liberamente. Un’idea di possibile implementazione potrebbe essere

quella di inserire un vertice nel punto della faccia esterna toccata dall’ago.

Questa operazione comportera la creazione di nuovi tetraedro ed in partico-

lare di un edge interno incidente sul vertice appena creato. La traiettoria

dell’ago, e quindi del filo della sutura puo essere approssimato con uno degli

edge interni alla mesh che incidono su questo vertice (Figura 5.5) .

5.3 Conclusioni 113

Figura 5.5: a) L’ago preme con una forza F sulla faccia esterna nel punto evidenziato.

b) Una operazione di remeshing locale crea un nuovo vertice sulla faccia

esterna selezionata, l’ago si muovera lungo l’edge appena creato.

5.3 Conclusioni

I risultati ottenuti mostrano che l’approccio proposto in questa tesi, basato

su tecniche di raffinamento e semplificazione implementati in modo interrom-

pibile e guidato dall’errore percepito dall’ utente permettono di conseguire

l’obiettivo che ci eravamo proposti, cioe di simulare in maniera interattica

deformazioni e tagli.

Infatti le operazioni di taglio, accompagnate dalle operazioni di semplifi-

cazione, limitano il fenomeno della frammentazione nel sistema. Per questo

motivo le prestazioni del sistema non vengono di fatto alterate dalle diverse

operazioni di taglio effettuate dall’utente. Uno stesso taglio puo essere ese-

guito secondo piu livelli di approssimazione: un taglio piu accurato genera

piu frammentazione di un taglio eseguito in maniera piu approssimata. Il

livello di accuratezza viene scelto in maniera tale che l’approssimazione non

sia percepita dall’utente.

I ridotti tempi di esecuzione delle operazioni di modifica e di semplificazione

mostrano inoltre l’efficacia di aggiornamento della struttura dati che mantie-

5.3 Conclusioni 114

ne la geometria e la topologia della mesh tetraedrale.

I metodi di taglio e semplificazione sono interrompibili e restituiscono

una struttura dati consistente. L’alta granularita delle operazioni di aggior-

namento permette di ottimizzare la ripartizione del tempo di esecuzione tra

le varie componenti del sistema (raffinamento, semplificazione, simulazione

. . . ).

Le modifiche dell’oggetto dipendono solo dallo stress cui e sottoposto.

Potremmo quindi utilizzare questo modello per implementare l’interazione

con qualsiasi altro tipo di strumento per il quale siamo in grado di modellarne

il contatto fisico con l’oggetto deformabile.

Quanto esposto in questa tesi e stato oggetto di un articolo proposto per

pubblicazione alla conferenza Medical Simulation 2004 [NCFP04].

5.4 Alcune immagini del simulatore 115

5.4 Alcune immagini del simulatore

Figura 5.6: Un esempio di deformazione ottenuta premendo il bisturi di taglio.

5.4 Alcune immagini del simulatore 116

Figura 5.7: Altri esempi di deformazione: A destra le stesse deformazioni sono

rappresentate mettendo in evidenza i tetraedri che compongono la mesh.

5.4 Alcune immagini del simulatore 117

a) d)

b) e)

c) f)

Figura 5.8: Fasi di utilizzo dell’edge-split per remeshing con due differenti tipi di

risoluzione: 3 pixel a sinistra e 4 pixel a destra. a) e d) La deformazione

vista dall’utente. b) e e) Vengono suddivisi gli edges dove lo stress e

maggiore. c) e f) Le operazioni di collasso riducono il numero di tetraedri

della mesh.

5.4 Alcune immagini del simulatore 118

Figura 5.9: La superficie di taglio (costituita dai triangoli con i bordi evidenziati)

suddivide l’insieme dei tetraedri colorati in due sottoinsiemi.

5.4 Alcune immagini del simulatore 119

a)

b)

Figura 5.10: Esempio di taglio con tolleranza di 4 pixel: a) Con una visione della

mesh piu lontana il taglio viene approssimato al vertice piu vicino. b)

Avvicinando l’inquadratura si puo notare l’approssimazione.

5.4 Alcune immagini del simulatore 120

Figura 5.11: Due esempi di taglio:In alto viene asportata una parte della mesh, in

basso viene tagliato un angolo

5.4 Alcune immagini del simulatore 121

Figura 5.12: Un esempio di taglio su una mesh di forma sferica

Elenco delle figure

1.1 Schema generico di un simulatore . . . . . . . . . . . . . . . . 4

2.1 Superficie di taglio . . . . . . . . . . . . . . . . . . . . . . . . 22

2.2 Differenti tecniche di taglio esistenti . . . . . . . . . . . . . . . 23

2.3 Suddivisione di un tetraedro . . . . . . . . . . . . . . . . . . . 26

2.4 Possibili suddivisioni di una faccia . . . . . . . . . . . . . . . . 27

2.5 Esempio di Lookup Table . . . . . . . . . . . . . . . . . . . . 29

3.1 Topologia di un tetraedro . . . . . . . . . . . . . . . . . . . . 34

3.2 Un primo esempio di mesh tetraedrale . . . . . . . . . . . . . 37

3.3 Adiacenza tetraedro-tetraedro . . . . . . . . . . . . . . . . . . 39

3.4 Adiacenza vertice-tetraedro . . . . . . . . . . . . . . . . . . . 41

3.5 Half-edge in una spezzata ed in una mesh di triangoli . . . . . 44

3.6 Half-edge in a mesh tetraedrale . . . . . . . . . . . . . . . . . 45

3.7 Possibili flip su una mesh di tetraedri . . . . . . . . . . . . . . 47

3.8 Operazioni di next su un half-edge . . . . . . . . . . . . . . . 48

3.9 Next edge come composizione di flip . . . . . . . . . . . . . . 49

3.10 problematica dell’approccio con duplicazione di facce . . . . . 51

ELENCO DELLE FIGURE 123

3.11 Operatori di taglio . . . . . . . . . . . . . . . . . . . . . . . . 53

3.12 Problemi sul vertex-split . . . . . . . . . . . . . . . . . . . . . 54

3.13 Esempio di estensione di una sezione di taglio . . . . . . . . . 55

3.14 Dimostrazione del Lemma sulla correttezza della mesh dopo il

taglio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

3.15 Esempio di V Split di una sezione di taglio . . . . . . . . . . . 56

3.16 Condizioni sulla sezione di taglio del vertex-split . . . . . . . . 58

3.17 Condizione di applicabilita del vertex-split . . . . . . . . . . . 59

3.18 Individuazione dei vertici da duplicare del vertex-split . . . . . 60

3.19 Individuazione dei sottoinsiemi Ta e Tb nel esecuzione di un

vertex-split . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

3.20 Passi per l’individuazione dei sottoinsiemi Ta e Tb nel vertex-split 62

3.21 Passi per l’esecuzione dell’edge-split . . . . . . . . . . . . . . . 65

3.22 Suddivisione di un tetraedro lungo un edge . . . . . . . . . . . 66

3.23 Suddivisione di un edge . . . . . . . . . . . . . . . . . . . . . . 67

3.24 Edge-split: Ripristino delle adiacenze faccia tetraedro . . . . . 69

3.25 Semplificazione schema generale . . . . . . . . . . . . . . . . . 72

3.26 Esempio di collasso di edge su una mesh di triangoli . . . . . . 75

3.27 Esempio di Link Conditions . . . . . . . . . . . . . . . . . . . 76

3.28 Esempio di Link Conditions su una mesh tetraedrale . . . . . 77

4.1 Collisione Statica e Collisione Dinamica . . . . . . . . . . . . . 83

4.2 La Camera in OpenGL . . . . . . . . . . . . . . . . . . . . . . 85

4.3 Collision detection con Camera ortogonale . . . . . . . . . . . 87

ELENCO DELLE FIGURE 124

4.4 Esempio di Collision detection con Camera ortogonale . . . . . 88

4.5 Estensione della regione di spazio tra due time step successivi

nella collision detection. . . . . . . . . . . . . . . . . . . . . . 89

4.6 Fasi di raffinamento della collision detection . . . . . . . . . . 90

4.7 Quantificazione della penetrazione all’interno di un tetraedro . 91

4.8 Un esempio di haptic device:Il phantom 1.5/6 DOF . . . . . . 93

4.9 Le fasi della deformazione del Tessuto . . . . . . . . . . . . . . 94

4.10 Approccio della deformazione con molla . . . . . . . . . . . . . 95

4.11 Force Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

4.12 Approccio con spostamento della faccia . . . . . . . . . . . . . 97

4.13 differente utilizzo degli operatori di taglio . . . . . . . . . . . . 99

4.14 Creazione di una superficie di taglio . . . . . . . . . . . . . . . 103

5.1 Distribuzione dell’aspect ratio di una mesh tetraedrale con e

senza collassi dopo operazioni di modifica . . . . . . . . . . . . 106

5.2 Interazione tra un solido e la mesh deformabile . . . . . . . . . 109

5.3 Esempio di lacerazione . . . . . . . . . . . . . . . . . . . . . . 110

5.4 Problema della rimarginazione delle ferite . . . . . . . . . . . . 112

5.5 Esempio di inserimento di un ago . . . . . . . . . . . . . . . . 113

5.6 Esempio di deformazione . . . . . . . . . . . . . . . . . . . . . 115

5.7 Esempi di deformazione . . . . . . . . . . . . . . . . . . . . . 116

5.8 Utilizzo dell’edge-split per remeshing con tolleranza di 3 pixel

e 4 pixel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

5.9 Schematizzazione del vertex-split . . . . . . . . . . . . . . . . 118

ELENCO DELLE FIGURE 125

5.10 Esempio di taglio con tolleranza di 4 pixel . . . . . . . . . . . 119

5.11 Due esempi i taglio . . . . . . . . . . . . . . . . . . . . . . . . 120

5.12 Un esempio di taglio su una mesh di forma sferica . . . . . . . 121

Elenco delle tabelle

3.1 Tabelle corrispondenze entita in un tetraedro . . . . . . . . . . 37

5.1 Tabella dei tempi di esecuzione dell’edge-split . . . . . . . . . 104

5.2 Tabella dei tempi di esecuzione del vertex-split . . . . . . . . . 105

5.3 Tabella dei tempi di decimazione . . . . . . . . . . . . . . . . 105

5.4 Tabella dei tempi di ripristino delle proprieta fisiche della mesh

dopo un collasso . . . . . . . . . . . . . . . . . . . . . . . . . . 106

5.5 Risultati finali di operazioni di modifica con l’utilizzo o meno

dei collassi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

5.6 numero di entita create in alcune operazioni di taglio . . . . . 108

5.7 Tabella delle medie di entita create e del numero di operazioni

coinvolte per ogni split . . . . . . . . . . . . . . . . . . . . . . 108

Bibliografia

[Bar] David Baraff. Implicit method for differential equation.

[BK] Andrew B.Mor and Takeo Kanade. Modifyng soft tissue mo-

dels:progressive cutting with minimal element creation. Techni-

cal report, Center for Medical Robotics and Computer Assisted

Surgery,Carnegie Mellon University Pittsbourgh.

[BMG99] D. Bielser, V.A. Maiwald, and M.H. Gross. Interactive cuts

through 3-dimensional soft tissue. Computer Graphics Forum

(Eurographics’99 Proc.), 18(3):C31–C38, September 1999.

[CA99] H. Delingette S. Cotin and N. Ayache. A hybrid elastic model

allowing real-time cutting, deformations and force-feedback for

surgery training and simulation. In CAS99 Proceedings, pages

70–81, May 1999.

[CCM+00] P. Cignoni, D. Costanza, C. Montani, C. Rocchini, and R. Sco-

pigno. Simplification of tetrahedral volume with accurate error

evaluation. Technical Report B4-05, I.E.I. – C.N.R., Pisa, Italy,

March 2000.

[DEGN99] T.K. Dey, H. Edelsbrunner, S. Guha, and D.V. Nekhayev.

Topology preserving edge contraction. Technical Report

RGI-Tech-99, RainDrop Geomagic Inc. Champaign IL., 1999.

BIBLIOGRAFIA 128

[FDA02] C. Forest, H. Delingette, and N. Ayache. Cutting simulation of

manifold volumetric meshes, 2002.

[GCMS00] Fabio Ganovelli, Paolo Cignoni, Claudio Montani, and Roberto

Scopigno. A multiresolution model for soft objects supporting

interactive cuts and lacerations. Computer Graphics Forum,

19(3):??–??, 2000.

[GO01] F. Ganovelli and C. O’Sullivan. Animating cuts with on-the-

fly re-meshing. EuroGraphics Short Presentations, 2001. (J. C.

Roberts, editor), 2001.

[JTT01] P. Jimnez, F. Thomas, and C. Torras. 3D Collision Detection:

A Survey. Computers and Graphics, 25(2):269–285, April 2001.

[LCN99] Jean-Christophe Lombardo, Marie-Paule Cani, and Fabrice

Neyret. Real-time collision detection for virtual surgery. In

CA, pages 82–, 1999.

[MLBdC01] C. Mendoza, C. Laugier, and F. Boux-de Casson. Virtual rea-

lity cutting phenomena using force feedback for surgery simula-

tions. In Interactive Medical Image Visualization and Analisys,

MICCAI, Holland, 2001.

[NCFP04] N.Pietroni, C.Mendoza, F.Ganovelli, and P.Cignoni. A robust

adaptive local remesher (alr) for cutting deformable objects ba-

sed on tetrahedral meshes. Medical Simulation 2004 (submitted),

2004.

[Nie03] H.W. Nienhuys. Cutting in Deformable Objects. Ph.d. thesis,

Utrecht University, 2003.

BIBLIOGRAFIA 129

[SC98] Nicholas Ayache Stephane Cotin, Herve Delingette. Efficient

linear elastic models of soft tissues for real-time surgery si-

mulation. Technical report, Institut National de Recherche en

Informoatique et en Automatique, 1998.

[TG85] S.P. Timoshenko and J.N. Goodier. Theory of elasticity.

McGRAW-HILL International Editions, 1985.

[Wita] Andrew Witkin. Particle system dynamics.

[Witb] David Baraff Andrew Witkin. Differential equation basics.

[Zie67] O. C. Zienkiewicz. The Finite Element Method in Structural

and Continuum Mechanics. McGraw-Hill, 1967.