Variables condicionales c. Usar variables de condición para controlar las relaciones de sincronización. Asignar un valor a una variable usando la función set

Desde el punto de vista matemático, la curva definida por los vértices de un polígono depende de una interpolación o aproximación que establece la relación entre la curva y el polígono. La base aquí es la elección de las funciones básicas. Como se señala en la Sección. 5-8, la base de Bernstein produce curvas de Bézier de la forma (5-62), pero tiene dos propiedades que limitan la flexibilidad de las curvas. Primero, el número de vértices de un polígono codifica el orden del polinomio. Por ejemplo, una curva cúbica debe estar definida por cuatro vértices y tres segmentos. Un polígono de seis puntos siempre genera una curva de quinto orden. La única forma de reducir el grado de una curva es reducir el número de vértices, y de aumentar el grado de una curva es aumentar su número.

La segunda limitación se deriva de la naturaleza global de la base Bernstein. Esto significa que la magnitud de las funciones de aproximación de la ecuación (5-63) es distinta de cero para todos los valores de los parámetros de la curva. Cualquier punto de una curva de Bézier depende de todos los vértices que la definen, por lo que cambiar cualquier vértice afecta a toda la curva. No son posibles influencias locales en la curva.

Por ejemplo, dado que la pendiente de los extremos de una curva de Bézier está dada por los lados correspondientes del polígono, puedes mover el vértice medio de un polígono de cinco puntos sin cambiar la dirección en los extremos. Sin embargo, debido a la naturaleza global de la base de Bernstein, la forma de toda la curva cambia. Ausencia corrección local puede resultar decisivo en algunos problemas aplicados.

Existe una base no global llamada base B-spline, que incluye la base de Bernstein como caso especial. Los B-splines no son globales, ya que cada vértice tiene su propio asociado. función base. Por tanto, la influencia de cada vértice en la curva aparece sólo para aquellos valores de parámetros donde la función base correspondiente no es igual a cero. La base B-spline también le permite cambiar el orden de las funciones base y por lo tanto de toda la curva sin cambiar el número de vértices. En el trabajo se propuso la teoría de B-splines. Cox y de Boer derivaron de forma independiente una definición recursiva para la solución numérica. Gordon y Riesenfeld definieron curvas utilizando una base B-spline.

Definamos la curva en función del parámetro, entonces el B-spline tiene la forma

, , , (5-83)

donde está el vértice del polígono, a son las funciones base B-spline normalizadas.

Para la función de base normalizada de orden (grado), las funciones de base están determinadas por las fórmulas recursivas de Cox-de Boer:

(5-84a)

Las cantidades son los elementos del vector nodal que satisfacen la relación. El parámetro varía de a a lo largo de la curva. Se cree eso.

Formalmente, un B-spline se define como un polinomio spline de orden (grado), ya que satisface las siguientes condiciones:

La función es un polinomio de grado en cada intervalo.

Y sus derivadas de orden son continuas a lo largo de toda la curva.

Por ejemplo, un B-spline de cuarto orden es una curva cúbica por partes.

Del hecho de que el B-spline está especificado por la base del B-spline, se siguen inmediatamente varias propiedades más:

Suma de funciones básicas B-spline para cualquier valor de parámetro (ver trabajos y)

Cada función básica es positiva o igual a cero para todos los valores del parámetro, es decir

Excepto , todas las funciones básicas tienen exactamente un máximo.

El orden máximo de una curva es igual al número de vértices del polígono que la define.

La curva tiene la propiedad de reducir la variación. Una curva intersecta cualquier línea con no más frecuencia que su polígono que la define.

La forma general de la curva sigue la del polígono que la define.

Para aplicar cualquier transformación afín a una curva, debes aplicarla a los vértices del polígono que la define.

La curva se encuentra dentro del casco convexo del polígono que lo define.

La última propiedad del B-spline es más fuerte que la de las curvas de Bézier. En un B-spline de orden (grado), los puntos de la curva se encuentran dentro del casco convexo de los puntos vecinos. Por lo tanto, todos los puntos del B-spline deben estar dentro de la unión de todos los cascos convexos de vértices sucesivos. En la figura. 5-32 proporciona una ilustración de diferentes significados, con cascos convexos resaltados en gris. En particular, cuando el casco convexo coincide con el polígono, es decir, el B-spline es el polígono mismo.

Usando la propiedad de la cáscara convexa, es fácil demostrar que si todos los puntos de un polígono son colineales, entonces el B-spline correspondiente es una línea recta para todos. Además, si hay vértices colineales en un polígono definidor no colineal, entonces las secciones rectas de la curva (si las hay) comienzan y terminan al menos en un segmento desde el principio y el final de la serie de vértices colineales. Si la secuencia de vértices colineales se encuentra completamente dentro de un polígono no colineal, el número de secciones colineales de la curva es al menos. Si esta secuencia está ubicada al final de un polígono no colineal, entonces el número de secciones colineales de la curva es al menos. La ilustración se muestra en la Fig. 5-33.

Si hay vértices coincidentes, es decir , entonces el casco convexo de los vértices desde hasta es el vértice mismo. De ello se deduce que el B-spline debe pasar por el vértice. En la figura. La Figura 5-34 muestra un ejemplo de dicho punto para . Además, dado que el B-spline es continuo en todas partes, también lo es en .

Finalmente, observe que la propiedad de continuidad transforma suavemente el B-spline en segmentos de línea anidados, como se muestra en la Fig. 5-35.

Las ecuaciones (5-84) indican que la elección del vector de nudo tiene un impacto significativo en las funciones básicas del B-spline y, por tanto, en el propio B-spline. El único requisito para el vector nodal es: , es decir, que sea una secuencia monótonamente creciente números reales. Comúnmente se utilizan tres tipos de vectores nodales: uniforme, uniforme abierto (o abierto) y no uniforme.

Los valores nodales individuales de un vector nodal uniforme están igualmente espaciados, p.

En particular, los vectores de nodos uniformes suelen comenzar en cero y aumentar en 1 hasta algunos valor máximo o normalizado a un rango entre 0 y 1 mediante valores decimales iguales, p.e.

Arroz. 5-32 Propiedades de la carcasa convexa de B-splines.

Arroz. 5-33 Propiedades de casco convexo de B-splines para segmentos curvos colineales. (a) Vértices internos del polígono definitorio; (b) los vértices al final del polígono definitorio.

Para un orden dado, los vectores nodales uniformes generan periódicos. funciones uniformes base para la cual

Es decir, cada función base es una transferencia paralela de otra función, ver figura. 5-36.

Para un vector nodal uniforme abierto, el número de valores nodales idénticos en los extremos es igual al orden de la función base B-spline. Los valores de los nodos internos están distribuidos uniformemente.

Arroz. 5-34 Casco convexo para múltiples vértices.

Arroz. 5-35 Transformación suave en segmentos rectos.

Arroz. 5-36 Funciones básicas de un B-spline uniforme periódico, , , .

Algunos ejemplos con incrementos enteros:

,

o para incrementos normalizados

Arroz. 5-37 Funciones básicas de un B-spline uniforme abierto, , , .

Formalmente, un vector nodal uniforme abierto se define como

Las funciones base resultantes se comportan de forma muy parecida a las curvas de Bézier. De hecho, si el número de vértices de un polígono es igual al orden de la base B-spline y se utiliza un vector de nudo uniforme abierto, la base B-spline se reduce a una base de Bernstein. Por tanto, el B-spline es una curva de Bézier. En este caso, el vector de nodos es simplemente ceros seguidos de unos. Por ejemplo, para cuatro vértices el vector de nodo uniforme abierto es:

Como resultado, tenemos una curva de Bézier cúbica: B-spline. Las funciones de base correspondientes se muestran en la Fig. 5-27b. En la figura. La Figura 5-37 proporciona otro ejemplo de funciones de base abierta.

Los vectores nodales no uniformes se caracterizan por el hecho de que sus valores nodales internos se encuentran a diferentes distancias entre sí y/o están combinados.

Los vectores pueden ser periódicos o abiertos, por ejemplo.

,

En la figura. La figura 5.38b muestra ejemplos de funciones de orden de base B-spline no uniformes. Los vectores nodales correspondientes tienen extremos combinados. valores idénticos. A modo de comparación, en la Fig. La figura 5-38a muestra las funciones base para un vector uniforme abierto. Tenga en cuenta que en la Fig. 5-38a yb las funciones son simétricas, y además para bases no uniformes la simetría se rompe: 5-38c-e. Además, cuando se combinan los valores nodales, una de las funciones tiene un torcedura. En la figura. 5-38d ye se puede ver que la posición de la ruptura depende de la ubicación del valor combinado en el vector nodal.

La fórmula de Cox-de Boer (5-84) para calcular las funciones base de un B-spline es recursiva, por lo que la función de orden depende de las funciones base de orden inferior hasta 1. Sea dada la función base. Entonces esta dependencia se puede expresar como un triángulo.

.

Entonces la relación inversa, es decir la influencia de una función básica de primer orden sobre funciones de órdenes superiores es:

.

Consideremos un ejemplo de cálculo de funciones básicas.

Ejemplo 5-9 Cálculo de funciones de base periódica

Encuentre cuatro funciones básicas, , de tercer orden. Número en en este caso es igual a 4. La dependencia de las funciones básicas se muestra en el siguiente diagrama:

Arroz. 5-38 Funciones de base no uniforme para , .

Dependencias inversas para:

.

¿Cuál es el rango del vector nodal necesario para este cálculo? De la ecuación (5-84) se deduce que el cálculo requiere cantidades nodales y , y para - y , es decir, se requieren valores de 0 a.

Por tanto, el número de valores de nodo es igual a. Vector nodal para funciones periódicas dadas: Dónde

; ; , ,

;

; ,

; ; , ,

;

;

; ,

; ; ,

; ;

; ,

; ; , ,

;

;

; , ,

; , .

.

Rango de parámetros. Usando la ecuación (5-84) y los diagramas anteriores, obtenemos las funciones base para varios valores de parámetros:

El signo en la definición lleva al hecho de que para todas las funciones es igual a 0.

Los resultados se muestran en la Fig. 5-36 y 5-39. Tenga en cuenta que cada una de las funciones base es una curva parabólica (cuadrática) por partes. Los segmentos parabólicos en los intervalos , , se combinan y forman las funciones base. Cada función es un acarreo paralelo de la otra. El ejemplo 5-9 muestra cómo construir una base a partir de funciones de base de orden inferior. En la figura. 5-39a muestra las funciones de primer orden del ejemplo 5-9, en la Fig. 5-39b - segundo orden, y en la Fig. 5-39s - tercer orden. Prestemos atención a cómo se expande el rango de valores de funciones distintos de cero a medida que aumenta su orden. Se dice que la función base proporciona soporte en el intervalo de hasta . Mirando atentamente la Fig. 5-36, puedes ver

propiedad importante

funciones de base uniforme. De la ecuación (5-85) se sabe que para cualquier valor del parámetro. De ello se deduce que todo el conjunto de funciones de base periódica para está definido sólo en el rango . Más allá de sus fronteras. Para un vector nodal uniforme que comienza en 0 con incrementos enteros, el rango de parámetros adecuado es: . Para vectores más generales o normalizados, reducir el rango de parámetros corresponde a perder el rango de valores de nodos en cada extremo del vector.

Arroz. 5-39 Construcción de funciones de base periódica. (A) ; (b) ; (do).

Ejemplo 5-10 Cálculo de una base uniforme abierta

Encuentre cuatro funciones básicas, , de tercer orden. Recuerde que un vector nodal formalmente abierto con intervalos enteros entre valores nodales internos se define como Rango de cambio de parámetros, es decir, de 0 al valor nodal máximo. Como en el ejemplo 5-9, el número de valores de nodo es.

Por tanto, el número de valores de nodo es igual a. Vector nodal para funciones periódicas dadas: Si tomamos los valores nodales, entonces el vector para

este ejemplo

; ;

; ; , ,

; ;

; , .

tomará la forma

Comparando los resultados del Ejemplo 5-10 (Figura 5-40) y 5-9 (Figura 5-39), vemos que difieren significativamente para vectores nodales uniformes periódicos y abiertos. En particular, observamos que para vectores nodales uniformes abiertos, en todo el rango de variación del parámetro, conjunto completo funciones básicas; aquellos. para todos . Para un vector periódico, el rango del parámetro disminuye.

Arroz. 5-40 Construcción de funciones de base abierta. (A) ; (b) ; (Con) .

Ejemplo 5-11 Cálculo de funciones de base no uniformes

Encuentre cinco funciones básicas de tercer orden, con un vector nodal que contenga un valor nodal interno repetido. De las ecuaciones (5-84) y diagramas de dependencia.

; ;

En particular, como consecuencia de repetir el valor del nodo, para todos.

; ; , ,

;

; , .

El resultado se muestra en la figura 5-38d.

Tenga en cuenta que para todos los valores tenemos . Por ejemplo, para

Lo mismo para

Arroz. 5-41 Dependencia de la forma B-spline de su orden.

De lo anterior queda claro qué influencia tiene la elección del vector nodal en la forma de las funciones básicas del B-spline y, en consecuencia, en la forma del B-spline.

La flexibilidad de la base B-spline le permite influir en la forma de la curva de diferentes maneras:

Cambiando el tipo de vector nodal y base: uniforme periódico, uniforme abierto y no uniforme.

Cambiar el orden de las funciones básicas.

Cambiando el número y ubicación de los vértices del polígono definitorio.

Usando vértices repetidos.

Usar valores de nodo repetidos en vectores de nodos.

Consideremos estos métodos primero para B-splines abiertos, luego para B-splines periódicos uniformes y no uniformes.

El B-spline abierto tiene muchas propiedades similares a las curvas de Bézier. Como ya se señaló, si el orden del B-spline es igual al número de vértices del polígono que lo define, entonces la base del B-spline se reduce a la base de Bernstein y el B-spline mismo se convierte en una curva de Bézier. Para un B-spline abierto de cualquier orden, el primer y último punto de la curva coinciden con los vértices correspondientes del polígono. Además, la pendiente de la curva en el primer y último vértice del polígono es igual a la pendiente de los lados correspondientes del polígono.

En la figura. La Figura 5-41 muestra tres B-splines abiertos orden diferente, definido por un conjunto de cuatro vértices. Una curva de cuarto orden es una curva de Bézier: un segmento polinomial cúbico. Una curva de tercer orden consta de dos segmentos parabólicos que se unen en el centro del segundo segmento con continuidad. La curva de segundo orden coincide con el polígono definitorio. Consta de tres segmentos de línea que se conectan en el segundo y tercer vértice con continuidad. El ángulo de inclinación en los extremos, dado por la inclinación de los lados del polígono, es el mismo para las tres curvas.

Arroz. 5-42 La influencia de la multiplicidad de vértices en la forma del B-spline.

Tenga en cuenta también que a medida que aumenta el orden de la curva, se parece cada vez menos al polígono original y se vuelve más suave.

En la figura. La Figura 5-42 muestra el efecto de repetir o coincidir vértices. Todos los B-splines tienen orden. La curva inferior está definida por cuatro vértices con un vector de nodo. La curva del medio tiene cinco vértices definitorios, dos de los cuales se repiten en el segundo vértice del polígono. Vector nodal - . La curva superior está definida por seis vértices y tres se repiten en . Vector nodal - . Los polígonos correspondientes a las tres curvas son respectivamente: ; Y .

La curva inferior consta de un solo segmento cúbico. La curva del medio consta de dos segmentos conectados entre y . La curva superior consta de tres segmentos: el primero desde hasta, el segundo desde hasta el medio entre y, el tercero desde este punto hasta. Prestemos atención al hecho de que a medida que aumenta la multiplicidad de vértices, la curva se acerca cada vez más a . Cuando se alcanza la multiplicidad, se produce un ángulo agudo de acuerdo con la propiedad de casco convexo de los B-splines. Tras un estudio cuidadoso de la Fig. 5-42 se puede ver que hay una sección lineal a ambos lados del vértice múltiple.

A pesar de la presencia de ángulos, se conserva la diferenciabilidad de la curva. A primera vista, esto puede parecer una contradicción, pero la torcedura está determinada por el vector tangente cero, lo que no excluye la continuidad de su cambio. Posibilidad de inclusión esquinas afiladas y se rompe en curvas continuamente diferenciables es una propiedad importante de los B-splines.

Finalmente, observe que todas las curvas tienen la misma pendiente en los extremos.

En la figura. La Figura 5-43 muestra tres B-splines de cuarto orden. Cada polígono definitorio consta de ocho vértices. Las curvas se diferencian en que el punto se mueve hacia y . Mover un punto afecta a la curva sólo localmente: sólo cambian los segmentos correspondientes a los segmentos , y .

Arroz. 5-43 Corrección B-spline local.

En general, sólo se ven afectados los segmentos alrededor del punto desplazado.

Para ilustrarlo, consideremos un ejemplo.

Ejemplo 5-12 Cálculo de B-Spline abierto

Considere el polígono del ejemplo 5-7: , , , . Encuentre el B-spline de segundo y cuarto orden. Para vector de nodo abierto

,

Dónde , , …, . El parámetro varía de 0 a 3. La curva consta de tres segmentos lineales. Para la función base tienen la forma:

; ; , ,

; ; , .

Para cada uno de estos intervalos

En cada caso, el resultado es una ecuación de la línea recta para el borde del polígono, es decir la curva coincide con el polígono.

El último punto de la curva requiere especial atención. Como el intervalo de la ecuación (5-84a) está abierto a la derecha, todas las funciones de base en son iguales a cero. Por lo tanto, el último punto del polígono no se encuentra formalmente en la curva. De hecho, este no es el caso. Consideremos dónde - infinitamente pequeño valor. Si tiende a cero, entonces en el límite coinciden los últimos puntos de la curva y el polígono. En la práctica, o el último punto se añade explícitamente a la descripción de la curva, o .

Porque el orden de la curva coincide con el número de vértices del polígono que la define, por lo que el B-spline se reduce a una curva de Bézier. Vector nodal con . Las funciones básicas son:

; ; , ,

; ;

; ;

De la ecuación (5-83) obtenemos el B-spline paramétrico

Entonces, cuando

Comparando con el ejemplo 5-7, vemos que los resultados son los mismos. La curva resultante se muestra en la Fig. 5-28.

Arroz. 5-44 Dependencia de la forma de un B-spline periódico de su orden.

Ahora tratemos con B-splines periódicos. En la figura. La Figura 5-44 muestra tres B-splines periódicos de diferentes órdenes. Todas las curvas están definidas por los mismos vértices que para los B-splines abiertos en la Fig. 5-41. Para el B-spline, vuelve a coincidir con el polígono que lo define. Tenga en cuenta, sin embargo, que para un spline periódico el primer y el último punto de la curva no coinciden con el primero y el último. últimos puntos polígono. La pendiente en el primer y último punto también puede ser diferente de la pendiente de los lados correspondientes del polígono. Para un B-spline, comienza en la mitad del primer borde y termina en la mitad del último, como lo indican las flechas. Esto se debe a la reducción en el rango de parámetros para las funciones periódicas de base B-spline. Para un vector nodal periódico - con rango de parámetros. Para un vector nodal periódico - con rango de parámetros. Para un vector nodal periódico, con rango de parámetros.

Comparación de los resultados obtenidos y los resultados para los vectores de nodos abiertos en la Fig. La Figura 5-41 muestra que se puede definir una curva en todo el rango del parámetro especificando múltiplos de los valores nodales en los extremos de los vectores. En este caso, la curva se extiende hacia los extremos del polígono.

En este caso, la curva de cuarto orden nuevamente consta de un solo segmento cúbico; curva de tercer orden: formada por dos segmentos parabólicos conectados en el medio del segundo borde con continuidad; curva de segundo orden: de tres segmentos lineales conectados en el segundo y tercer vértice con continuidad. Aumentar nuevamente el orden suaviza la curva, pero al mismo tiempo la acorta.

Arroz. La Figura 5-45 muestra que el efecto de múltiples vértices es el mismo para B-splines periódicos y abiertos. El área alrededor del punto se muestra con más detalle.

Arroz. 5-45 La influencia de la multiplicidad de vértices en la forma de un B-spline periódico.

Ejemplo 5-13 Cálculo de un B-spline periódico

Consideremos nuevamente el polígono de la Fig.

5-44. Los vértices del polígono son , , , . Encuentre un B-spline periódico de cuarto orden dado por este polígono.

En el rango, el vector nodal para funciones de base periódica es. Para este rango, las funciones básicas de primer orden (consulte la ecuación (5-84a)) son:

; ; , ,

; ;

; , ,

;

.

,

.

De la ecuación (5-84b) obtenemos funciones básicas de orden superior:

El punto en el B-spline tiene la forma

La curva completa se muestra en la Fig. 5-44.

Los B-splines periódicos son muy útiles para construir curvas cerradas. En la figura. La figura 5-46a muestra un B-spline periódico de cuarto orden construido para un polígono cerrado.

El primer vértice coincide con el último. El B-spline no está cerrado debido al rango limitado del parámetro. Aquí hay un vector nodal uniforme periódico: con rango de parámetros.

En la figura. 5-47 un vértice del polígono se mueve a otro lugar. Su efecto se extiende a los segmentos de curva correspondientes a los bordes del polígono a cada lado del punto desplazado. En la figura. La Figura 5-48 muestra el efecto superior múltiple. Los alrededores se muestran con más detalle. Nuevamente, observe que su influencia también se extiende solo a los segmentos de curva a ambos lados del vértice múltiple.

Ahora veamos los B-splines no uniformes. En la figura. 5-49, la curva cambia bajo la influencia de múltiples valores nodales internos.

Arroz. 5-46 B-spline periódico cerrado. (a) definir el polígono; (b) es el polígono definitorio.

Arroz. 5-47 Cambiar la forma de un B-spline después de mover un vértice de un polígono.

La curva superior de tercer orden se calcula para el vector nodal abierto. Las funciones base para esta curva se muestran en la Fig. 5-38a. La curva inferior de tercer orden se construye con un vector nodal no uniforme. Sus funciones básicas se muestran en la Fig. 5-38d.

Arroz. 5-48 La influencia de múltiples vértices en la forma de un B-spline periódico cerrado.

La misma curva se obtiene con un vector nodal no uniforme y funciones de base en la Fig. 5-38e.

De la Fig. 5-49 muestra que múltiples valores nodales internos generan una ruptura en el vértice. Un valor múltiple produce una arista de longitud cero, por lo que se reduce el rango de soporte para funciones básicas. Además, múltiples valores de nodos internos, a diferencia de múltiples vértices de un polígono, reducen la diferenciabilidad de la función base a , donde es igual al múltiplo del valor del nodo interno. La curva localmente desigual en la Fig. 5-49 continua en la vecindad de , lo que da lugar a la aparición de un ángulo.

Abra B-splines no uniformes de tercer orden en la Fig. 5-50 se construyen utilizando un vector nodal con valores internos proporcionales a las longitudes de los bordes entre los vértices del polígono. El vector de nodo tiene la forma

, ,

, , (5-86)

Dónde . Para vértices ubicados a la misma distancia entre sí, el vector de nodo tiene valores enteros distribuidos uniformemente, es decir el vector es abierto y uniforme. El trabajo propone un método similar que permite obtener valores nodales internos individuales.

Arroz. 5-49 B-splines no uniformes, . (A) ; (b) .

Arroz. 5-50 Comparación de B-splines abiertos no uniformes: (a) vector nodal uniforme; (b) un vector nodal no uniforme proporcional a las longitudes de las cuerdas; (c) un vector nodal no uniforme proporcional a las longitudes de las cuerdas, con un doble vértice en .

A modo de comparación, se muestra una curva con un vector uniforme abierto, así como una curva con un par de vértices coincidentes.

De ello se deduce que los B-splines no uniformes no difieren mucho de los uniformes con un pequeño cambio en la distancia relativa entre los vértices. Veamos un ejemplo.

Ejemplo 5-14 B-spline desigual

Encuentre un B-spline abierto de tercer orden definido por los puntos , , , utilizando un vector no uniforme con valores nodales proporcionales a las longitudes de los bordes del polígono.

Primero encontremos las longitudes de los acordes.

Su longitud total

De la ecuación (5-86) obtenemos los valores nodales internos

.

El vector de nodo tiene la forma

Dónde , , …, . Rango de parámetros.

La curva consta de tres segmentos parabólicos.

; ; , ,

; ;

; , .

Las funciones base para son Funciones básicas para

:, uno menos que el número de vértices. Tenga en cuenta que la ecuación (5-87) contiene sólo: y son iguales a cero. Con esta propiedad, puede ahorrar significativamente los cálculos. En las curvas, cada función base es cúbica por partes, la primera derivada es parabólica por partes y la segunda derivada es lineal por partes. La tercera derivada es discontinua y consta de varias constantes. Cualquier dibujo más o menos complejo consta no sólo de segmentos de líneas rectas, círculos y sus arcos, sino también de un conjunto de líneas curvas. Es conveniente construir curvas suaves utilizando el método de suavizado de curvas B-spline. Un B-spline es una curva suave o, más precisamente, una curva con derivadas superiores continuas hasta la enésima, donde n es el orden del spline. Tenga en cuenta que una línea compuesta de B-splines no pasará exactamente por puntos dados

. Se hace una curva similar a partir de arcos de polinomios de tercer grado, ya que dicho polinomio proporciona la continuidad necesaria. La línea se construye mediante un procedimiento iterativo. Consideremos la construcción de un spline cúbico. Nos dan dos puntos vecinos a través de los cuales trazamos un polinomio cúbico, pero el polinomio tiene 4 coeficientes, por lo tanto necesitamos dos más condiciones adicionales

La suavidad la dicta la física y, a menudo, existe un equilibrio entre suavidad y precisión. Por ejemplo, la dinámica de fluidos se ocupa de superficies que se describen mediante ecuaciones de cuarto grado (un orden tan alto es necesario para aumentar la suavidad de varios tipos de dispositivos físicos calculados utilizando estas ecuaciones y así evitar vórtices). Pero a medida que aumenta el orden (es decir, la suavidad) de la spline, la precisión disminuye.

Consideremos. Sea t el parámetro por el que corremos desde el punto P i al punto P i+1. En t = 0 estamos en el punto P i, en t = 1 en el punto P i+1. Si 0< t < 1, то мы находимся между P i и P i+1 .

Esta recta en cada punto tiene un sistema:


x(t) = ((a 3 t + a 2)t + a 1)t + a 0, para 0<= t <= 1

y(t) = ((b 3 t + b 2)t + b 1)t + b 0 , para 0<= t <= 1 a 3 = (-x i-1 + 3x i - 3x i+1 + x i+2)/6

A 2 = (x i-1 - 2x i + x i+1)/2

A 1 = (-x i-1 + x i+1)/2

A 0 = (x i-1 + 4x i + x i+1)/6

Los puntos b 3 - b 0 se pintan de la misma manera, pero en lugar de x, se sustituye y. Entre P i y P i+1 los puntos a y b no cambian. Si especifica el primer punto después del último punto, el sistema cerrará el contorno.

Ventajas de B-spline: los coeficientes son constantes entre puntos; un cambio local no implica recalcular todo el spline. Desventajas: pueden surgir problemas al aproximar una recta que tiene discontinuidades en las segundas derivadas (por ejemplo, conjugar una recta y un arco circular); Desde un punto de vista estético, no siempre son aceptables, ya que la curvatura de la superficie construida mediante splines a veces cambia de manera desigual, lo que conduce a distorsiones (por ejemplo, distorsiones extrañas de los objetos reflejados en la carrocería de un automóvil).

Consecuencias

Suavizado con B-splines

La representación matemática de un cuerpo compuesto por formas geométricas simples (esferas, cilindros o conos) no resulta difícil. Pero muy a menudo éste no es el caso; Las carrocerías de los automóviles, las superficies de los aviones, los fuselajes y mucho más no son tan fáciles de describir. El procedimiento habitualmente utilizado en estos casos suele ser el siguiente:

  • la superficie está cubierta por dos grupos imaginarios de líneas; el primero va en dirección longitudinal, el segundo es transversal al primero. Esta cuadrícula de líneas define un conjunto de celdas, cada una de las cuales (en el caso de una superficie lisa) estará delimitada por cuatro curvas suaves;
  • las coordenadas de los nodos de esta cuadrícula imaginaria se miden sobre el modelo o sobre un conjunto de dibujos de secciones transversales de la superficie;
  • Usando interpolación (promediado), estos dos grupos de líneas que forman una cuadrícula se describen matemáticamente.

Puedes construir curvas y superficies bastante suaves usando polinomios. Supongamos que queremos construir una superficie en forma de gráfica de la función z = z(x, y). La recta y = const en esta superficie estará representada por la recta z = z(x), pasará por una secuencia de puntos (x 0, z 0), ..., (xi, z i), ... , (x n, z n) con x 0< ... < x i < ... < x n . Наша цель — провести через эти точки составную кривую f(x), имеющую следующие свойства:

  • en cada subintervalo x i-1<= x <= x i , i = 1, 2, ..., n функция f(x) является кубическим полиномом;
  • sus derivadas primera y segunda son continuas en los nodos.

La curva suave resultante se llama spline cúbica. El término "spline" surgió por analogía: es el nombre de una herramienta de dibujo: una regla de metal delgada que se puede doblar para pasar a través de puntos específicos. Físicamente, dicha curva minimiza la energía de las tensiones internas. Matemáticamente, tiene la curvatura cuadrática media mínima, es decir, es la más suave. Los splines tienen muchas aplicaciones en el diseño de formas curvas. Sin embargo, también tienen algunas limitaciones:

  • un cambio local implica recalcular todo el spline;
  • pueden surgir problemas al aproximar una línea recta que tiene discontinuidades en sus segundas derivadas (por ejemplo, la unión de una línea recta y un arco circular);
  • Desde un punto de vista estético, no siempre son aceptables, ya que la curvatura de la superficie construida mediante splines a veces cambia de manera desigual, lo que conduce a distorsiones (por ejemplo, distorsiones extrañas de los objetos reflejados en la carrocería de un automóvil).

La primera limitación se puede resolver utilizando un B-spline. La forma general de la curva obtenida en este caso se muestra en.

En esta figura, la spline se extiende desde sus puntos finales x i-4, x i mediante líneas rectas que corren a lo largo del eje x. El resultado es un spline cúbico en cualquier número de segmentos, pero no es cero sólo en cuatro de ellos. Esta función se denomina B-spline (o spline fundamental) de cuarto orden (o tercer grado). Dicen que tiene un soporte mínimo (el soporte es el número de segmentos en los que el spline es diferente de cero).

Tenga en cuenta que un B-spline cúbico está completamente determinado por el conjunto de nodos en los que está definido y sólo por un valor dado z. De manera más general, un B-spline M mi (x) de orden m (o grado m - 1) en un conjunto dado de nodos es igual a cero en todas partes excepto en m segmentos consecutivos x i-m< x < x i . Опять-таки M mi (x) определяется множеством узлов и одной величиной z. Принято исключать последнюю степень свободы и фиксировать амплитуду B-сплайна некоторым стандартным образом.

A menudo es conveniente para los cálculos utilizar un B-spline normalizado N mi (x), relacionado con M mi (x) por la relación N mi (x) = (x i - x i-m)M mi (x).

Cualquier spline de orden m en un conjunto de nodos x 0 , x 1 , ..., x n se puede expresar como una combinación lineal de B-splines definidos en el mismo conjunto de nodos, extendido por (m - 1) nodos adicionales en cada extremo del intervalo, que puede elegirse arbitrariamente: x -m+1, x -m+2, ..., x -1 y x n+1, ..., x n+m-1. Es posible construir m + n - 1 B-splines consecutivos en un conjunto extendido de nudos, cada uno de los cuales es distinto de cero en m segmentos consecutivos. Por tanto podemos escribir:
j (x) = S c i * M mi (x),
donde j (x) es cualquier spline de grado (m - 1) en el conjunto original de nodos y M mi (x) es un B-spline en el conjunto extendido de nodos, distinto de cero para x i-m< x < x i ; c i суть числовые коэффициенты; суммирование ведется по i = 1, ..., m + n - 1.

Si hay muchos vectores r 0 , r 1 , ..., r n , entonces puedes usarlos: r (u) = S r i * N 4, i+1 (u) (la suma se realiza sobre i = 0, ...,n). Dado que hay (n + 1) coeficientes vectoriales, se necesita un conjunto de (n + 1) B-splines. Última fórmula para 0<= u <= n - 2 является уравнением кривой, образованной кубическими B-сплайнами.

Propiedades

Algunas propiedades simples se derivan de la identidad S N 4, i+1 = 1, 0<= u <= n - 2, i = 0..n. При u = 0 следует: r(0) = N 42 (0)(r 1 - r 0). Из этого следует, что если r 0 , r 1 , .., r n — вершины некоторой замкнутой ломанной, то кривая, построенная на основе B-сплайна, начинается в r 0 и ее касательная в этой точке имеет направление (r 1 - r 0). Аналогичное утверждение верно и для другого конца. Главное преимущество этого сплайна заключается в том, что изменение одной из вершин влечет за собой изменение только четырех отрезков кривой. Далее, мы также можем построить кривую, аппроксимирующую ломанную с любым желаемым числом сторон. Отрезок сплайна всегда лежит в выпуклой оболочке:

Una consecuencia importante de esta cáscara convexa es su degeneración en una línea recta; si 4 vértices consecutivos de una línea discontinua son colineales, entonces el segmento correspondiente de la curva debe ser rectilíneo.

Hay 2 datos más útiles:

  • la curva pasa cerca del punto medio de cada lado, a excepción del primer y último punto;
  • para k = 2, ..., n - 2 la curva pasa por los puntos: 1/6r k-1 + 2/3r k + 1/6r k+1 = 2/3r k + 1/3(1/2 (r k-1 + r k+1))

Estos puntos, como se muestra en , se encuentran a 1/3 de la distancia desde r k en la línea recta que conecta r k con el centro del segmento entre r k-1 y r k+1.

- (del inglés spline, de spline un patrón flexible, una tira de metal utilizada para dibujar líneas curvas) una función cuyo dominio de definición se divide en un número finito de segmentos, en cada uno de los cuales el spline coincide con un cierto .. ...Wikipedia

Sustantivo, número de sinónimos: 1 función (49) Diccionario de sinónimos ASIS. V.N. Trishin. 2013… Diccionario de sinónimos

Función spline- función suave por partes utilizada para alinear series temporales. Aplicación de S. f. en lugar de las funciones de tendencia habituales, es eficaz cuando la tendencia y dirección de la serie cambia dentro del período analizado. S.f. ayuda... ... Diccionario económico y matemático.

ranura- (Spline) Una curva matemática que conecta suavemente puntos individuales. Se utiliza para representar los contornos de los personajes [borde de la imagen del personaje]. Véase también Curvas de Bézier [método de descripción de curvas vectoriales]... Terminología de fuentes

El spline hermitiano cúbico es un spline construido a partir de polinomios cúbicos utilizando la interpolación hermitiana, según la cual la función interpolada se especifica no solo por sus valores en n puntos, sino también por sus primeras derivadas. Para... ... Wikipedia

Una representación aproximada de una función o una reconstrucción aproximada de una función de una clase determinada a partir de información incompleta (por ejemplo, valores de cuadrícula) utilizando splines. Como en el clásico. Se estudia teoría de aproximación de funciones, métodos lineales de S. a.... Enciclopedia Matemática

Interpolación mediante splines, es decir, construcción de un spline de interpolación (i.s.), tomando en puntos dados (xi) valores dados (f(xi)), i=0, 1, . . ., n. Generalmente y. Con. satisfacer condiciones adicionales en los puntos finales. Entonces,… … Enciclopedia Matemática

Una función definida sobre el segmento, coincidiendo en segmentos parciales [x i, xi+1] formados por la grilla a=x0 Enciclopedia Matemática

ranura- a, h. Una de las funciones elementales está incluida en el análisis numérico diario... Diccionario ucraniano Tlumach

aproximación spline- el nombre de la familia femenina...

interpolación spline- el nombre de la familia femenina... Diccionario ortográfico de la lengua ucraniana.

Libros

  • Spline bursts y sus implementaciones, Burova I.G.. Este libro se centra en expansiones spline burst de primer y segundo orden. ... Se consideran técnicas de descomposición de flujos en el caso hermitiano utilizando un flujo de valores...

Variables condicionales

variable condicional Es un semáforo que se utiliza para señalar un evento que ha ocurrido. Uno o más procesos (o subprocesos) pueden estar esperando una señal de que se ha producido algún evento procedente de otros procesos o subprocesos. Debe comprender la diferencia entre las variables de condición y los semáforos mutex discutidos anteriormente. El propósito de un semáforo mutex y bloqueos de lectura y escritura es sincronizar el acceso a los datos, mientras que las variables de condición se usan típicamente para sincronizar una secuencia de operaciones. Sobre este tema en su libro. Programación de red UNIX W. Richard Stevens lo dijo bien: “ Los mutex deben usarse para bloquear, no para esperar. ».

En el Listado 4.6, el hilo del consumidor contenía un bucle:

15 mientras (Archivos de texto.empty())

El hilo del consumidor repitió el bucle hasta que estuvo en la cola. Archivos de texto había elementos. Este bucle se puede reemplazar con un bucle condicional. metro ennaya. El hilo productor notifica al consumidor que se han colocado elementos en la cola. El hilo del consumidor puede esperar hasta recibir una señal y luego proceder a procesar la cola.

La variable de condición es de tipo pthread_cond_t. Los siguientes son los tipos de operaciones que puede realizar:

Inicialización;

Destrucción;

Expectativa;

Esperando con límite de tiempo;

Alarma direccionable;

Alarma universal;

Las operaciones de inicialización y destrucción se realizan mediante variables de condición, similares a operaciones similares de otros mutex. Funciones de clase pthread_cond_t, que implementan estas operaciones se enumeran en la tabla. 5.7.

Tabla 5.7. Funciones de la clase pthread_cond_t que implementan operaciones de variables condicionales

Las variables de condición se utilizan junto con mutex. Si intenta bloquear un mutex, el hilo o proceso se bloqueará hasta que se libere el mutex. Una vez desbloqueado, el hilo o proceso recibirá un mutex y continuará su trabajo. Cuando se utiliza una variable de condición, debe estar asociada con un mutex.

pthread_mutex_lock(&Mutex);

pthread_cond_wait(&EventMutex, &Mutex);

pthread_mutex_unlock(&Mutex);

Entonces, alguna tarea intenta bloquear un mutex. Si el mutex ya está bloqueado, entonces esta tarea está bloqueada. Después de desbloquear la tarea se liberará el mutex. exclusión mutua y al mismo tiempo esperará una señal para la variable condicional EventMutex . Si el mutex no está bloqueado, la tarea esperará una señal indefinidamente. Con una espera cronometrada, la tarea esperará una señal durante un período de tiempo específico. Si este tiempo expira antes de que la tarea reciba una señal, la función devolverá un código de error. Luego, la tarea solicitará nuevamente el mutex.

Al realizar la señalización de direcciones, una tarea notifica a otro hilo o proceso que ha ocurrido algún evento. Si una tarea está esperando una señal para una variable de condición determinada, esa tarea se desbloqueará y recibirá un mutex. Si varias tareas están esperando una señal para una determinada variable condicional a la vez, solo una de ellas se desbloqueará. Las tareas restantes esperarán en la cola y se liberarán según la estrategia de programación utilizada. Cuando se realiza una operación de señalización global, se notificarán todas las tareas que esperan una señal para la variable de condición especificada. Cuando se desbloquean varias tareas, competirán por la propiedad del mutex según la estrategia de programación utilizada. A diferencia de una operación de espera, una tarea que realiza una operación de señalización no reclama la propiedad del mutex, aunque debería hacerlo.

La variable condicional también tiene un objeto de atributo, cuyas funciones se enumeran en la tabla. 5.8.

Tabla 5.8. Funciones para acceder a un objeto de atributo para una variable de condición de tipo pthread_cond_t


internacional pthread_condattr_init(pthread_condattr_t * attr) Inicializa el objeto de atributo variable de condición especificado por attr a los valores predeterminados para todos los atributos definidos por la implementación;

internacional pthread_condattr_destroy(pthread_condattr_t * attr); Destruye el objeto de atributo de variable de condición especificado por el parámetro attr. Este objeto se puede reinicializar llamando a pthread_condattr_init()

internacional pthread_condattr_setpshared(pthread_condattr_t * attr,int pshared);

internacional pthread_condattr_getpshared(const pthread_condattr_t * restringir atributo, int *restringir pshared); Establece o devuelve el atributo de proceso compartido del objeto de atributo de variable de condición especificado por attr. El parámetro pshared puede contener los siguientes valores:

PTHREAD_PROCESS_SHARED(permite que cualquier subproceso que tenga acceso a la memoria asignada a esta variable de condición comparta un bloqueo de lectura y escritura, incluso si los subprocesos pertenecen a procesos diferentes);

PTHREAD_PROCESS_PRIVATE(La variable de condición se comparte entre subprocesos del mismo proceso)

internacional pthread_condattr_setclock(pthread_condattr_t * attr, clockid_t clock_id);

internacional pthread_condattr_getclock(const pthread_condattr_t * restringir attr, clockid_t * restringir clock_id); Establece o devuelve un atributo reloj objeto de atributo de una variable condicional especificada por el parámetro atributo. Atributo reloj representa el identificador del reloj utilizado para medir el límite de tiempo en la función pthread_cond_timedwait(). El atributo de reloj por defecto es el identificador de reloj del sistema.

Se puede utilizar una variable de condición para implementar las relaciones de sincronización mencionadas anteriormente: inicio-inicio (CC), fin-inicio (FS), inicio-fin (SF) y fin-fin (FF). Estas relaciones pueden existir entre subprocesos del mismo o de diferentes procesos. Los listados 5.4 y 5.5 proporcionan ejemplos de implementaciones de relaciones de sincronización FS y FF. Cada ejemplo define dos exclusiones mutuas. Un mutex se utiliza para sincronizar el acceso a datos compartidos y el otro se utiliza para sincronizar la ejecución del código.

// Listado 5.4. Relaciones de sincronización FS entre

// dos hilos

pthread_t HiloA, HiloB;

pthread_cond_t Evento;

vacío * trabajador1(nulo *X) (

para(int Contar = l;Contar

pthread_mutex_lock(&Mutex);

pthread_mutex_unlock(&Mutex);

si(Número == 50)(

pthread_cond_signal(&Evento);

vacío * trabajador2(nulo *X) (

pthread_mutex_lock(&EventMutex);

pthread_cond_wait(&Evento,&EventMutex);

para(int Contar = 1;Contar

pthread_mutex_lock(&Mutex);

Número = Número + 20;

pthread_mutex_unlock(&Mutex);

cout ""La función trabajador2 ha completado la ejecución." "endl; retorno(0);

entero principal(int argc, carbón *argv) (

pthread_mutex_init(&Mutex,NULL);

pthread_mutex_init(&EventMutex,NULL);

pthread_cond_init(&Evento, NULL);

pthread_create(&ThreadA, NULL, trabajador, NULL);

pthread_create(&ThreadB, NULL, trabajador2, NULL);

El Listado 5.4 muestra un ejemplo de implementación de relaciones de sincronización de FS. ThreadA no puede terminar hasta que se inicie ThreadB. Si el número llega a ser 50, ThreadA se lo indica a ThreadB. Ahora puede continuar ejecutándose hasta el final. ThreadB no puede comenzar a ejecutarse hasta que reciba una señal de ThreadA. ThreadB usa un objeto EventMutex junto con una variable de condición de evento. Se utiliza un objeto Mutex para sincronizar el acceso para escribir el valor de la variable compartida Número. Una tarea puede utilizar múltiples mutex para sincronizar varios eventos y acceder a secciones críticas.

En el Listado 5.5 se muestra un ejemplo de implementación de relaciones de sincronización de FF.

// Listado 5.5. Relación de sincronización FF entre // dos subprocesos

pthread_t HiloA, HiloB;

pthread_mutex_t Mutex, EventMutex;

pthread_cond_t Evento;

vacío *trabajadorl(vacío *X) (

para(int Contar = l;Contar

pthread_mu tex_lock (&Mutex);

pthread_mutex_unlock(&Mutex);

cout ""trabajador: el número es "

pthread_mutex_lock(&EventMutex),-

cout "La función de trabajador está esperando. " "endl;

pthread_cond_wait (&Evento, &EventMutex);

pthread_mutex_unlock(&EventMutex);

vacío *trabajador2 (vacío *X) (

para(int Contar = l;Contar

pthread_mutex_lock(&Mutex);

Número = Número * 2 ;

pthread_mutex_unlock(&Mutex);

cout " "trabajador2: el número es " " Número " endl;

pthread_cond_signal (&Evento);

cout ""La función trabajador2 envió una señal" "endl;return(0);

int principal(int argc, char *argv) (

pthread_mutex_init (&Mutex,NULL);

pthread_mutex_init (&EventMutex,NULL);

pthread_cond_init (&Evento, NULL);

pthread_create(&ThreadA, NULL,trabajador, NULL);

pthread_create (&ThreadB, NULL, trabajador2, NULL);

En el Listado 5.5, ThreadA no puede terminar hasta que termine ThreadB. ThreadA debe ejecutar el ciclo 10 veces y ThreadB debe completar el ciclo 100 veces. ThreadA completará sus iteraciones antes que ThreadB, pero esperará hasta que ThreadB indique su finalización.

Las relaciones de sincronización CC y SF no se pueden implementar de esta manera. Estos métodos se utilizan para sincronizar los poros. I tiempo de ejecución I procesos.




Arriba