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