diseño y modificacion de molde inverso para

Anuncio
PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE
ESCUELA DE INGENIERIA
DISEÑO Y MODIFICACION DE MOLDE
INVERSO PARA PROTESIS MEDIANTE
HERRAMIENTAS COMPUTACIONALES
MARÍA CONSUELO DÍAZ WICHMANN
Tesis para optar al grado de
Magíster en Ciencias de la Ingeniería
Profesor Supervisor:
LUCIANO CHIANG SÁNCHEZ
Santiago de Chile, (Agosto, 2008)
© 2008, María Consuelo Díaz Wichmann
PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE
ESCUELA DE INGENIERIA
DISEÑO Y MODIFICACION DE MOLDE
INVERSO PARA PROTESIS MEDIANTE
HERRAMIENTAS COMPUTACIONALES
MARÍA CONSUELO DÍAZ WICHMANN
Tesis presentada a la Comisión integrada por los profesores:
LUCIANO CHIANG SÁNCHEZ
DIEGO CELENTANO
LUIS CERDA ORTIZ
PABLO IRARRAZAVAL
Para completar las exigencias del grado de
Magíster en Ciencias de la Ingeniería
Santiago de Chile, (Agosto, 2008)
A mis Padres
ii
AGRADECIMIENTOS
Agradezco a los protesistas del taller de prótesis y ortesis de la Teletón quienes estuvieron
siempre dispuestos a ayudarnos y resolver nuestras dudas sobre la fabricación de prótesis.
También agradezco el apoyo constante de mi profesor guía Luciano Chiang durante el
desarrollo de este trabajo. Por último, quisiera agradecer a mis amigos y compañeros de
Magíster por la ayuda y compañía durante este proceso.
iii
INDICE GENERAL
Pág.
DEDICATORIA........................................................................................................... ii
AGRADECIMIENTOS .............................................................................................. iii RESUMEN .................................................................................................................. ix ABSTRACT ................................................................................................................. x 1. INTRODUCCION .............................................................................................. 1 2. MARCO CONTEXTUAL .................................................................................. 4 2.1. Adquisición de Datos ................................................................................. 4 2.2. Marco teórico y arte previo ........................................................................ 7 2.3. Análisis de la solución propuesta ............................................................... 8 3. DESARROLLO DEL ALGORITMO .............................................................. 10 3.1. Etapa 1: Posicionamiento superficie secundaria ...................................... 12 3.1.1. Cálculo de normales....................................................................... 14 3.1.2. Posicionamiento Inicial.................................................................. 16 3.1.3. Rotación Tangencial ...................................................................... 19 3.1.4. Desplazamiento según la normal ................................................... 22 3.2. Etapa 2: Desplazamiento de puntos internos............................................ 24 3.2.1. Curva de intersección..................................................................... 25 3.2.2. Puntos internos ............................................................................... 35 3.2.3. Desplazamiento puntos internos .................................................... 37 3.3. Etapa 3: Suavización de bordes ................................................................ 39 3.3.1. Superficies de Bezier ..................................................................... 41 3.3.2. Generación de mallas ..................................................................... 43 3.3.3. Desplazamiento de puntos de borde .............................................. 53 4. PROGRAMACION E INTERACCION CON EL USUARIO ........................ 58 5. RESULTADOS ................................................................................................ 62 6. CONCLUSIONES ............................................................................................ 72 iv
7. GLOSARIO ...................................................................................................... 75 8. BIBLIOGRAFIA .............................................................................................. 78 9. ANEXOS .......................................................................................................... 80 Anexo A. Superficies Geométricas Definidas ............................................. 80 Anexo B. Cálculo matrices M1 y M2 ........................................................... 81 Anexo C. Código programación función main ................................................. 89 v
INDICE DE FIGURAS
Pág.
Figura 1-1: Fabricación tradicional de molde inverso de socket .......................................... 3 Figura 2-1: Scanner Fastscan. Izquierda: Scanner modelo Fastscan Cobra. Derecha:
superficie computacional 3D y triangulación de Delaunay .......................................... 4 Figura 2-2: Diagrama matrices Points (P) y Facets(F) ......................................................... 5 Figura 2-3: Representación gráfica de la nube de puntos y de los puntos Stylus en Matlab 6 Figura 2-4: Esquema 2D solución propuesta. Izquierda: superficie original. Derecha:
superficie deformada ..................................................................................................... 8 Figura 2-5: Etapas de deformación ....................................................................................... 9 Figura 3-1: Punto Stylus seleccionado como punto de referencia del muñón .................... 11 Figura 3-2: Punto de referencia pP, de la herramienta Stylus y punto de referencia rP
perteneciente a la matriz P .......................................................................................... 11 Figura 3-3: Puntos pertenecientes al vector triangulación de p, ∆p, ................................... 12 Figura 3-4: Matriz P y vector triangulación ∆p .................................................................. 12 Figura 3-5: Esquema etapa 1: Posicionamiento de la superficie secundaria....................... 13 Figura 3-6: Algoritmo de Gourand...................................................................................... 15 Figura 3-7: Punto de referencia rP y los puntos rPi pertenecientes a su triangulación ........ 15 Figura 3-8: Ángulos de azimuth (θ) y elevación (γ) para un vector cualquiera r. .............. 17 Figura 3-9: Izquierda: Posición inicial superficie Q. Derecha: Posición superficie Q luego
de la primera rotación y traslación .............................................................................. 18 Figura 3-10: Izquierda: Posición de presión o carga superficie Q. Derecha: Posición de
descarga superficie Q .................................................................................................. 19 Figura 3-11: Posicionamiento inicial de un toroide sobre el punto de referencia rP........... 20 Figura 3-12: Posicionamiento superficie Q, luego de rotación tangencial y traslado al punto
de referencia pP. Izquierda: Punto de observación lateral. Derecha: Punto de
observación en dirección normal................................................................................. 22 Figura 3-13: Desplazamiento en dirección normal de un paraboloide sobre el muñón
(dn=7mm) .................................................................................................................... 23 Figura 3-14: Desplazamiento en dirección normal de un toroide sobre el muñón (dn =5mm)
..................................................................................................................................... 23 Figura 3-15: Esquema etapa 2 de deformación: Desplazamiento punto internos ............... 24 Figura 3-16: pin está “lo suficientemente cerca de CI” si al menos un punto perteneciente a
su triangulación se encuentra fuera de la superficie Q ................................................ 25 Figura 3-17: Punto 1 trayectoria rP – pin ............................................................................. 28 Figura 3-18: Punto 2 trayectoria rP – pin ............................................................................. 29 Figura 3-19: Punto 3 trayectoria rP – pin ............................................................................. 29 Figura 3-20: Corrección de trayectoria rP – pin ................................................................... 31 Figura 3-21: Izquierda: ejemplo punto c1 y los puntos c1j correspondientes a su
triangulación. Derecha: punto c2 y puntos c2j.............................................................. 32 Figura 3-22: Ejemplo de distribución de puntos Cin. .......................................................... 33 Figura 3-23: Puntos internos superficie P. .......................................................................... 33 Figura 3-24: Curva de intersección Cin aproximada entre las superficies P y Q ................ 34 Figura 3-25: Trayectoria rP – pin y vector Cin ..................................................................... 34 vi
Figura 3-26: Puntos internos superficie P. Niveles 1 y 2 .................................................... 36 Figura 3-27: Puntos internos superficie P. Izquierda: niveles 1, 2 y 3. Derecha: niveles 1-5
..................................................................................................................................... 37 Figura 3-28: Esquema matriz P, reemplazo punto pi por punto pI. ..................................... 39 Figura 3-29: Esquema etapa 3 de deformación: Suavización de la región de borde .......... 39 Figura 3-30: Región de borde (RB) definida por los vectores Ck ....................................... 41 Figura 3-31: Superficie de Bezier ....................................................................................... 42 Figura 3-32: Mallas de 4x4 sobre la Región de Borde (RB)............................................... 43 Figura 3-33: Región de Intersección, Detalles A, B y C ..................................................... 44 Figura 3-34: RB, detalle A. Ordenamiento primeros 3 puntos del vector C1. .................... 45 Figura 3-35: RB, detalle A. Ordenamiento vector C2, selección del primer punto ............. 46 Figura 3-36: RB, Sección B, Problema 1 ............................................................................ 48 Figura 3-37: Posibles caminos para ordenar C6 en el ejemplo de la Figura 3-32 ............... 49 Figura 3-38: RB, detalle C. Problema 2 .............................................................................. 50 Figura 3-39: Vecindad o triangulación de p extendida. ...................................................... 50 Figura 3-40: Generación de mallas de Bezier ..................................................................... 52 Figura 3-41: Malla y superficie de Bezier........................................................................... 53 Figura 3-42: Desplazamiento de puntos pertenecientes a RI hacia la superficie de Bezier 55 Figura 3-43: Región de intersección y mallas. Arriba: mallas generadas antes del
desplazamiento de puntos. Abajo: mallas generadas luego del desplazamiento de
puntos .......................................................................................................................... 55 Figura 3-44: Intersección de paraboloide sobre Superficie P o muñón. Arriba: Antes de
suavización de bordes. Abajo: Después de suavización de bordes ............................. 56 Figura 3-45: Intersección de paraboloide sobre Superficie P o muñón. Arriba: Antes de
suavización de bordes. Abajo: Después de suavización de bordes ............................. 57 Figura 4-1: Diagrama de flujo principal del software y los puntos de interacción con el
usuario ......................................................................................................................... 59 Figura 4-2: Elección punto Stylus o punto de referencia .................................................... 60 Figura 4-3: Menú superficie secundarias ............................................................................ 60 Figura 4-4: Ingreso de parámetros de un toroide ................................................................ 61 Figura 4-5: Ingreso de la Magnitud de desplazamiento ...................................................... 61 Figura 5-1: Modificación de descarga con forma de paraboloide sobre superficie
digitalizada .................................................................................................................. 62 Figura 5-2: Modificación de carga con forma de esfera sobre superficie digitalizada ....... 63 Figura 5-3: Modificación de descarga con forma de elipsoide sobre superficie digitalizada
..................................................................................................................................... 64 Figura 5-4: Digitalización muñón y molde inverso tradicional, visualización software
Fastscan ....................................................................................................................... 65 Figura 5-5: Digitalización muñón y molde inverso tradicional, visualización software
Matlab.......................................................................................................................... 66 Figura 5-6: Modificaciones de carga y descarga sobre molde inverso tradicional ............. 67 Figura 5-7: Parámetros geométricos del toroide ................................................................. 68 Figura 5-8: Etapa de posicionamiento de superficie y rotación tangencial. Parámetros: α =
75° ............................................................................................................................... 68 Figura 5-9: Etapa de desplazamiento en dirección normal. Parámetros: dn = 8mm ........... 68 vii
Figura 5-10: Proceso de carga sobre rótula. Arriba: superficie original. Centro:
posicionamiento superficie geométrica. Abajo: superficie modificada ...................... 69 Figura 5-11: Parámetros geométricos del paraboloide ingresados por el usuario............... 70 Figura 5-12: Etapa de posicionamiento de superficie y rotación tangencial. Parámetros: α =
45° ............................................................................................................................... 70 Figura 5-13: Etapa de desplazamiento en dirección normal. Parámetros: dn = 17mm ....... 71 Figura 5-14: Proceso de descarga zonas óseas. Arriba: superficie original. Centro:
posicionamiento superficie geométrica. Abajo: superficie modificada ...................... 71 Figura 9-1: Vectores n1 y n2 y sus respectivos ángulos de azimuth (θ) y elevación (γ) ...... 81 Figura 9-2: Rotación de n2 en torno al eje Z ....................................................................... 82 Figura 9-3: Cambio sistema de referencia auxiliar ............................................................. 83 Figura 9-4: Rotación de 1n1 en torno a 1Y ........................................................................... 83 Figura 9-5: Cambio a sistema de referencia absoluto ......................................................... 84 viii
RESUMEN
Hoy en día, la fabricación de órtesis y prótesis (O&P) se realiza de forma manual,
moldeando el muñón con el yeso para crear un molde positivo de éste, el que luego se
modifica manualmente para crear el molde inverso del socket. En países más desarrollados,
son utilizados software CAD (Computer Aided Design) que permiten realizar el diseño de
este molde inverso mediante herramientas computacionales. El uso de software de CAD
para el diseño de socket de O&P permite por un lado reducir los tiempos de toma de molde
y de diseño, además de ahorrar material y una alta capacidad de almacenamiento de datos.
Sin embargo, una de las desventajas es que el proceso se ve despersonalizado al trabajar
con librerías de moldes predefinidas previamente los que son ajustados a las dimensiones
del paciente. El objetivo de este trabajo fue crear un algoritmo que permitiera modificar el
molde digitalizado del paciente en cualquier punto y con la forma que el usuario escoja
entregando una mayor libertad en el diseño del socket. Este trabajo se enfocó en las
modificaciones de carga y descarga sobre el muñón. Usando distintas superficies
geométricas, las que son determinadas por el usuario, se modifica el molde digital en la
región deseada. Para esto, se posiciona la superficie geométrica y los puntos que quedan
dentro de la curva generada por la intersección entre ambas superficies se desplazan hacia
la superficie geométrica generando así la deformación. Por último se suavizan los borden
para eliminar aristas pronunciadas. Mediante este método se lograron realizar
modificaciones en varios puntos de la superficie digitalizada con la limitación de que al
intersectar las superficies debe generarse una curva cerrada. En cuanto a la aplicación se
logró el objetivo de entregar libertad al usuario de realizar modificaciones en cualquier
punto deseado. La utilidad que estas modificaciones puedan prestar al diseño final sólo
podrá evaluarse a través del uso del socket por parte de un paciente.
ix
ABSTRACT
Today, the manufacture of prosthetic and orthotic (P & O) is done by hand, shaping the
stump with plaster to create a positive mold of it, which is manually modify to create the
inverse mold of the socket. In developed countries is used CAD software (Computer Aided
Design) allowing the design of this inverse mold by computational tools. The use of CAD
software for the design of socket of P & O allows, on one hand, reduce the times of moldmaking and design, in addition to saving material and high-capacity data storage.
However, one disadvantage is that the process looks impersonalized to work with libraries
mold previously presets that are adjusted to the dimensions of the patient. The objective of
this work was to create an algorithm that would allows changing the scanned mold of the
patient at any point and with the shape that the user chooses to give greater freedom in
designing the socket. This study focused on the changes of installation and removal on the
stump. Using different geometric surfaces, which are determined by the user, is modify the
mold in the digital desired area. For this purpose, is positioned geometric surface and
points inside of the generated curve by the intersection between both surfaces are moving
toward the geometric surface, thus generating the deflection. Finally, it softened the edges
to eliminate sharp edges. By this method is able to make modifications at various points of
the scanned area, with the limitation that when the surfaces intersect must generate a
closed curve. With regard to the application, was able to deliver freedom to make changes
to the user at any desired point. The utility that these changes could give to the final design
will only be assessed through the use of the socket by a patient.
x
1. INTRODUCCION
A mediados de la década de los ’80, gracias al rápido avance y la drástica reducción
de costos de la tecnología en microchips, el diseño asistido por computador para el diseño
de órtesis y prótesis (O&P), se convirtió en una posibilidad real en la práctica de este
ejercicio (Michael, 1989; Lemaire et al., 1999; Rogers et al., 2007). La fabricación
tradicional de O&P es realizada a partir de un molde de yeso del muñón o extremidad a
corregir del paciente. Este molde luego es modificado mediante la adición de material en
zonas delicadas o la remoción de yeso en zonas de ajuste, para posteriormente ser utilizado
para modelar el material plástico que conformará el socket de la O&P definitiva (Cheng et
al., 1998). Este molde de yeso corresponde al molde inverso del socket de la prótesis, el
que constituye la parte más importante en la fabricación de una prótesis, ya que es la
interfase entre el usuario y su nueva extremidad (Isozaki et al., 2006; Lee et al., 2004). La
técnica tradicional permite obtener un socket exclusivo y personalizado para cada paciente,
sin embargo, el resultado dependerá principalmente de la experiencia del ortesista o
protesista que tome el molde y luego lo modifique (Isozaki et al., 2006; Walsh et al.,
1989).
Es sabido, que el uso de CAD/CAM (Computer Aided Design / Computer Aided
Manufacturing) ha resultado en una fuerte disminución de los costos de fabricación y
tiempos de desarrollo en la fabricación de automóviles y otros productos de consumo
desde la integración de estas tecnologías en sus procesos productivos. El diseño de O&P
también se beneficia de esta tecnología reduciendo los costos y tiempos de fabricación, así
como en una mejora en la prestación del servicio a los pacientes (Cheng et al., 1998;
Lemaire et al., 1999). Esta tecnología digital permite además mantener almacenada la
información, tanto de la superficie digitalizada, como del proceso completo de
modificación (Oberg et al., 1989). A pesar de estas ventajas, esta tecnología no se ha
masificado en países en desarrollo, donde este procedimiento continúa haciéndose de
forma tradicional.
1
La fabricación tradicional de socket de prótesis se hace mediante la obtención de un
molde negativo con yeso, el que luego es nuevamente rellenado de este mismo material y
se obtiene la réplica positiva del muñón el que es modificado manualmente para obtener el
molde inverso del socket de prótesis. La Figura 1-1 muestra la etapa de modificación
manual del molde de yeso del muñón.
Dada la exclusividad del socket fabricado de forma tradicional es que la integración
del CAD en sus primeros años fue rechazada por sus fabricantes (Michael, 1989; Steele,
1994), sin embargo hoy en día los software CAD son mayormente aceptados y utilizados
dadas las ventajas que el diseño asistido por computador tiene.
Actualmente existe una variedad de software que permiten el diseño de órtesis y
prótesis (McGarry y McHugh, 2007). A pesar de la importancia que tiene el socket en la
prótesis final, los software comerciales, aceptados ampliamente, trabajan en base a un
molde de socket prediseñado, el que es modificado por el protesísta para acercarse a la
imagen digital del muñón o a medidas estándar del mismo (Oberg et al., 1989; Isozaki et
al., 2006; Arbogast et al., 2007).
Con un enfoque completamente distinto a los utilizados actualmente, el objetivo de
este trabajo será generar modificaciones directamente sobre la imagen digitalizada del
muñón, sin usar moldes previamente definidos. Este trabajo se acotará a las modificaciones
correspondientes a “cargas” y “descargas” sobre el muñón. Las primeras se ven reflejadas
en el socket en los puntos donde debe ajustarse éste al muñón, mientras que las
“descargas” liberan al muñón del contacto con el socket, principalmente en zonas óseas y
dérmicas más delicadas.
2
Fuente: Taller de Ortesis y Prótesis , Teletón
Figura 1-1: Fabricación tradicional de molde inverso de socket
3
2. MARCO CONTEXTUAL
2.1.
Adquisición de Datos
Para obtener la imagen digital del paciente, se empleó el scanner modelo Fastscan
Cobra de la empresa Polhemus. Se escogió este modelo debido a la facilidad y rapidez del
proceso de escaneado; a una alta resolución en la imagen digital; y por ofrecer la
posibilidad de marcar y digitalizar puntos y líneas sobre la superficie escaneada.
Fuente: www.fastscan3d.com
Figura 2-1: Scanner Fastscan. Izquierda: Scanner modelo Fastscan Cobra. Derecha:
superficie computacional 3D y triangulación de Delaunay
Más específicamente, este scanner consta de una “pistola” que emite un haz láser
en forma de línea. Con esta “pistola” se va barriendo la superficie, y el resultado al final es
un conjunto de barridos que forman la superficie. El software que viene incluido con el
scanner visualiza la superficie como un sólido, pero efectivamente, la superficie es un
conjunto de puntos con una triangulación Delaunay. Esta triangulación consiste en una red
de triángulos, cuyos vértices son los puntos mencionados anteriormente y que cumplen con
la condición de Delaunay. Esta dice que, la esfera circunscrita de cada triángulo de la red
no debe contener ningún vértice de otro triángulo (Elman y Zachman, 2006).
4
Estos dos datos, el conjunto de puntos y los vértices de cada triángulo, son los que
pueden utilizarse fuera del software Fastscan y son exportados como dos matrices. Points
(P), matriz de 3×NP, donde NP corresponde al número total de puntos y cada columna
contiene las coordenadas cartesianas de cada uno. Y Facets (F), matriz de 3×NF, con NF el
número total de triángulos de la red. Cada columna corresponde a un triangulo y las filas
corresponden a los puntos que los forman. La matriz Facets es un puntero hacia la matriz
Points, es decir cada celda(i,j) perteneciente a esta matriz indica una columna de Points.
Por ejemplo, en la Figura 2-2, los puntos pi , p j y p k conforman el triángulo m de la
matriz Facets. Matemáticamente:
F (1, m ) = i
F (2, m ) = j
F (3, m ) = k
⎡ p1x L pix L p xj L p kx L p Nx P ⎤
⎢
⎥
P = ⎢ p1y L p iy L p yj L p ky L p Ny P ⎥
⎢ p1z L p iz L p zj L p kz L p Nz ⎥
P ⎦
⎣
⎡ f11 L f1m L f1 N F ⎤
⎢
⎥
F = ⎢ f 21 L f 2 m L f 2 N F ⎥
⎢ f 31 L f 3m L f 3 N ⎥
F ⎦
⎣
triángulo m
Figura 2-2: Diagrama matrices Points (P) y Facets(F)
Es importante mencionar, que en el proceso de fabricación del molde para el socket
de una prótesis, los protesistas marcan sobre el muñón del paciente ciertos puntos de
5
referencia con un lápiz especial que traspasa aquellas marcas a la copia positiva de yeso
del muñón sobre la cual se trabaja después. El objetivo de estas marcas, es darle al
protesista una referencia precisa donde debe hacer las modificaciones, las que
normalmente corresponden a liberaciones de carga en sectores óseos o presiones sobre
sectores mas blandos. Estos puntos son generalmente detectados manualmente por el
protesista y con la ayuda del paciente antes de comenzar con la toma de molde. Es por esta
razón que se escogió un escáner láser que de forma sencilla también permitiera realizar
estas marcas y quedarán impregnadas en la versión digital del muñón. La herramienta
Stylus del scanner Fastscan permite marcar puntos y líneas, los que son almacenados en un
archivo de texto.
En este desarrollo utilizaremos ambas matrices Points y Facets y marcas de puntos
obtenidos mediante la herramienta Stylus. La Figura 2-3 muestra la gráfica de la matriz
Points, para el muñón de un paciente y algunos puntos Stylus marcados durante la
digitalización. Estos datos serán los utilizados durante el desarrollo de este trabajo.
Puntos Stylus
Figura 2-3: Representación gráfica de la nube de puntos y de los puntos Stylus en Matlab
6
2.2.
Marco teórico y arte previo
El marco teórico de este trabajo puede dividirse en dos temas distintos. Primero se
tiene la aplicación que se desea lograr, el diseño de socket de prótesis asistido por
computadora y en segundo lugar se tiene el desarrollo computacional de esta aplicación,
específicamente en lo que se refiere a modificación e intersección de superficies definidas
por nubes de puntos.
En cuanto al primer tema, ya se mencionaba en la introducción un poco de la
historia de la inserción del CAD en el diseño de socket de prótesis y órtesis. Hoy en día
existen tres principales empresas en EEUU que desarrollan este tipo de tecnología en la
fabricación de prótesis y órtesis, Seattle Limb System, Ohio Willow Wood Company y
Biosculptor. Si bien las tres difieren en el proceso de digitalización de la imagen y el
material de fabricación final, coinciden en la forma básica de modificación del molde. Las
tres empresas utilizan librerías de socket estándar los que son modificados en sus
longitudes, diámetros y aplicación de cargas y descargas en base al molde digitalizado
(Labayru, 2007).
Con respecto al segundo punto, la definición de superficies a través de nubes de
puntos, ha tomado gran importancia dado el crecimiento de las tecnologías en escaneado
en 3D (Klein y Zachmann, 2005, Carr et al., 2001; Goldstein y Fleisig, 2006). Una de las
principales aplicaciones de esta tecnología es la Ingeniería Inversa. Esta última requiere la
información geométrica proveniente de un objeto físico para luego ser procesada a un
formato computacional para utilizarse en los procesos que prosiguen (Adamson y Alexa,
2003, Chui et al., 2007). Existen dos principales técnicas para la procesar la información
obtenida de un escaneado 3D: (a) reconstrucción de superficies mediante funciones
implícitas, como funciones paramétricas o (b) modelación de superficies mediante mallas
poliédricas (Sun et al., 2001). La reconstrucción de superficies a través de funciones
implícitas está acotada para casos simples y especiales (Hoppe et al., 1992). Por otra parte
las mallas presentan une mejor definición de superficie ya que conecta todos los puntos,
siempre y cuando la densidad de la nube de puntos sea la suficiente para no dejar hoyos en
7
la malla (Yu, 1999). Las superficies o mallas de Delaunay corresponde a este último tipo
de representación de superficies, por lo tanto la información con la que se cuenta son las
coordenadas de los puntos y la conectividad que hay entre ellos.}
2.3.
Análisis de la solución propuesta
Se tiene una imagen de la superficie en R3 del muñón y hay que deformarla
mediante herramientas computacionales, de modo de replicar el trabajo en yeso que hace el
protesísta. Mediante observación se llegó a la conclusión que muchos de los cambios
(cargas y descargas) que se hacen sobre el molde de yeso podrían replicarse intersectando
superficies (de tamaños y formas a definir por el usuario) sobre la superficie original. Las
figuras a continuación muestran el problema equivalente en 2D, con una curva definida por
un conjunto de puntos (muñón digitalizado) y una curva secundaria (definida
geométricamente) que da la forma de la deformación final.
Figura 2-4: Esquema 2D solución propuesta. Izquierda: superficie original. Derecha:
superficie deformada
La deformación se realiza en 3 etapas, primero hay que posicionar la superficie
secundaria sobre la original, luego hay que desplazar los puntos que se encuentran dentro
de la superficie hacia ésta y, por último, suavizar los bordes de la región intersectada. De
esta forma se logran deformaciones suaves, tanto las que son hacia adentro como las que
son hacia fuera de la superficie original.
8
Figura 2-5: Etapas de deformación
9
3.
DESARROLLO DEL ALGORITMO
La deformación de la superficie consta de tres etapas, el posicionamiento de la
superficie secundaria, el desplazamiento de los puntos internos y la suavización de las
regiones de intersección. Antes de continuar es importante mencionar algunas definiciones
desarrolladas para el algoritmo a continuación. De aquí en adelante la superficie
digitalizada o muñón corresponderá a la superficie P y la superficie secundaria o
geométrica corresponderá a la superficie Q.
Puntos de referencia
El punto de referencia de la superficie P, p P , corresponde al punto, definido por el
protesista (mediante la herramienta Stylus), donde se desea hacer la modificación. Como
éste no pertenece a la superficie P y por lo tanto, no esta relacionado con el resto de los
puntos pertenecientes a esta superficie mediante una triangulación, debemos encontrar un
punto perteneciente a P lo más cercano posible a p P . Este punto será aquel cuya distancia
euclidiana con el punto p P es la menor. A este punto lo llamaremos rP . Usando como
ejemplo el muñón de la Figura 2-3, se escoge el punto cercano a la rótula como punto de
referencia p P , ver Figura 3-1. Si esta figura se aumenta lo suficiente, es posible observar
el punto pP , punto Stylus de referencia y el punto más cercano rP (ver Figura 3-2).
El punto de referencia de la superficie Q es un punto definido dentro del software
que sirve de referencia al momento de posicionar la superficie secundaria sobre la
superficie del muñón o superficie P.
10
Punto de
referencia Stylus,
pP
Figura 3-1: Punto Stylus seleccionado como punto de referencia del muñón
pP
rP
Figura 3-2: Punto de referencia pP, de la herramienta Stylus y punto de referencia rP
perteneciente a la matriz P
Vector triangulación un punto p
Se define como vector de triangulación de p ( ∆p ), aquel vector que contiene los
puntos que forman los triángulos que comparten el mismo vértice p, menos éste último. El
tamaño de ∆p ( 1 × N ∆p ), dependerá exclusivamente de la matriz FP y de cómo el software
Fastscan realizó la triangulación.
11
p2
p3
p1
p
p N ∆p
Figura 3-3: Puntos pertenecientes al vector triangulación de p, ∆p,
A modo de recordatorio, la matriz FP es un puntero hacia las columnas de la matriz
P, y por lo tanto, ∆p también lo será, ver Figura 3-4.
⎡ p1x L pix L p xj L p kx L plx L p Nx P ⎤
⎢
⎥
P = ⎢ p1y L piy L p yj L p ky L ply L p Ny P ⎥
⎢ p1z L piz L p zj L p kz L plz L p Nz ⎥
P ⎦
⎣
⎡ p1 ⎤
⎢ p ⎥
⎢ 2 ⎥
∆p = ⎢ p 3 ⎥
⎢
⎥
⎢ M ⎥
⎢ pN ⎥
⎣ ∆p ⎦
Figura 3-4: Matriz P y vector triangulación ∆p
3.1.
Etapa 1: Posicionamiento superficie secundaria
La deformación de la superficie P dependerá exclusivamente de la posición que
tome la superficie Q, ya que el objetivo es que la región de P contenida dentro de la curva
de intersección, formada por la superficie P y Q, tome la forma de la superficie Q y así
generar la deformación.
12
Superficie
secundaria
Superficie
digitalizada
Figura 3-5: Esquema etapa 1: Posicionamiento de la superficie secundaria
Este posicionamiento no es tan trivial como podría suponerse ya que implica ciertos
cálculos que dependen de la forma de la superficie P y del punto de referencia p P donde
se trabaja, además requiere de la participación del usuario.
Primero, debe definirse, cuál será la superficie Q que se utilizará. Nuevamente, de
la observación, se definió un conjunto de superficies definidas matemáticamente (es decir,
su función implícita f Q ( x, y, z ) = 0 es conocida). Estas son, una esfera, un elipsoide, un
paraboloide, un paraboloide elíptico y un toroide. Las dimensiones de todas estas deben ser
definidas por el usuario y cada una cuenta con un punto de referencia para usar.
Inicialmente, estas superficies se encuentran centradas en el origen, y sus ejes principales
coinciden con los ejes coordenados X, Y y Z.
Para facilitar el trabajo del usuario, se impusieron ciertas condiciones que debe
cumplir la superficie Q, para quedar posicionada sobre la superficie P.
•
El punto rQ (punto de referencia de la superficie Q), debe coincidir con el
punto rP (punto de referencia de la superficie P).
•
La normal de la superficie Q, nQ , en el punto rQ , debe ser igual a la normal de
la superficie P, n P , en el punto rP .
13
3.1.1.
Cálculo de normales
Conociendo la función implícita de cualquier superficie S, es posible encontrar la
normal mediante el cálculo del gradiente de la función, en un punto s ∈ ℜ 3 cualquiera.
⎛ ∂f (s ) ∂f (s ) ∂f (s ) ⎞
r
n S (s ) = ∇ f S (s ) = ⎜ S , S , S ⎟
⎜ ∂p
∂p y
∂p z ⎟⎠
x
⎝
La normal de la superficie Q se puede calcular usando este método, ya que la
función de ésta, f Q , es conocida.
Para una superficie S definida por polígonos, cuya función implícita es
desconocida, es posible calcular la normal en un punto s cualquiera de forma aproximada
usando el algoritmo de Gourand (Chui et al., 2007). En cada vértice, es posible obtener la
normal promediando las normales de los polígonos que comparten dicho vértice. Por lo
tanto, para encontrar la normal en el punto s se tiene que:
ns
∑
=
m
j =1
nj
m
donde m es el número de polígonos que comparten el vértice s, y n j corresponde a la
normal del polígono j que comparte el vértice s (ver Figura 3-6).
14
n2
n1
n3
ns
s
n5
n4
Figura 3-6: Algoritmo de Gourand
Como la superficie P está definida por una nube de puntos dada por la matriz P, y
una triangulación dada por la matriz FP , se calculará la normal con este algoritmo. A partir
de la matriz FP es posible encontrar los puntos que pertenecen al vector de triangulación
de rP ,
∆rP = {rP1 , rP 2 , K, rP 6 }
rP1
rP 6
pP
rP 5
rP 2
rP
rP 3
rP 4
Figura 3-7: Punto de referencia rP y los puntos rPi pertenecientes a su triangulación
15
Luego, para encontrar la normal de cada polígono de se tiene que:
ƒ
Para el triángulo 1, formado por los puntos rP , rP1 y rP 2 se calcula
n1 = (rP1 − rP )× (rP 2 − rP )
ƒ
Para el triángulo 2, formado por los puntos rP , rP 2 y rP 3 se calcula
n2 = (rP 2 − rP ) × (rP 3 − rP )
ƒ
El cálculo se repite para el resto de los triángulos.
ƒ
∑
=
Por último se tiene n P
6
i =1
ni
6
Resumiendo,
9 La normal nQ en el punto de referencia rQ de la superficie secundaria o superficie Q,
se calcula a partir del gradiente de la función que representa a esta superficie, la cual es
conocida.
9 La normal n P en el punto de referencia rP de la superficie escaneada o superficie P, se
calcula mediante el algoritmo de Gourand.
3.1.2.
Posicionamiento Inicial
Inicialmente, la superficie Q se posicionará automáticamente, cumpliendo con las
dos condiciones iniciales (punto de referencia, rQ , y normal, nQ , de la superficie Q
coincidan con rP y n P respectivamente). Se comenzará rotando la superficie Q de modo
que la normal nQ sea igual a la normal n P , para esto debe encontrarse una matriz M 1 tal
que:
n P = M 1 ⋅ nQ
16
La matriz M1 (ver Anexo B) que cumple con esta condición es:
⎡cos θ P
M 1 = ⎢⎢ sin θ P
⎢⎣ 0
− sin θ P
0⎤ ⎡cos γ
0⎥⎥ ⋅ ⎢⎢ 0
1⎥⎦ ⎢⎣ sin γ
cos θ P
0
0 − sin γ ⎤ ⎡ cos θ Q
1
0 ⎥⎥ ⋅ ⎢⎢− sin θ Q
0 cos γ ⎥⎦ ⎢⎣ 0
sin θ Q
cos θ Q
0
0⎤
0⎥⎥
1⎥⎦
donde θ P y θ Q son los ángulos de azimuth (ángulo que forma el eje X) con la proyección
del vector sobre el plano XY) de n P y nQ respectivamente y γ = γ P − γ Q , con γ P y γ Q ,
los ángulos de elevación de las normales.
Para un vector r cualquiera los ángulos de azimuth y elevación se calculan
respectivamente como
tan θ =
ry
rx
tan γ =
rz
r + ry2
2
x
Z
r
r
γ
Y
θ
X
Figura 3-8: Ángulos de azimuth (θ) y elevación (γ) para un vector cualquiera r.
17
Por lo tanto, para rotar la superficie Q de modo que su normal nQ coincida con la
normal n P de la superficie P se calcula para cada punto de Q y para rQ .
1
qi = M 1 ⋅ qi
1
rQ = M 1 ⋅ rQ
con i = 1, 2, ..., N Q
Luego se traslada la superficie Q de modo que su punto de referencia rQ coincida
con rP el punto de referencia de la superficie P. Debe encontrarse un vector de traslado r1
tal que:
rP = 1rQ + r1
r1 = 1rQ − rP = M 1 ⋅ rQ − rP
Entonces, para cada punto de la superficie Q y su punto de referencia, se tiene que
2
qi = 1qi + r1 = M 1 ⋅ qi + r1
2
rQ = 1rQ + r1 = M 1 ⋅ rQ + r1
Figura 3-9: Izquierda: Posición inicial superficie Q. Derecha: Posición superficie Q luego
de la primera rotación y traslación
18
En la Figura 3-10 se muestra la superficie P (muñón) y la superficie Q (en este
caso, un paraboloide) ya posicionada, como se observa el sentido de esta última dependerá
del sentido de la normal de la superficie P, calculada en el punto 3.1.1. Aquí es el usuario
quien deberá escoger cual de las dos opciones le será de utilidad, ya sea para hacer una
presión (izquierda) o una descarga (derecha).
Figura 3-10: Izquierda: Posición de presión o carga superficie Q. Derecha: Posición de
descarga superficie Q
3.1.3.
Rotación Tangencial
Aquellas superficies, que no son simétricas con respecto a su normal, como es el
caso de una elipsoide, un paraboloide elíptico y un toroide este posicionamiento no
siempre es el correcto.
En la Figura 3-11, se observa el mismo muñón que en los ejemplos usados
anteriormente, pero esta vez la superficie secundaria o superficie Q es un toroide
posicionado en el mismo punto de referencia rP . A la derecha el punto de observación es
en dirección de la normal, en esta figura se aprecia que no cualquier orientación de la
superficie Q entregará el mismo resultado.
19
×
Figura 3-11: Posicionamiento inicial de un toroide sobre el punto de referencia rP
Para corregir este problema, nuevamente se requerirá la interacción con el usuario
para determinar cuanto debe girar la superficie Q (toroide) en torno a la normal para
quedar en una posición válida, es decir, que genere una deformación útil.
Esta vez debe encontrarse una matriz de rotación M2(α), donde α corresponde al
ángulo que el usuario ingresa y además la normal de la superficie Q debe continuar siendo
igual a la normal de la superficie P, es decir, la rotación es en el plano tangencial a la
normal.
3
qi = M 2(a )⋅ 2 qi
3
rQ = M 2(a ) ⋅ 2 rQ
La matriz M 2(α ) (ver Anexo B) que permite realizar la rotación tangencial es
M 2(α ) = M 2C ⋅ M 2 B (α ) ⋅ M 2 A
siendo
20
⎡ sin γ P 0 − cos γ P ⎤ ⎡ cos θ P sin θ P 0⎤
M 2 A = ⎢⎢ 0
1
0 ⎥⎥ ⎢⎢− sin θ P cos θ P 0⎥⎥
⎢⎣cos γ P 0 sin γ P ⎥⎦ ⎢⎣ 0
0
1⎥⎦
⎡cos α − sin α 0⎤
M 2 B(α ) = ⎢⎢ sin α cos α 0⎥⎥
⎢⎣ 0
0
1⎥⎦
⎡cos θ P − sin θ P 0⎤ ⎡ sin γ P 0 cos γ P ⎤
M 2C = ⎢⎢ sin θ P cos θ P 0⎥⎥ ⎢⎢ 0
1
0 ⎥⎥
⎢⎣ 0
0
1⎥⎦ ⎢⎣' cos γ P 0 sin γ P ⎥⎦
Debido a las distintas rotaciones, puede ocurrir, que los puntos de referencia no se
mantengan coincidentes, por lo que, en caso que esto ocurra, debe trasladarse nuevamente
la superficie Q.
r 2 = 3rQ − rP
4
qi = 3qi + r 2 = M 2(α ) ⋅ 2 qi + r 2
4
rQ = 3rQ + r 2 = M 2(α ) ⋅ 2 rQ + r 2
La Figura 3-12 muestra el toroide rotado en torno a su normal con un ángulo
α = 60º con respecto a la posición inicial. El ángulo dependerá exclusivamente del usuario
y determinará la forma de la deformación final.
21
Figura 3-12: Posicionamiento superficie Q, luego de rotación tangencial y traslado al punto
de referencia pP. Izquierda: Punto de observación lateral. Derecha: Punto de observación en
dirección normal
3.1.4.
Desplazamiento según la normal
Por último, cuando la superficie Q está posicionada como el usuario desea, se
desplaza según la dirección y sentido de la normal. La magnitud del desplazamiento d n
nuevamente debe ser ingresado por el usuario.
r3 = d n ⋅ nP
5
qi = 4 qi + r 3
5
rQ = 4 rQ + r 3
Las figuras 3-13 y 3-14 muestran la posición antes y después del desplazamiento en
dirección normal de la superficie Q, para el paraboloide y toroide de los ejemplos
anteriores.
22
Figura 3-13: Desplazamiento en dirección normal de un paraboloide sobre el muñón
(dn=7mm)
Figura 3-14: Desplazamiento en dirección normal de un toroide sobre el muñón (dn =5mm)
Resumiendo todas las rotaciones y traslaciones parciales en una sola ecuación se
tiene
RT
qi = M 2 ⋅ (M 1 ⋅ qi + r1) + r 2 + r 3
RT
rQ = M 2 ⋅ (M 1 ⋅ p Q + r1) + r 2 + r 3 .
donde
RT
(1)
qi corresponde al punto i de la superficie Q posicionada y
referencia de la superficie Q posicionada.
23
RT
rQ al punto de
Por último, la función final que representa la superficie Q, luego de las sucesivas
traslaciones y rotaciones, será f QRT .
3.2.
Etapa 2: Desplazamiento de puntos internos
Esta etapa consiste en desplazar hacia la superficie Q todos aquellos puntos de la
superficie P (muñón) que se encuentren dentro de la curva de intersección generada entre
las superficie Q y P. El objetivo de desplazar estos puntos, y no simplemente
reemplazarlos por los de la superficie Q, es mantener la relación de vecindad determinada
por la triangulación de Delaunay. Esto permitirá realizar futuras deformaciones en la
misma zona. Esta etapa es un poco más compleja que la anterior, ya que hay que trabajar
con la superficie P, o sea, con un conjunto de puntos, cuyas coordenadas se encuentran en
la matriz P y su triangulación determinada por la matriz FP .
Figura 3-15: Esquema etapa 2 de deformación: Desplazamiento punto internos
Si se definen como puntos internos todos aquellos puntos que se encuentran dentro
de la curva de intersección generada entre las superficie P y Q, entonces se impone como
requerimiento obligatorio para nuestros objetivos, que ambas superficies al intersectarse
(etapa 1) generen una curva cerrada.
La superficie Q es una superficie implícita mientras que la superficie P no lo es (es
un conjunto de puntos y una triangulación), por lo que no es posible encontrar la expresión
matemática para la curva de intersección, por esto, buscaremos un conjunto de puntos
internos Cin, que aproximen esta curva.
24
3.2.1.
Curva de intersección
Para encontrar la curva de intersección (CI), partiremos por encontrar un primer
punto pin , perteneciente a la superficie P, que se encuentre al interior de la superficie Q, y
“lo suficientemente cerca” de esta superficie como para pertenecer a una curva de
intersección aproximada. “Lo suficientemente cerca” se interpretará como aquel punto que
se encuentra al interior de la superficie Q (por tanto dentro de la CI), y al menos un punto
perteneciente a la triangulación de pin se encuentra afuera de CI, independiente de la
resolución que con que se haya escaneado la superficie P. Al punto que se encuentra fuera
de CI, lo llamaremos pout .
p out
p in
CI
Figura 3-16: pin está “lo suficientemente cerca de CI” si al menos un punto perteneciente a
su triangulación se encuentra fuera de la superficie Q
Para comenzar tomaremos el punto rP , el cual, debido a como se definió el
posicionamiento de la superficie Q, sabemos que se encuentra dentro de ésta y podemos
corroborar esto si se cumple.
f QRT (rP ) < 0
25
donde f QRT ( x, y, z ) = 0 corresponde a la función implícita de la superficie Q luego de
terminada la etapa 1, es decir, luego de posicionada la superficie Q sobre la superficie P.
Esta última condición no es tan sencilla de calcular ya que las funciones implícitas
están definidas en la mayoría de la literatura en su forma más sencilla, centradas en el
origen o en torno a un eje cartesiano y sus ejes principales coincidentes con estos ejes. En
la etapa anterior, se realizaron sobre la superficie Q varias rotaciones y desplazamientos los
que no son tan triviales de representar en una función implícita, principalmente en
funciones complejas como la de un toroide. Cambiando un poco el método de resolución
esta situación puede resolverse de manera muy sencilla.
Una forma de solucionar esto podría ser, mantener la superficie Q en la posición
inicial, es decir aquella donde sí tenemos definida su función fQ y rotar en torno a esta la
superficie P, el resultado de esto sería realizar las operaciones inversas que se hacen en la
ecuación (1). El problema que resulta de hacer esta operación, es el costo computacional
que conlleva, ya que dependiendo de la resolución y la magnitud de NP (número total de
puntos de la superficie P), la que puede ir desde los 28.000 puntos, en caso del muñón
utilizado en este trabajo, para una resolución de 2 mm, hasta 150.000 puntos para menores
resoluciones o superficies más grandes. Comparando con los 1.500 que podría tener la
superficie Q el costo computacional es mucho mayor. Este número podría ser mucho
menor ya que se utiliza sólo para visualizar esta superficie y posicionarla correctamente.
Pero, en vez de rotar y trasladar toda la superficie P lo que haremos será rotar y
trasladar sólo el punto p que queremos verificar, es decir, en vez de verificar
f QRT (rP ) < 0
verificamos que se cumpla
f Q ( p ′) < 0
26
donde
(
)
p ′ = M 1−1 ⋅ M 2 −1 ⋅ ( p − r 2 − r 3) − r1
(2)
Por lo tanto, cada vez que se necesite verificar si un punto se encuentra dentro o
fuera de la superficie Q, se calculan las rotaciones y traslaciones inversas dadas en la
ecuación (2).
Retomando la idea de corroborar si el punto rP está dentro o fuera de la superficie
Q, verificamos si se cumple
f Q (rP′ ) < 0
rP′ = M 1−1 ⋅ (M 2 −1 ⋅ (rP − r 2 − r 3) − r1)
Nuevamente, según como se posicionó y desplazó la superficie Q, esta desigualdad
debiera ser verdadera en todos lo casos.
Entonces, se tiene un punto que pertenece a la superficie P y que se sabe se
encuentra dentro de la superficie Q, por lo que a partir de ese punto comenzaremos a
acercarnos a la curva de intersección a través de la malla triangulada. Se recorrerá la malla
en una dirección, punto por punto verificando si este se encuentra dentro de Q, hasta que
encontremos uno que se encuentre fuera.
De la matriz FP , se obtiene el vector de triangulación de rP ( ∆rP ). De forma
arbitraria se escoge un punto p1 cualquiera perteneciente a ∆rP , para comenzar a recorrer
la malla y calculamos la dirección d 1 del recorrido como
d1 =
p1 − rP
q1 − rP
27
Si se cumple que f Q ( p1′ ) < 0 , entonces se busca el siguiente punto p 2 , ya que p1 se
encontraría al interior de la superficie Q.
d1
p1
rP
Figura 3-17: Punto 1 trayectoria rP – pin
Primero se determina ∆p1 , luego para cada punto p1i ∈ ∆p1 se calcula su dirección
con respecto al punto p1 y el ángulo que forma esta con d 1
p1i =
p1i − p1
p1i − p1
y
cos β 1i =
d1i ⋅ d1
d1i d1
entonces, aquel punto p1i que dé cómo resultado el menor ángulo θ1i será el siguiente
r
r
r
punto q 2 y d1i la siguiente dirección del recorrido d 2 . Luego de verificar que se cumpla
f Q (q 2′ ) < 0 se continúa con el punto siguiente.
28
d 14 = d 2
p15
p14 = p 2
β 14
d1
p13
p1
p11
p12
Figura 3-18: Punto 2 trayectoria rP – pin
d 23 = d 3
p 23
p 22 = p3
d 2 β 23
p 24
p2
p 25
p 21
Figura 3-19: Punto 3 trayectoria rP – pin
El algoritmo a partir de j = 2 es el siguiente:
1. Verificar si se cumple f Q ( p ′j −1 ) < 0 , si no se cumple esta condición, saltarse los
puntos 2-6.
2. Se determina ∆p j −1
29
3. d ( j −1)i =
p ( j −1)i − p ( j −1)
p ( j −1)i − p ( j −1)
r
r
d ( j −1)i ⋅ d ( j −1)
cos β ( j −1)i = r
r
d ( j −1)i d ( j −1)
4.
p j = p ( j −1)a y d j = d ( j −1)a siendo a, el índice correspondiente al menor β ( j −1)i .
5.
j = j +1
6. Vuelve al punto 1.
pin = p j − 2 y p out = p j −1
7.
Observando el comportamiento de la trayectoria para distintos casos, se aplicó una
corrección al cálculo del ángulo β .
cos β ( j −1)i =
d ( j −1)i ⋅ d
d ( j −1)i d
donde d corresponde al promedio de todos las direcciones anteriores, es decir,
j −1
d=
∑d
k =1
k
j −1
Esta corrección permite que todas las direcciones anteriores sean tomadas en cuenta
al momento de escoger el punto siguiente, y por tanto la trayectoria sea más recta. En la
Figura 3-20, se observa la diferencia entre una trayectoria sin la corrección mencionada y
una trayectoria con corrección. Aplicando esta corrección no necesariamente el punto pin
encontrado será el mismo, pero esto no afecta en el resultado final del trabajo.
30
pin
pin
rP
rP
Figura 3-20: Corrección de trayectoria rP – pin
Continuando con el objetivo de encontrar un conjunto de puntos que aproximen la
curva de intersección entre las superficie P y Q, comenzamos a recorrer ésta partiendo por
el punto pin encontrado. Recordemos que pin corresponde a un punto en la cercanía de la
curva de intersección, cuya triangulación contiene al menos un punto que está fuera de la
superficie Q (ver Figura 3-16). Este conjunto de puntos se almacenará en el vector C in y
cada punto i perteneciente a este vector lo llamaremos ci . Cabe mencionar que los puntos
que pertenezcan a C in deben cumplir con la misma condición de cercanía a CI de pin , es
decir, todo ci debe tener en su vector triangulación al menos un punto que se encuentre
fuera de CI. Como se comenzará por pin , se tiene que
c1 = pin
Para encontrar el siguiente punto, buscamos en la triangulación de c1 , ∆c1 ,
aquellos puntos que se encuentren dentro de la superficie Q, es decir, aquellos puntos que
cumplen con f Q (c1′i ) < 0 . Encontrados estos puntos, buscamos entonces aquel que este
más cerca de la superficie Q. Para esto resolvemos f Q (c1′i ) y aquel punto que de el menor
resultado corresponderá a c 2 .
31
c21
c25
c14
c13
c12
c15
c3 = c 24
c1
c2
c1 = c22
c23
c11
Figura 3-21: Izquierda: ejemplo punto c1 y los puntos c1j correspondientes a su
triangulación. Derecha: punto c2 y puntos c2j.
En el ejemplo de la Figura 3-21, izquierda, se observa el punto c1 y los puntos
c1 j ∈ ∆c1 . c1 cumple con la condición de cercanía definida ya que tanto c14 y c15 se
encuentran fuera de la CI. En este ejemplo c13 es aquel punto que se encuentra más cerca
de CI, por lo tanto este punto corresponderá a c 2 . En esta misma figura a la derecha se
observa entonces c 2 y los puntos c 2 j ∈ ∆c 2 .
Para encontrar el siguiente punto, c3 , procedemos de la misma forma: buscamos la
triangulación de c 2 , ∆c 2 , y, de los puntos c2i que se encuentran dentro de la superficie Q
buscamos aquel que este más cerca de ésta. Además, imponiendo como condición que
c3 ≠ c1 , aseguramos un avance a través de la curva, y no retrocesos. De la Figura 3-21,
derecha, se observa que c 22 , c 23 y c 24 están dentro de la superficie Q, pero c 22 = c1 , por lo
tanto no se podría escoger este punto, aunque fuese el más cercano a la superficie de los
tres, ya que no se estaría recorriendo la curva correctamente. Luego, c 24 es el punto más
cercano a la CI y por lo tanto este corresponderá a c3 .
El resto de los puntos se resuelven iterativamente, de la misma forma en que se
resolvió c 2 , imponiendo como condición adicional que c k ≠ c j , con j = 1, K, k − 1 .
32
Cuando el algoritmo se encuentra con que el siguiente punto es c k = c1 significa
que se recorrió la curva completa, y por lo tanto hay que detener las iteraciones.
c4
c3
c2
c1
ck
Figura 3-22: Ejemplo de distribución de puntos Cin.
En la Figura 3-23, se observa el muñón, intersectado con un paraboloide, a la
derecha pueden observarse los puntos pertenecientes a la superficie P que quedan dentro
de la superficie Q. En la Figura 3-24, ya se ha encontrado el vector C in , cuyos puntos
aproximan la curva de intersección entre ambas superficies.
Figura 3-23: Puntos internos superficie P.
33
Figura 3-24: Curva de intersección Cin aproximada entre las superficies P y Q
c1 = qin
c2
c3
rP
ci
Figura 3-25: Trayectoria rP – pin y vector Cin
Un cálculo similar puede hacerse para encontrar una curva de intersección
aproximada por fuera de la superficie Q, C out .
34
3.2.2.
Puntos internos
Una forma sencilla de encontrar los puntos de la superficie P que se encuentran
dentro de la superficie Q, sería probar para cada punto p ∈ P si cumple con
f Q ( p ′) < 0
El problema de hacer este cálculo, es nuevamente el costo computacional que esto
conlleva, ya que significa, realizar este cálculo alrededor de 15.000 veces, para el caso del
muñón estudiado, o más si se trata de una superficie más grande o de mayor resolución
Una forma de encontrar estos puntos, sin recorrer la superficie P completa es ir
encontrando puntos por niveles. Al conjunto de puntos C in lo consideraremos como el
nivel 1, ya que estos puntos son los que se encuentran más cerca de la CI. Continuando con
el ejemplo del punto anterior, la Figura 3-26, muestra los puntos pertenecientes a C in , y el
nivel 2 lo componen todos aquellos puntos que pertenezcan a la triangulación de un punto
cualquiera c j ∈ C in y que cumplan con estar dentro de la superficie Q. Este segundo nivel
lo llamaremos C in′ .
Matemáticamente el algoritmo es el siguiente:
1. ∀ punto c j ∈ Cin encontrar su vector triangulación, ∆c j
2. ∀ punto c ji ∈ ∆c j , si cumple f Q (c ′ji ) < 0 y c ji ∉ C in , entonces c ji ∈ C in′
35
C in , nivel 1
Cin′ , nivel 2
Figura 3-26: Puntos internos superficie P. Niveles 1 y 2
Adicionalmente, se generará un vector I donde se irán almacenando todos los
puntos interiores que se encuentren. Encontrado C in′ , se tiene
⎡C ⎤
I = ⎢ in ⎥
⎣C in′ ⎦
Para encontrar los puntos que pertenecen al nivel 3, se toman todos los puntos
c ′j ∈ Cin′ , y para cada uno de ellos, se encuentra su vector triangulación ∆c ′j , los puntos
c ′ji ∈ ∆c ′j y que además cumplan con c ′ji ∉ I se almacenan en un tercer vector C in′′ . Es
importante almacenar este vector junto con C in y C in′ , ya que más adelante se trabajará con
éstos para suavizar la región de intersección. Finalizado el recorrido por todos los puntos
c ′j se agrega C in′′ a I.
⎡C in ⎤
I = ⎢⎢C in′ ⎥⎥
⎢⎣C in′′ ⎥⎦
36
Para un nivel C inx , se tiene entonces
⎧
⎡ C in ⎤ ⎫
⎪ x x
⎪
x −1
x
C = ⎨c | c ∈ ∆c y c ∉ I con I = ⎢⎢ M ⎥⎥ ⎬
⎪
⎢⎣C inx −1 ⎥⎦ ⎪⎭
⎩
x
in
cuando Cinx = { }, es decir, no encuentra ningún punto, se da por completa la búsqueda de
puntos internos.
La Figura 3-27 muestra a la izquierda los 3 primeros niveles, mientras que a la
derecha muestra todos los niveles (siendo en este caso, 5 en total).
Figura 3-27: Puntos internos superficie P. Izquierda: niveles 1, 2 y 3. Derecha: niveles 1-5
3.2.3.
Desplazamiento puntos internos
Luego de encontrar los puntos pertenecientes a la superficie P que se encuentran
dentro de la superficie Q, deben desplazarse hacia esta superficie para generar la
deformación. Para realizar este desplazamiento, se trazará para cada punto interno, pi ∈ I ,
37
una recta con dirección normal n P , y se calculará el punto de intersección con la superficie
Q.
Matemáticamente,
{
pI = (r − pi ) × nP = 0 ∩ f QRT
}
donde p I es el punto de intersección entre la recta y la superficie Q, r es un punto
cualquiera de la recta y f QRT es la función implícita de la superficie Q ya posicionada.
Nuevamente nos encontramos con el problema de que f QRT no es posible definirla
para todas las superficies geométricas utilizadas en este desarrollo. Para solucionar esto se
calcula
(
⋅ (M 2 ⋅ (n
)
− r 2 − r 3) − r1)
=0 ∩ f }
pi′ = M 1−1 ⋅ M 2 −1 ⋅ ( pi − r 2 − r 3) − r1
n ′P = M 1−1
−1
p ′I = {(r ′ − pi′ ) × n′P
P
Q
donde f Q es la función implícita de la superficie Q definida en el sistema absoluto.
Para obtener las coordenadas de p I , volvemos a realizar todas las rotaciones
p I = M 2 ⋅ (M 1 ⋅ p ′I + r1) + r 2 + r 3
Como algunas superficies son cerradas, de este cálculo pueden resultar dos
soluciones, p I 1 y p I 2 . Aquella que se encuentre en el sentido de la normal con respecto al
punto pi , corresponderá a las coordenadas de desplazamiento.
38
Luego, pi es reemplazado por p I en la matriz Points o P. De esta forma, la
relación de vecindad definida por la triangulación de Delaunay y la matriz Facets se
mantiene.
⎡ p1x L pix L p Nx P ⎤
⎥
⎢
P = ⎢ p1y L piy L p Ny P ⎥
⎢ p1z L piz L p Nz ⎥
P ⎦
⎣
fila i
⎡ p1x L p Ix L p Nx P ⎤
⎥
⎢
P = ⎢ p1y L p Iy L p Ny P ⎥
⎢ p1z L p Iz L p Nz ⎥
P ⎦
⎣
Figura 3-28: Esquema matriz P, reemplazo punto pi por punto pI.
3.3.
Etapa 3: Suavización de bordes
En esta etapa se suavizan los bordes resultantes de la deformación realizada en la
etapa anterior. El objetivo es eliminar los posibles bordes pronunciados que den como
resultado aristas filosas en el socket final.
Figura 3-29: Esquema etapa 3 de deformación: Suavización de la región de borde
39
Primero, deben determinarse cuales son los puntos que conforman o borde o región
de borde y el alcance que tendrá ésta. Anteriormente, se encontraron los vectores C in , C in′
y C in′′ que contienen los tres primeros niveles de puntos internos. De la misma forma se
′ y C out
′′ , mientras más niveles sean considerados, mayor será el
encuentran C out , C out
alcance de la suavización. De aquí en adelante, para una mayor comprensión de los
algoritmos, se nombrarán a estos seis vectores como C k con k = 1K 6 , siendo C 1 el
vector correspondiente al nivel mas interno, o sea, C in′′ y C 6 el vector del nivel más
′′ (ver Figura 3-30). Y la región de borde (RB) corresponderá a la unión de
externo, C out
todos estos vectores.
{
RB = C1 ∪ C 2 ∪ C 3 ∪ C 4 ∪ C 5 ∪ C 6
}
La Figura 3-30 a continuación, corresponde a la intersección entre un paraboloide y
el muñón usado en este trabajo, en este caso el paraboloide esta generando una descarga ya
que este se proyecta hacia fuera de la superficie y no hacia adentro como los ejemplos
anteriores. En la figura de la derecha se muestran los puntos de los vectores C k , al igual
que los triángulos que los unen. Recordemos que la curva de intersección se encuentra
entre los vectores C 3 , que corresponde a C in y C 4 , correspondiente a C out .
Teniendo definida ya la región de borde y su alcance, habrá que determinar como
se hará la suavización. Las superficies de Bezier ofrecen una buena solución para este tipo
de problemas, ya que son superficies definidas y fácilmente controlables.
40
4
5
C6 C C
C 3C 2 1
C
Figura 3-30: Región de borde (RB) definida por los vectores Ck
3.3.1.
Superficies de Bezier
Las superficies de Bezier, son el resultado de la aproximación matemática de un
conjunto de puntos distribuidos en una malla de n × m puntos. Esta malla es denominada
el polinomio característico de la superficie, mientras que los puntos que la forman
corresponden a los puntos de control. La ventaja de este tipo de aproximación es que la
superficie resultante es una superficie controlada, predecible y suave en su forma.
La ecuación general para una superficie de Bezier es
m n
r
r
r (u , w) = ∑∑ pij Bi ,m (u )B j ,n (w)
i =0 j =0
donde
Bi ,m (u ) = C (m, i )u i (1 − u )
n −i
y C (m, i ) corresponde al coeficiente binomial
41
C (m, i ) =
m!
i !(m − i )!
Figura 3-31: Superficie de Bezier
Para un polígono de 4×4 puntos, la ecuación paramétrica correspondiente es
[
r
3
r (u , w) = (1 − u )
3u (1 − u )
2
3u 2 (1 − u )
⎡ (1 − w)3 ⎤
⎢
2⎥
3w(1 − w) ⎥
3
⎢
u P
⎢3w 2 (1 − w)⎥
⎥
⎢
w3
⎦⎥
⎣⎢
]
donde
r
⎡ p11
⎢ pr
P = ⎢ r 21
⎢ p31
⎢r
⎣ p 41
r
p12
r
p 22
r
p32
r
p 42
r
p13
r
p 23
r
p33
r
p 43
r
p14 ⎤
r
p 24 ⎥⎥
r
p34 ⎥
r ⎥
p 44 ⎦
r
y el vector pij corresponde a las coordenadas de los puntos de control del polinomio
característico.
42
3.3.2.
Generación de mallas
Como nos interesa suavizar la zona de intersección debemos generar mallas en esta
zona, la cual está determinada por los vectores C k , los que recorren la superficie
circularmente y van de adentro hacia fuera (ver Figura 3-30). En este caso se generarán
mallas de 4×4 que barrerán toda esta superficie.
Figura 3-32: Mallas de 4x4 sobre la Región de Borde (RB)
La Figura 3-32 izquierda muestra una configuración posible para la primera malla
usando los puntos de los vectores C 1 , C 3 , C 4 y C 6 . Como la superficie final debe ser
continua, las mallas de Bezier también deben serlo. Por esto, la segunda malla debemos
generarla a partir de la última fila de la primera malla. Lo mismo se hace para el resto de
las mallas hasta cubrir toda la región de intersección.
La formación de la mallas debe ser automática. Por lo que es necesario generar un
algoritmo que resuelva este problema, generando mallas relativamente uniformes que no se
entrecrucen entre sí y que recorran toda la superficie de intersección.
43
La Figura 3-33 corresponde al mismo ejemplo de las figuras 3-30 y 3-32, en ésta se
indican los detalles A, B y C los que utilizaremos para ejemplificar el desarrollo del
algoritmo de generación de mallas.
A
B
C
Figura 3-33: Región de Intersección, Detalles A, B y C
Primero, comenzaremos ordenando sucesivamente los puntos del primer vector C 1 .
Se comenzará a partir de un punto arbitrario cualquiera y el segundo corresponderá a
cualquiera de sus vecinos. Este segundo punto, debe cumplir con 2 condiciones, primero,
que pertenezca al vector C 1 y segundo, que pertenezca a la triangulación del primer punto.
Si existe más de un punto que cumpla con estas condiciones, se escoge cualquiera de ellos.
A medida que los puntos de C 1 se vayan ordenando, se irán guardando en un vector
auxiliar B 1 , si el primer punto corresponde a b11 entonces es segundo corresponderá a b21 y
así sucesivamente. Continuando con el ejemplo anterior, la Figura 3-34, detalle A, muestra
los tres primeros puntos, b11 , b21 y b31 , en este caso b11 tiene 1 solo vecino que pertenece a
C 1 . Para encontrar el tercer punto, se imponen las siguiente condiciones: b31 debe ser
vecino del segundo, es decir, debe pertenecer a la triangulación de b21 ( ∆b21 ) y a la vez
debe ser distinto a b11 .
44
Bajo estas mismas condiciones se continúan encontrados los puntos siguientes.
Matemáticamente, para n ≥ 2 se tiene que, cada punto bn1+1 debe cumplir con:
ƒ
bn1+1 ∈ ∆bn1
ƒ
bn1+1 ≠ bm1 con m = 1, L, n
Cuando el punto que encuentra este algoritmo es igual al punto inicial b11 , entonces
se detiene la búsqueda, ya que la curva se cerró.
Detalle A
b31
1
2
b
Dirección de
avance
b11
Figura 3-34: RB, detalle A. Ordenamiento primeros 3 puntos del vector C1.
Para ordenar el vector C 2 el algoritmo es similar al anterior, pero la elección del
primer punto y la dirección de avance ya no es arbitraria, si no que depende de B 1 . El
primer punto de la curva ordenada B 2 debe ser vecino del primer punto de B 1 . Por lo
tanto, b12 debe pertenecer al vector C 2 y a la triangulación de b11 . Estas dos condiciones
pueden ser cumplidas por varios puntos, normalmente dos o tres. En el caso de ser dos, se
escoge cualquiera de ellos, y en el caso de ser tres, se usa el de al medio como punto de
45
partida. En el caso de la Figura 3-35, detalle A, existen 3 posibles puntos, a, b y c para
comenzar a ordenar el vector C 2 , en este caso se escoge el de al medio, b, como el punto
inicial b12 . El segundo punto es el que dará el sentido de avance del recorrido y para que
sea igual al del vector B 1 , el segundo punto del vector B 2 , debe, además de pertenecer a la
triangulación de b12 , pertenecer a la triangulación del segundo o tercer punto de B 1 . Luego,
continuamos al igual que con el primer vector con el orden del vector C 2 , donde
ƒ
bn2+1 ∈ ∆bn2
ƒ
bn2+1 ≠ bm2 con m = 1, L, n
Detalle A
b31
a
b =b
2
1
b21
b11
c
Figura 3-35: RB, detalle A. Ordenamiento vector C2, selección del primer punto
Para el resto de los vectores, el algoritmo es el mismo, dependiendo siempre del
vector anterior.
Este algoritmo es bastante simple en su desarrollo, pero se generan errores en
distintos casos.
46
Problema 1: Si observamos la Figura 3-36, detalle B, existe una intersección de
triangulaciones donde no hay punto marcado, en esta zona efectivamente hay un punto que
pertenece al vector C 6 , pero no se consideró al momento de ordenar los puntos. A este
punto lo llamaremos ci6 .
El problema se genera dado que los puntos c h6 y c k6 también son vecinos entre sí
(aunque no este mostrado en la figura), es decir pertenecen a una misma triangulación.
Cuando se está ordenando este vector, o cualquier otro donde suceda el mismo problema y
este punto es considerado, el algoritmo se encuentra en la siguiente situación:
Se tiene el punto bn6 = c 6j perteneciente al vector ordenado B 6 , y necesitamos
encontrar el siguiente, bn6+1 . Existen 2 puntos pertenecientes a C 6 que cumplen con ser
vecinos de bn6 y a la vez son distintos a bn6−1 , estos serían ci6 y c k6 . Como el algoritmo
admite sólo uno, escogerá cualquiera de los dos.
Opción A: Si el algoritmo escoge bn6+1 = ci6 , luego, para encontrar bn6+ 2 , existe un
sólo punto que cumple con pertenecer a C 6 y a la triangulación de bn6+1 y es distinto de bn6 ,
este punto sería c k6 , luego seguiría con c 6j y el vector se ordenaría correctamente, ver
Figura 3-37.
47
Detalle B
c h6
c
6
i
6
c k6 c j
punto
eliminado
Figura 3-36: RB, Sección B, Problema 1
Opción B: Si el algoritmo escoge bn6+1 = c k6 , luego, hay que encontrar bn6+ 2 .
Nuevamente nos encontramos con dos puntos, ci6 y c 6j , que cumplen con pertenecer a la
triangulación de bn6+1 y son distintos de bn6 .
Opción B.1: Si se escoge bn6+ 2 = c 6j el vector seguirá ordenándose correctamente, ya
que ci6 no pertenece a la triangulación de c 6j y por lo tanto no se escogerá para
continuar con el orden del vector.
Opción B.2: Si se escoge bn6+ 2 = ci6 el algoritmo continuará con la búsqueda de
bn6+3 , y no existe ningún punto que cumpla con las condiciones impuestas
( bn6+3 ∈ ∆bn6+ 2 y bn6+3 ≠ bm6 ). De esta forma, el algoritmo se detiene y resulta un
vector B 6 incompleto.
48
Se adoptó como solución eliminar el punto ci6 , de esta forma el único camino del
algoritmo es tomar la opción B.1. La característica principal de este punto es que sólo tiene
4 vecinos, por esta razón se eliminaron todos los puntos p con N ∆p = 4 .
Opción A
6
n
b
Opción B
c
6
h
bn6+1
ci6
c k6
bn6+ 2
c k6
c 6j
bn6+3
c 6j
…
bn6+3
…
B.1
ci6
B.2
Figura 3-37: Posibles caminos para ordenar C6 en el ejemplo de la Figura 3-32
Problema 2: Lamentablemente, la solución al problema 1 genera un segundo error
en el código. Si observamos el detalle C en la Figura 3-38, veremos que se produce un
nuevo error debido a la eliminación de puntos. Al ordenar el vector C 5 , cuando ya se han
eliminado los puntos con 4 vecinos, nos topamos con “vacíos”. Al llegar al punto bn5 ,
debemos encontrar el siguiente bn5+1 , observando la figura, vemos que ninguno de los
puntos de C 5 cumple con las condiciones impuestas. Para solucionar este problema,
debemos encontrar el punto que sigue. Para esto “extenderemos la vecindad” del punto bn5 .
La Figura 3-39 muestra en una malla cualquiera un punto p, sus vecinos inmediatos y una
“extensión de su vecindad”. Esta extensión la conforman todos aquellos puntos que
pertenecen a la triangulación de los puntos vecinos, menos estos últimos. Al extender el
alcance de la vecindad de bn5 , podemos encontrar el siguiente punto bn5+1 .
49
punto
eliminado
bn5+1
bn5
bn5−1
Detalle C
Figura 3-38: RB, detalle C. Problema 2
puntos pertenecientes a
la vecindad extendida
de p
p3
p4
p2
p5
p
p6
p1
Figura 3-39: Vecindad o triangulación de p extendida.
Luego, teniendo los vectores ordenados, es necesario que todos sean del mismo
largo. Normalmente, al ser las curvas “concéntricas”, aquel vector con menor número de
puntos es B 1 .
50
Si el vector de menor tamaño es B k y es de largo N B k entonces de cada vector B i
deben eliminarse n i = N B i − N B k puntos. Para que no queden zonas donde se han
eliminado muchos puntos, estos deben ser eliminados uniformemente del vector
correspondiente. Para esto calculamos
j=
N Bi
ni
luego, se eliminan todos los puntos, bli⋅ j con l = 1K n i . Si l ⋅ j es un número decimal, se
aproxima al entero más cercano.
Por ejemplo, si el vector B k , correspondiente al vector de menor tamaño, es de
largo N B k = 14 y B i tiene N B i = 20 , entonces debemos eliminar n i = N B i − N B k = 6
puntos, luego calculamos
j=
N Bi
n
i
=
20
= 3.33
6
entonces, los puntos de B i que deben eliminarse son:
→
l ⋅ j = 3.33
→
B i (3) = b3i
l=2 →
l ⋅ j = 6.66
→
B i (7 ) = b7i
l =5 →
l ⋅ j = 16.66
→
B i (17 ) = b17i
l=6 →
l ⋅ j = 20
→
i
B i (20) = b20
l =1
…
51
de esta forma, los 6 vectores pertenecientes a la región de intersección quedan ordenados y
del mismo tamaño
Por último, sólo debemos escoger los vectores que usaremos y armar las mallas.
Para generar mallas de 4x4 sólo se necesitan 4 vectores. La elección de estos dependerá del
alcance que se le de a la suavización. En este caso, se utilizarán los vectores C 1 , C 3 , C 4 y
C 6 . La primera malla se genera con los primeros 4 puntos de cada vector B i . Como
habíamos mencionado, la siguiente malla parte desde los últimos puntos de la malla 1 y
continua con los 3 puntos siguientes. Lo mismo para las mallas siguientes. De esta forma
conseguimos una malla continua y por tanto una suavización continua también.
Idealmente la última fila de la última malla debiera coincidir con la primera fila de
la primera malla, así se cubre toda la superficie de intersección. Si esto no sucediera, la
última malla simplemente queda traslapada sobre la primera. La Figura 3-40 muestra la
generación de malla en la región de intersección. En este ejemplo muestra la intersección,
en dirección de carga, entre el muñón y un paraboloide.
Figura 3-40: Generación de mallas de Bezier
52
Por último aplicamos la función de superficies de Bezier a cada una de las mallas
[
r
3
p(u , w) = (1 − u )
3u (1 − u )
2
3u 2 (1 − u )
⎡ (1 − w)3 ⎤
⎢
2⎥
3w(1 − w) ⎥
3
⎢
u P
⎢3w 2 (1 − w)⎥
⎢
⎥
w3
⎢⎣
⎥⎦
]
con u, v ∈ [0,1]
Figura 3-41: Malla y superficie de Bezier
La Figura 3-41 muestra la superficie de Bezier generada, S B , junto con la malla
que la define. Claramente se ve una suavización en la zona de las aristas mas pronunciadas,
pero aún así la superficie suavizada sigue la forma de la superficie original. Es importante
recordar que la superficie de Bezier también es un conjunto de puntos.
3.3.3.
Desplazamiento de puntos de borde
De la misma forma que para el desplazamiento de puntos internos, lo que haremos
será desplazar los puntos de borde hacia la superficie de Bezier. Esto, para no perder la
triangulación y relación de vecindad de los puntos. Para cada punto p perteneciente a la
región de borde, se proyectará una recta l que pase por este punto y con dirección normal
n P , luego se calculará aquel punto r , perteneciente a la superficie de Bezier, cuya
53
distancia ortogonal d o a la recta l , sea la menor. El punto al que se trasladará p , será el
punto p B , proyección ortogonal de r sobre l .
Matemáticamente,
r
para todo pi = ( pxi , py i , pz i ) ∈ RB , se genera una recta
li : (x − pi ) × n P = 0
luego, para todo rk ∈ S B
d k = (rk − pi ) × n P
con el punto r j cuya distancia d j = min{d k }
p Bi = ( px Bi , py Bi , pz Bi ) = pi + ((r j − pi ) ⋅ n P )n P
y por último reemplazamos las coordenadas de p Bi en pi
pi = ( px Bi , py Bi , pz Bi )
54
pB
r
do
p
nP
Superficie
de Bezier
Puntos
pertenecientes
a RI
Figura 3-42: Desplazamiento de puntos pertenecientes a RI hacia la superficie de Bezier
Figura 3-43: Región de intersección y mallas. Arriba: mallas generadas antes del
desplazamiento de puntos. Abajo: mallas generadas luego del desplazamiento de puntos
La Figura 3-43 muestra una sección de la región de borde (RB) antes y después del
desplazamiento de puntos hacia la superficie suavizada. Arriba se observan las mallas que
generan la superficie de Bezier que suaviza la RB. Abajo, luego de haber desplazado los
puntos de esta región se generan las mallas con los mismos puntos para apreciar que estos
se encuentran ahora sobre la superficie suavizada.
55
Por ultimo, las figuras 3-44 y 3-45 muestran la intersección de un paraboloide y de
un toroide respectivamente sobre el muñón. En la primera se aprecia que los bordes están
menos pronunciados luego de la suavización. En la figura correspondiente al toroide esta
suavización es mucho mas pronunciada dada la geometría resultante de la intersección.
Figura 3-44: Intersección de paraboloide sobre Superficie P o muñón. Arriba: Antes de
suavización de bordes. Abajo: Después de suavización de bordes
56
Figura 3-45: Intersección de paraboloide sobre Superficie P o muñón. Arriba: Antes de
suavización de bordes. Abajo: Después de suavización de bordes
57
4. PROGRAMACION E INTERACCION CON EL USUARIO
Para la programación del algoritmo se utilizó el software matemático MATLAB el
tiene una gran cantidad de funciones y herramientas para manejo de matrices y gráficos
3D. El anexo C corresponde a la función principal o main del software desarrollado. El
diagrama de flujo de esta función es bastante sencillo ya que todo el proceso se desarrolla
de forma secuencial. La Figura 4-1 muestra el diagrama de flujo de esta función principal y
los puntos donde el usuario debe intervenir. Aprovechando las herramientas de Matlab se
intento desarrollar una interfaz también simple.
Inicialmente el usuario debe escoger los archivos que desea usar. Desde el software
Fastscan se exporta un archivo, con formato .mat que contiene las matrices Points y Facets
y otro archivo con formato .txt que contiene las coordenadas de los puntos obtenidos con la
herramienta Stylus.
Luego de esto el algoritmo grafica los puntos de la matriz Points y los puntos
marcado con la herramientas Stylus para que el usuario con la ayuda del mouse escoja el
punto que desea usar como punto de referencia. Matlab sólo permite escoger coordenadas
en 2D, es decir las coordenadas x e y, y por lo tanto el muñón se visualiza en el plano XY
para posicionarnos sobre el punto que el usuario desea escoger (ver Figura 4-2)
El siguiente paso será escoger que tipo de superficie se desea utilizar para la
deformación (ver Figura 4-3) y los parámetros geométricos de ésta, los que dependerán
según la superficie a utilizar (ver Figura 4-4). Luego, automáticamente, el software
posicionará la superficie secundaria sobre el punto que el usuario escogió como se explicó
anteriormente.
Posteriormente el usuario escoge si la superficie esta correctamente posicionada y
luego ingresa el ángulo de rotación tangencial. Las ventanas para estos pasos son similares
a las figuras 4-3 y 4-4 respectivamente.
58
Cargar documento
.mat
Cargar superficie 1
Cargar documento
.txt
Figura 6-2
Escoger Punto
Stylus
Cargar superficie 2
Escoger tipo de
superficie
Figura 6-3
Ingresar
parámetros
geométricos
Figura 6-4
Posicionamiento
inicial
Ingresar ángulo de
rotación tangencial
Rotación
tangencial
Desplazamiento en dirección
normal
Ingresar magnitud
de desplazamiento
Encontrar puntos de
intersección
Encontrar puntos internos
Desplazar puntos internos
Generar superficie de Bezier
Desplazar puntos de borde
Guardar nueva superficie
(Points y Facets)
Ingresar nombre
nueva superficie
Figura 4-1: Diagrama de flujo principal del software y los puntos de interacción con el
usuario
59
Figura 4-2: Elección punto Stylus o punto de referencia
Figura 4-3: Menú superficie secundarias
60
Figura 4-4: Ingreso de parámetros de un toroide
Figura 4-5: Ingreso de la Magnitud de desplazamiento
Luego del posicionamiento inicial y rotación tangencial, el usuario ingresa la
magnitud de desplazamiento de la superficie secundaria (ver Figura 4-5) y luego el
algoritmo sigue trabajando de forma autónoma.
Por último, el usuario debe ingresar el nombre con el cual desea grabar las matrices
Points y Facets en formato .mat las que pueden ser utilizadas nuevamente en este software.
61
5. RESULTADOS
El resultado de este trabajo puede dividirse en dos partes, primero, la capacidad del
algoritmo para generar modificaciones de carga y descarga en un punto determinado, y
segundo la funcionalidad que estas modificaciones presentan en la aplicación.
En cuanto al primer punto, se logró insertar modificaciones en varios puntos del
muñón, teniendo siempre en cuenta la restricción de generar curvas cerradas al momento
de intersectar las superficies. Las figuras a continuación muestran deformaciones tanto de
carga y descarga en distintos puntos de la superficie. En cada figura se muestra primero la
superficie original, luego esta misma con la superficie secundaria o superficie Q,
posicionada y por ultimo la superficie final, con la deformación realizada.
Figura 5-1: Modificación de descarga con forma de paraboloide sobre superficie
digitalizada
62
Figura 5-2: Modificación de carga con forma de esfera sobre superficie digitalizada
63
Figura 5-3: Modificación de descarga con forma de elipsoide sobre superficie digitalizada
64
Para analizar los resultados asociados a la aplicación de la metodología, se escaneó
un molde inverso fabricado de forma tradicional por un profesional. Este corresponde al
molde para la prótesis del paciente cuyo muñón se ha utilizado en el desarrollo de este
trabajo. La Figura 5-4 muestra a la izquierda el muñón escaneado y a la derecha el molde
inverso de yeso digitalizado, ambos visualizados con el software del escáner. Estas mismas
superficies, se muestran en la Figura 5-5, pero esta vez visualizadas en el software Matlab,
donde se desarrolló el algoritmo de este trabajo.
Rótula
Figura 5-4: Digitalización muñón y molde inverso tradicional, visualización software
Fastscan
65
Figura 5-5: Digitalización muñón y molde inverso tradicional, visualización software
Matlab
En base a este molde inverso se determinaron las modificaciones de carga y
descarga que deben realizarse sobre la superficie original. Las principales modificaciones
detectadas corresponden a una presión sobre la rótula para sostener el socket, y liberación
de contacto sobre las terminaciones óseas laterales. La Figura 5-6 muestra estas
deformaciones sobre la imagen del molde inverso.
66
Carga sobre la rótula
Descarga o alivio
óseo
Figura 5-6: Modificaciones de carga y descarga sobre molde inverso tradicional
Para realizar la presión sobre la rótula se posicionó un toroide sobre el punto de la
rótula marcado con la herramienta Stylus. Los parámetros geométricos del toroide y del
proceso (todos ingresados por el usuario) fueron:
ƒ
Radio del circulo de revolución: r = 10 mm
ƒ
Radio en torno al eje Z: R = 80 mm
ƒ
Angulo de rotación tangencial: α = 75°
ƒ
Magnitud de desplazamiento normal: d n = 8 mm
67
R
r
Figura 5-7: Parámetros geométricos del toroide
Figura 5-8: Etapa de posicionamiento de superficie y rotación tangencial. Parámetros: α = 75°
Figura 5-9: Etapa de desplazamiento en dirección normal. Parámetros: dn = 8mm
68
Figura 5-10: Proceso de carga sobre rótula. Arriba: superficie original. Centro:
posicionamiento superficie geométrica. Abajo: superficie modificada
Para la modificación de descarga lateral se utilizó un paraboloide elíptico con los
siguientes parámetros:
ƒ
Largo: x = 120 mm
ƒ
Ancho: y = 40 mm
ƒ
Alto: z = 60 mm
ƒ
Angulo de rotación tangencial: α = 45°
69
ƒ
Magnitud de desplazamiento normal: d n = 17 mm
z
y
Figura 5-11: Parámetros geométricos del paraboloide ingresados por el usuario
Figura 5-12: Etapa de posicionamiento de superficie y rotación tangencial. Parámetros: α = 45°
70
Figura 5-13: Etapa de desplazamiento en dirección normal. Parámetros: dn = 17mm
Figura 5-14: Proceso de descarga zonas óseas. Arriba: superficie original. Centro:
posicionamiento superficie geométrica. Abajo: superficie modificada
71
6. CONCLUSIONES
En cuanto al método desarrollado, podemos concluir, que éste es capaz de generar
modificaciones de “carga” y descarga” sobre la superficie digitalizada. A pesar que el
algoritmo cuenta con una serie de restricciones: determinada cantidad de superficies
geométricas y el requerimiento de generar curvas cerradas al intersectar ambas superficies,
el usuario tiene la posibilidad de generar una gran variedad de modificaciones sobre la
superficie. Al poder variar los parámetros de las superficies secundarias y la posición de
éstas sobre la superficie a modificar es posible generar una infinidad de diferentes
opciones. Por otra parte, teniendo la ecuación canónica de cualquier otra superficie que se
desee intersectar, es bastante sencillo incluirla en el algoritmo. El algoritmo en sí es
bastante robusto siempre y cuando se cumpla la condición de curva cerrada y la superficie
digitalizada contenga una triangulación (la que no necesariamente debe cumplir con las
condiciones de Delaunay) que relacione cada punto con sus vecinos.
Inicialmente se definieron como superficies secundarias sólo la esfera y la elipse
por ser suaves en su forma y cuyas ecuaciones son simples y conocidas. Además estas
superficies era posible definirlas matemáticamente aún si estaban rotadas y desplazadas del
origen. Observando el trabajo del protesista en el taller de la Teletón y al intentar replicar
las modificaciones se llegó a la conclusión de que estas superficies no eran suficientes para
lograr modificaciones similares. Por ejemplo, la modificación de carga en la zona de la
rótula es realizada por el protesista a cargo presionando este punto con una manguera
plástica la cual se adapta al espacio entre la rótula y la tibia. De la observación de este
procedimiento se decidió incluir el toroide dentro de las superficies secundarias. Dado que
se dificultaba mucho obtener la ecuación del toroide rotado, se decidió aplicar las
rotaciones y traslaciones inversas al punto que se deseaba verificar si estaba dentro o fuera
de la superficie. De este modo, fácilmente puede incluirse otra superficie con sólo tener su
función canónica.
Por otra parte, el procedimiento para el usuario es bastante sencillo, las
interacciones con éste son:
72
1. escoger el punto donde se desea hacer la modificación en la superficie digitalizada;
2. entregar los parámetros de forma de las superficies geométricas;
3. determinar el tipo de modificación (carga o descarga);
4. rotar la superficie tangencialmente si es necesario para la deformación;
5. desplazar la superficie en la magnitud deseada.
Este tipo de interacciones no constituyen una gran dificultad para una persona con
conocimientos básicos de matemáticas o ingeniería y nulos conocimientos de
programación, siendo de gran utilidad dentro del contexto de la aplicación, donde los
futuros usuarios estarían más cercanos a la medicina que a la ingeniería.
El tiempo promedio requerido para generar una deformación depende de la
magnitud de ésta y del conocimiento que el usuario tenga del software. Si eliminamos el
tiempo de interacción con el usuario el algoritmo demora unos 3 minutos en el proceso de
carga sobre la rótula de la Figura 5-10 y unos 10 minutos en el proceso de la Figura 5-14.
Esto puede reducir drásticamente el tiempo que le toma a un protesista generar estas
modificaciones de forma manual, lo que podría tardar una tarde completa.
El éxito de esta aplicación además de poder generar las deformaciones requeridas,
depende del usuario. El profesional que realiza las prótesis es el que sabe cuáles son los
puntos donde deben generarse las cargas de descargas. En este caso, como ingenieros sólo
podemos proveer una herramienta de trabajo y desarrollarla lo mejor posible para que
cumpla su objetivo, pero el resultado final, una deformación útil, dependerá de los
parámetros que ingrese el usuario.
La innovación que este método presenta frente a los actuales software de diseño es
la libertad que tiene el protesista de realizar una descarga en el punto que el escoja y con la
forma que el estime adecuada. Dado que toda persona es distinta y por lo tanto cada
prótesis es exclusiva para cada paciente, no siempre existirán modelos predefinidos que se
ajusten a todas las personas. La libertad que este método tiene de generar deformaciones en
73
cualquier punto de la superficie, permite ajustar de manera más precisa el socket a cada
paciente.
Es importante señalar que el mejor método de evaluación del diseño de un socket
es de forma experimental. Si bien hoy en día todos los socket de prótesis tienen una forma
similar entre ellos, esto no significa que esa sea la única forma de diseñar un socket y que
pueden existir otros métodos y formas que entreguen igual o mayor comodidad al paciente,
siendo la evaluación positiva de este el mejor indicador de éxito de un diseño de socket.
74
7. GLOSARIO
α
Angulo de rotación tangencial
βi
Angulo entre direcciones de avance de la trayectoria rP − pin
θP
Angulo de azimuth de la normal n P
θQ
Angulo de azimuth de la normal nQ
γP
Angulo de elevación de la normal n P
γQ
Angulo de elevación de la normal nQ
Bk
Vector k ordenado de la región de borde
bik
Punto i perteneciente al vector B k
CI
Curva de intersección generada por las superficies P y Q
ci
Punto i cualquiera perteneciente a C in
C in
Conjunto de puntos que aproxima internamente la CI, nivel 1 de puntos
internos
C in′
Nivel 2 de puntos internos
C in′′
Nivel 3 de puntos internos
C out
Conjunto de punto que aproxima externamente la CI
′
C out
Nivel 2 de puntos externos
′′
C out
Nivel 3 de puntos externos
Ck
Vector k de la región de borde
cik
Punto i perteneciente al vector C k
d
Promedio direcciones d i −1
di
Vector (3×1) correspondiente a la dirección de la trayectoria rP − pin
dn
Magnitud de desplazamiento normal
fQ
Función implícita superficie Q antes del posicionamiento sobre la superficie
P
75
f QRT
Función implícita superficie Q después del posicionamiento sobre la
superficie P
FP
Matriz (3×NF) de triangulación de la superficie P
I
Conjunto de puntos internos
M1
Matriz (3×3) de rotación de posicionamiento inicial
M2
Matriz (3×3) de rotación tangencial
N ∆p
Número de puntos pertenecientes a la triangulación de p
N BK
Largo del vector B k
nP
Normal de la superficie P en el punto de referencia rP
NP
Número total de puntos de la superficie P
nQ
Normal de la superficie Q en el punto de referencia rQ
NQ
Número total de puntos de la superficie Q
p
Punto cualquiera perteneciente a la matriz P
p′
Rotación inversa de un punto p cualquiera
pi
Vector (3×1) correspondiente a la columna i de la matriz P
pI
Punto de intersección entre la recta (r − pi )× nP = 0 y la superficie Q luego
de posicionarse sobre la superficie P
pin
Puntos internos de aproximación de la curva de intersección
pout
Puntos externos de aproximación de la curva de intersección
pP
Punto de referencia de la superficie P dado por la herramienta Stylus
P
Matriz (3×NP) con las coordenadas de los puntos p pertenecientes a la
superficie P
q
Punto cualquiera perteneciente a la matriz Q
qi
Vector (3×1) correspondiente a la columna i de la matriz Q
RT
qi
Vector (3×1) correspondiente al punto i de la superficie Q posicionada
sobre la superficie P
76
Q
Matriz (3×NQ) con las coordenadas de los puntos q pertenecientes a la
superficie Q
RB
Región de borde
rQ
Punto perteneciente a Q usado como referencia de la superficie Q
rP
Punto perteneciente a P usado como referencia de la superficie P
r1
Vector (3×1) de traslado inicial
r2
Vector (3×1) de traslado tangencial
r3
Vector (3×1) de desplazamiento normal
SB
Superficie de Bezier
∆p
Vector (1× N ∆p ) triangulación de p
77
8. BIBLIOGRAFIA
Adamson, A., Alexa, M. (2003). “Approximating and Intersecting Surfaces from Points”.
Eurographics Symposium on Geometry Processing, Aachen, Alemania.
Arenas, F, Masjuán, G, Villanueva, F. (2000), Trigonometría y Geometría Analítica,
Pontificia Universidad Católica de Chile, Santiago, Chile.
Arbogast, R. E., Colvin, J. M., Kelley, C. T., Pratt, G. (2007). “Custom prosthetics liner
manufacturing system and method”. United Stated Patent N° 7,162,322.
Carr, J. C. et al. (2001). “Reconstruction and representation of 3D objects with Radial
Basis Functions”. ACM SIGGRAPH, Los Angeles, USA.
Cheng, T. K., Vee Sin, P. L., Fye and T. K., Lin, L. S. (1998). “Automation of prosthetics
socket design and fabrication using Computer-Aided-Design/Computer-Aided-Engineering
and Rapid Prototyping techniques”. The First National Symposium of Prosthetics and
Orthotics, Singapur. pp 19-22.
Chui, K. L., Chiu, W. K., Yu, K. M. (2007). “Direct 5-axis tool-path generation from
point cloud input using 3D biarc fitting”. Robotics and Computer-Integrated
Manufacturing. 24(2), pp 270-286.
Elman, L., Zachmann, G. (2006). Geometric Data Structures for Computer Graphics.
Alemania: A K Peters, Ltda
Goldstein, M. S., Fleisig, R. V. (2006). “Weighted Least Squares for visualization of
scanned point clouds”. Computer Aided Design & Applications. 3(1-4), pp11-20.
Hoppe, H., DeRose, T., Duchamp, T., McDonald, J., Stuetzle, W. “Surface Reconstruction
from Unorganized Points”. Proceedings of the 19th annual conference on Computer
Graphics and Interactive Techniques
Isozaki, K., Hosoda, M., Masuda, T. and Morita, S. (2006). “CAD/CAM evaluation of the
fit of trans-tibial sockets for trans-tibial amputation stumps”. Journal of Medical and
Dental Sciences. 53(1), pp 51-56.
Klein, J., Zachmann, G. (2004). “Point cloud surfaces using geometric proximity graphs”.
Computer & Graphics. 28(6), pp 839-850.
Klein, J., Zachmann, G. (2005). “Interpolation search for point cloud intersection”.
WSCG International Conferences in Central Europe on Computer Graphics, Visualization
and Computer Vision.
78
Labayru, D. (2007). “Fabricación de Sockets de Protesis por mecanizado CNC”. Tesis de
maestría no publicada, Pontificia Universidad Católica de Chile, Santiago, Chile.
Lee, W. C., Zhang, M., Jia, X., Cheung, J. T. (2004). “Finite Element modeling of the
contact interface between trans-tibial residual limb and prosthetic socket”. Medical
Engineering & Physics. 26(8), pp 655-662.
Lemaire, E. D., Bexiga, P., Johnson, F., Solomonidis, S. E. and Paul, J. P. (1999).
“Validation of a quantitative method for defining CAD/CAM socket modifications”,
Prosthetics and Orthotics International. 23(1), pp 30-44.
McGarry, T. y McHugh, B. (2007). “Comparison of the results of foir users of a
contemporary CAD/CAM system”. Prosthetics and Orthotics International. 31(1), pp 2735.
Michael, John W. (1989). “Reflections on CAD/CAM in Prosthetics and Orthotics”,
Journal of Prosthetics and Orthotics. 1(3), pp 116.
Mortenson, M. E. (1985), Geometric Modeling (1ª Edición). USA: John Wiley & Sons,
Inc.
Oberg, K., Kofman, J., Karlsson, A., Lindstrom, B., Sigblad, G. (1989). “The CAPOD
System-A sandinavian CAD/CAM system for prosthetic sockets”. Journal of Prosthetics
and Orthotics. 1(3), pp 139.
Rogers, B., Bosker, G. W., Crawford, R. H., Faustini, M. C., Neptune, R. R., Walden, G.
and Gitter, A. J. (2007). “Advanced trans-tibial socket fabrication using selective laser
sintering”. Prosthetics and Orthotics International. 31(1), pp 88-100.
Steele, A. L. (1994). “A survey of clinical CAD/CAM use”. Journal of Prosthetics and
Orthotics. 6(2), pp 42.
Sun, W., Bradley, C., Zhang, Y. F., Loh, H.T. (2001). “Cloud Data modeling employing a
unified, non-redundant triangular mesh”. Computer-Aided Design. 33, pp 183-193.
Walsh, N. E., Lancaster, J. L., Faulkner, V. W, Rogers, W. E. (1989). “A computerized
system to manufacture prostheses for amputees in developing countries”. Journal of
Prosthetics and Orthotics. 1(3), pp 165.
Yu, Y. (1999). “Surface reconstruction from unorganized points using self-organizing
neural networks”. IEEE Visualization 99, Conference Proceedings.
79
9. ANEXOS
Anexo A. Superficies Geométricas Definidas
Superficie
Parámetros ingresados
por el usuario
Función implícita
Esfera
r
x2 + y2 + z2 = r 2
Elipsoide
a, b y c
x2 y2 z2
+
+
=1
a2 b2 c2
Paraboloide
a, b y z
x2 y2
+
=z
a2 b2
Toroide
ryR
(x
80
2
+ y2 + z2 + R2 − r 2
)
2
(
= 4R 2 x 2 + y 2
)
Anexo B. Cálculo matrices M1 y M2
El objetivo de la matriz M1 es hacer coincidir el vector n2 con el vector n1 . Esta
matriz se obtiene a través del siguiente desarrollo.
Z
n2
γ2
n1
γ1
Y
θ1
n1xy
θ2
n2xy
X
Figura 9-1: Vectores n1 y n2 y sus respectivos ángulos de azimuth (θ) y elevación (γ)
Cálculo de ángulos de azimuth y elevación para n1 y n2
tan θ i =
riy
rix
tan γ i =
riz
rix2 + riy2
Rotación de n2 en torno al eje Z para que ambas proyecciones coincidan
θ = θ1 − θ 2
81
⎡cos θ − sin θ 0⎤
n2′ = ⎢⎢ sin θ cos θ 0⎥⎥ ⋅ n2
⎢⎣ 0
0
1⎥⎦
Y
n2′ xy
n1xy
n2xy
X
Figura 9-2: Rotación de n2 en torno al eje Z
Cambio a sistema de referencia auxiliar
1
⎡ cos θ1 sin θ 1 0⎤
n′2 = ⎢⎢− sin θ1 cos θ1 0⎥⎥⋅0 n2′
⎢⎣ 0
0 1⎥⎦
82
1
Z
n ′2
Z
n1
1
Y
Y
θ1
1
X
X
Figura 9-3: Cambio sistema de referencia auxiliar
Rotación de 1 n′2 en torno a 1Y
1
⎡cos γ 0 − sin γ ⎤
n′2′ = ⎢⎢ 0 1
0 ⎥⎥⋅1 n2′
⎢⎣ sin γ 0 cos γ ⎥⎦
1
Z
1
n′2
1
γ2
n1
γ1
1
X
Figura 9-4: Rotación de 1n1 en torno a 1Y
83
Volver al sistema de referencia absoluto
0
⎡cos θ1 − sin θ1 0⎤
n2′′ = ⎢⎢ sin θ 1 cos θ1 0⎥⎥⋅1 n2′′
⎢⎣ 0
0
1⎥⎦
0
Z
n2′′ n1
0
Y
θ1
0
X
Figura 9-5: Cambio a sistema de referencia absoluto
Resumiendo las rotaciones sucesivas se tiene
⎡cos θ1 − sin θ1 0⎤ ⎡cos γ 0 − sin γ ⎤ ⎡ cos θ1 sin θ1 0⎤ ⎡cos θ − sin θ 0⎤
0 ⎥⎥ ⎢⎢− sin θ 1 cos θ 1 0⎥⎥ ⎢⎢ sin θ cos θ 0⎥⎥ ⋅ n2
n 2′′ = ⎢⎢ sin θ 1 cos θ 1 0⎥⎥ ⎢⎢ 0 1
⎢⎣ 0
0
1⎥
0 1⎥⎦ ⎢⎣ 0
0
1⎥ ⎢⎣ sin γ 0 cos γ ⎥⎦ ⎢⎣ 0
1
4442444
3⎦ 1
44
42444
3 14442444
3 144
42444
3⎦
D
C
B
84
A
Desarrollando las matrices A y B, se tiene
⎡ cos θ 1 sin θ1 0⎤ ⎡cos θ − sin θ 0⎤
B ⋅ A = ⎢⎢− sin θ1 cos θ1 0⎥⎥ ⋅ ⎢⎢ sin θ cos θ 0⎥⎥
⎢⎣ 0
0 1⎥⎦ ⎢⎣ 0
0
1⎥⎦
⎡ cos θ 1 cos θ + sin θ1 sin θ − cos θ1 sin θ + sin θ 1 cos θ 0⎤
B ⋅ A = ⎢⎢− sin θ1 cos θ + cos θ1 sin θ sin θ1 sin θ + cos θ 1 cos θ 0⎥⎥
⎢⎣
0
0
1⎥⎦
Aprovechando las siguientes identidades trigonométricas
sin (a ± b ) = sin a cos b ± cos a sin b
cos(a ± b ) = cos a cos b m sin a sin b
⎡ cos(θ1 − θ ) sin (θ1 − θ )
B ⋅ A = ⎢⎢sin (− θ1 + θ ) cos(θ 1 − θ )
⎢⎣
0
0
0⎤
0⎥⎥
1⎥⎦
si θ = θ1 − θ 2 , entonces
⎡ cos θ 2 sin θ 2 0⎤
B ⋅ A = ⎢⎢− sin θ 2 cos θ 2 0⎥⎥
⎢⎣ 0
0 1⎥⎦
M1
64444444444
47
44444444444
8
⎡cos θ1 − sin θ1 0⎤ ⎡cos γ 0 − sin γ ⎤ ⎡ cos θ 2 sin θ 2 0⎤
n2′′ = ⎢⎢ sin θ1 cos θ1 0⎥⎥ ⎢⎢ 0 1
0 ⎥⎥ ⎢⎢− sin θ 2 cos θ 2 0⎥⎥ ⋅ n2
⎢⎣ 0
0
1⎥ ⎢⎣ sin γ 0 cos γ ⎥⎦ ⎢⎣ 0
0 1⎥⎦
1
4442444
3⎦ 1
44
42444
3 14442444
3
D
C
B⋅ A
85
Volviendo al cálculo del punto 5.1.1, donde lo que se desea es hacer coincidir la normal
nQ con la normal n P , entonces se tiene que n1 = n P y n2 = nQ , por lo tanto,
⎡cos θ P − sin θ P 0⎤ ⎡cos γ 0 − sin γ ⎤ ⎡ cos θ Q sin θ Q 0⎤
0 ⎥⎥ ⎢⎢− sin θ Q cos θ Q 0⎥⎥ ⋅ nQ
n P = nQ′′ = ⎢⎢ sin θ P cos θ P 0⎥⎥ ⎢⎢ 0 1
⎢⎣ 0
0
1⎥⎦
0
1⎥⎦ ⎢⎣ sin γ 0 cos γ ⎥⎦ ⎢⎣ 0
⎡cos θ P − sin θ P 0⎤ ⎡cos γ 0 − sin γ ⎤ ⎡ cos θ Q sin θ Q 0⎤
0 ⎥⎥ ⎢⎢− sin θ Q cos θ Q 0⎥⎥
M 1 = ⎢⎢ sin θ P cos θ P 0⎥⎥ ⎢⎢ 0 1
⎢⎣ 0
0
1⎥⎦ ⎢⎣ sin γ 0 cos γ ⎥⎦ ⎢⎣ 0
0
1⎥⎦
La matriz M2 corresponde a la rotación de la superficie Q en torno a su normal.
Esta matriz se obtuvo a partir de las siguientes rotaciones: primero se gira toda la
superficie de modo que la normal coincida con el eje Z, luego se gira la superficie en torno
a este eje, finalmente se vuelve a girar la superficie de modo que la normal nQ′′ vuelva a
coincidir con n P .
Para hacer coincidir la normal nQ′′ con el eje Z aprovecharemos la matriz M1, que
nos permite hacer coincidir un vector normalizado n 2 con otro vector n1 . Según esta
definición
n1 = [0 0 1] →
θ1 = 0 y γ 1 =
n2 = nQ′′ = n P →
θ2 = θP y γ 2 = γ P
π
2
γ = π2 − γ P
nQ′′′ = M 1 ⋅ nQ′′
86
M1
644444444447
44444444448
⎡cos 0 − sin 0 0⎤ ⎡cos γ 0 − sin γ ⎤ ⎡ cos θ P sin θ P 0⎤
nQ′′′ = ⎢⎢ sin 0 cos 0 0⎥⎥ ⎢⎢ 0 1
0 ⎥⎥ ⎢⎢− sin θ P cos θ P 0⎥⎥ ⋅ nQ′′
⎢⎣ 0
0
1⎥⎦ ⎢⎣ sin γ 0 cos γ ⎥⎦ ⎢⎣ 0
0
1⎥⎦
⎡1 0 0⎤ ⎡cos(π2 − γ P ) 0 − sin (π2 − γ P )⎤ ⎡ cos θ P sin θ P 0⎤
⎥ ⎢− sin θ cos θ 0⎥ ⋅ n′′
0
1
0
nQ′′′ = ⎢⎢0 1 0⎥⎥ ⎢⎢
P
P
⎥⎢
⎥ Q
π
π
⎢⎣0 0 1⎥⎦ ⎢⎣ sin ( 2 − γ P ) 0 cos( 2 − γ P ) ⎥⎦ ⎢⎣ 0
0
1⎥⎦
⎡ sin γ P 0 − cos γ P ⎤ ⎡ cos θ P sin θ P 0⎤
1
0 ⎥⎥ ⎢⎢− sin θ P cos θ P 0⎥⎥ ⋅ nQ′′
nQ′′′ = ⎢⎢ 0
⎢⎣cos γ P 0 sin γ P ⎥⎦ ⎢⎣ 0
0
1⎥
1
4444444244444443⎦
M 2A
Rotación en torno al eje Z en un ángulo α
⎡cos α − sin α 0⎤
n = ⎢⎢ sin α cos α 0⎥⎥ ⋅ nQ′′′
⎢⎣ 0
0
1⎥
144
42444
3⎦
4
Q
M 2B
Ya rotada la normal, volvemos a hacer coincidir nQ4 con n P . Aprovechando nuevamente la
matriz M1, se tiene:
n1 = n P
→
θ1 = θ P y γ 1 = γ P
n 2 = nQ4 = [0 0 1]
→
θ 2 = 0 y γ 2 = π2
γ = γ P − π2
87
⎡cos θ P − sin θ P 0⎤ ⎡cos γ 0 − sin γ ⎤ ⎡ cos 0 sin 0 0⎤
0 ⎥⎥ ⎢⎢− sin 0 cos 0 0⎥⎥ ⋅ nQ4
n = ⎢⎢ sin θ P cos θ P 0⎥⎥ ⎢⎢ 0 1
⎢⎣ 0
0
1⎥⎦ ⎢⎣ sin γ 0 cos γ ⎥⎦ ⎢⎣ 0
0 1⎥⎦
5
Q
⎡cos θ P − sin θ P 0⎤ ⎡cos(γ P − π2 ) 0 − sin (γ P − π2 )⎤ ⎡1 0 0⎤
⎥ ⎢0 1 0 ⎥ ⋅ n 4
nQ5 = ⎢⎢ sin θ P cos θ P 0⎥⎥ ⎢⎢
0
1
0
⎥⎢
⎥ Q
π
π
⎢⎣ 0
0
1⎥⎦ ⎢⎣ sin (γ P − 2 ) 0 cos(γ P − 2 ) ⎥⎦ ⎢⎣0 0 1⎥⎦
⎡cos θ P − sin θ P 0⎤ ⎡ sin γ P 0 cos γ P ⎤
1
0 ⎥⎥ ⋅ nQ4
n = ⎢⎢ sin θ P cos θ P 0⎥⎥ ⎢⎢ 0
⎢⎣ 0
0
1⎥⎦ ⎢⎣' cos γ P 0 sin γ P ⎥⎦
144444442
44444443
5
Q
M 2C
Resumiendo todas las rotaciones que permiten rotar la superficie en torno a su
normal, se tiene,
nQ5 = M 2C ⋅ M 2 B ⋅ M 2 A ⋅ nQ′′′
siendo
⎡ sin γ P 0 − cos γ P ⎤ ⎡ cos θ P sin θ P 0⎤
M 2 A = ⎢⎢ 0
1
0 ⎥⎥ ⎢⎢− sin θ P cos θ P 0⎥⎥
⎢⎣cos γ P 0 sin γ P ⎥⎦ ⎢⎣ 0
0
1⎥⎦
⎡cos α − sin α 0⎤
M 2 B = ⎢⎢ sin α cos α 0⎥⎥
⎢⎣ 0
0
1⎥⎦
⎡cos θ P − sin θ P 0⎤ ⎡ sin γ P 0 cos γ P ⎤
1
0 ⎥⎥
M 2C = ⎢⎢ sin θ P cos θ P 0⎥⎥ ⎢⎢ 0
⎢⎣ 0
0
1⎥⎦ ⎢⎣' cos γ P 0 sin γ P ⎥⎦
88
Anexo C. Código programación función main
clc
clear all
close all
t=clock;
t1=clock
%% 1. Cargar Superficie 1
[NormalSup1,PointsSup1,PtoStySup1,pto_stylus1,Facets,fila_pto_central]...
=superficie1();
%% 2. Cargar Superficie 2
[NormalSup2,PointsSup2,PtoStySup2,pto_stylus2,file,dimensiones,R,T,...
PtosS2i]=superficie2(PointsSup1,NormalSup1,PtoStySup1(pto_stylus1,:));
%% 3. desplazar la superficie hacia adentro segun la direccion normal
ModuloTraslado=input('Modulo de Traslado: ');
[PointsSup2,PtoStySup2,T(:,3)] = ...
desplaz_segun_normal(PointsSup2,PtoStySup2,NormalSup2,ModuloTraslado);
plot3(PointsSup2(:,1),PointsSup2(:,2),PointsSup2(:,3),'g.','MarkerSize',2
);
hold on; xlabel('X'); ylabel('Y'); zlabel('Z');
plot3(PtoStySup2(pto_stylus2,1),PtoStySup2(pto_stylus2,2),...
PtoStySup2(pto_stylus2,3),'r*','DisplayName','Pto Traslado sup2');...
axis equal;
%% encontrar pto de interseccion
[filas_in,filas_out,filas_inin,filas_outout]=...
interseccion(PointsSup1,PtoStySup1,pto_stylus1,PointsSup2,Facets,...
fila_pto_central,dimensiones,R,T,NormalSup1)
size(filas_in)
size(filas_out)
%% encontrar los puntos internos
[puntos_int]=puntos_interior(PointsSup1,Facets,filas_out,filas_in,filas_i
nin);
%% desplazar puntos internos
[Points] = carga(PointsSup1,PointsSup2,puntos_int,NormalSup1);
%% Superficie Bezier
[PointsSup3,Bfilas_3in,Bfilas_inin,Bfilas_in,Bfilas_out,Bfilas_outout,...
Bfilas_3out]=...
puntos_bezier(Points,Facets,filas_in,filas_out,filas_inin,filas_outout);
89
puntos=[filas_outout;filas_out;filas_in;filas_inin];
Points2=carga(Points,PointsSup3,puntos,NormalSup1);
figure(14)
plot3(PointsSup1(:,1),PointsSup1(:,2),PointsSup1(:,3),'b.','MarkerSize',2
); hold on; axis equal
plot3(PointsSup2(:,1),PointsSup2(:,2),PointsSup2(:,3),'g.','MarkerSize',2
); hold on; axis equal
plot3(Points2(:,1),Points2(:,2),Points2(:,3),'r.','MarkerSize',2)
ploteo_malla(Points2,Facets,Bfilas_in,Bfilas_out,Bfilas_inin,Bfilas_outou
t,Bfilas_3in,Bfilas_3out)
tpo_total=etime(clock,t)
Points=Points2';
Facets=Facets';
nombre_archivo=input('nombre del archivo:','s')
save(nombre_archivo,'Points','Facets')
90
Descargar