interpolación de BézierHola,
¿Hay una función para trazar la interpolación de Bezier?
Re: interpolación de Bézier@Craige_Hales y @mitulashah ,
Mi conocimiento y experiencia de las curvas de Bezier es limitado. He visto su utilidad en la redacción (construcción y paisajismo) diseño y diseño de vestuario. Por supuesto, los fundamentos matemáticos siempre me resultan interesantes.Investigué un poco en Internet y descubrí que @mitulashah La búsqueda del algoritmo Bezier spline, B-spline de Excel es común. Un enlace Pregunta sobre el algoritmo de suavizado de Excel incluido el enlace a un archivo zip: http://xlrotor.com/Smooth_curve_bezier_example_file.zip Este zip contiene un ejemplo .xls de 2002 de una curva Bezier con rutinas de automatización integradas para tomar los píxeles de la curva suavizada de Excel e interpolar los puntos en la curva.No es "exacto" y utiliza una técnica que extrae 4 píxeles de la curva. El punto final se usa dos veces en el primer punto interpolado y en el último punto interpolado.
Un descubrimiento de JMP que hice después de la publicación de Craige sobre la opción del elemento GraphBuilder Line para convertirlo en una curva, es que la spline utilizada para esta plataforma debe usar un algoritmo diferente porque las pendientes de los puntos finales son muy similares a las de Excel. comencé un script para hacer algo de DSP (procesamiento de señal digital) extrayendo los píxeles de la trama GB. Luego encontré los enlaces web enumerados anteriormente y decidí usar los puntos interpolados de la hoja de cálculo de Excel y superponerlos con la línea GB (curva). La primera captura de pantalla a continuación muestra la hoja de cálculo de Excel con el gráfico de Excel con spline Bezier y puntos interpolados, que se agregaron como puntos Spin B a la tabla JMP.La segunda imagen muestra la línea JMP GB (curva) con los puntos interpolados de Excel superpuestos.
Excel Interpolated Points > Spin B in JMP tablePuntos interpolados de Excel> Spin B en la tabla JMP
JMP Line(curve) spline overlaid with Excel interpolationsLínea JMP (curva) spline superpuesta con interpolaciones de Excel
Notará que las interpolaciones están ligeramente desplazadas de la línea JMP (curva) en la cola superior, lo que podría deberse al algoritmo de interpolación, las diferencias en las curvas de Excel y JMP o una combinación de ambos. Tenga en cuenta que esos mismos 4 puntos son ligeramente más altos que la curva en el gráfico de Excel.
Entonces, mi conclusión es que la spline (curva) de JMP GB Line es muy similar a la curva Excel Bezier.Mi interés no es alto, pero si me aburro, podría terminar mi script DSP para "obtener" los puntos de Línea (curva).Las versiones anteriores de JMP solían informar puntos de curva en archivos .jrn guardados, ahora solo hay una referencia a una función oculta en el archivo .jrn.
Ahora, si estuviera consultando sobre este problema, mi primer conjunto de preguntas sería:
- ¿De dónde vienen estos datos (4 puntos) y cuál es el objetivo?
- Las curvas spline, como las líneas y los polinomios, pueden resultar útiles para crear curvas de calibración (curvas que se utilizarán para la interpolación) en lugar de relaciones funcionales complejas. Sin embargo, para propósitos de precisión, se recomiendan intervalos regulares de datos y replicación, si las interpolaciones se van a calcular a partir de las curvas. Dado que los valores de X están espaciados irregularmente, me pregunto si hay una tercera (o más) variable que influya tanto en X como en Y. Por ejemplo, ambas son lecturas de una lectura de prueba diaria o semanal.
- ¿Existe un primer principio fundamental que sustente la relación de X e Y, por ejemplo: respuesta a la dosis; crecimiento celular; contaminación-corrosión, etc.
- ¿Por qué tan pocos puntos? ¿Cuál es el costo de la replicación?
Según mi experiencia, si existe una relación no lineal subyacente fundamental, a menudo vale la pena el esfuerzo de obtener los datos y ajustar la relación para estimar los parámetros (curvas de aprendizaje, curvas de degradación), etc. Como se encuentra en la excelente información proporcionada por Craige Hales, pequeñas diferencias en los puntos de control (número y ubicación), nudos y puntos finales pueden generar grandes diferencias en la curvatura (puntos en la curva) de una spline, especialmente con espacios amplios en "x".Tengo la corazonada de que Excel deliberadamente no publicó puntos o una fórmula para su spline de curva para que la gente no lo use como un modelo ajustado para la estimación.Tenga en cuenta que con valores "cercanos" de X y replicación, la interpolación es mucho menos riesgosa.
Re: interpolación de Bézierhttp://users.umiacs.umd.edu/~ramani/cmsc460/Lecture9_interp_2008.pdf dice
snip of a pdf describing how to choose slope for first and last end points of a splinerecorte de un pdf que describe cómo elegir la pendiente para el primer y último punto final de una spline
Sospecho que 1 o 4 podrían aplicarse aquí; Estoy más allá de mi conocimiento.
Re: interpolación de BézierSí. Espero eso.
Otra forma de hacer esto -> tal vez podamos calcular el punto de control en función de los cuatro puntos conocidos que tengo en la curva y luego dibujar una curva bezier que pase por los cuatro puntos. ¿Hay una manera de hacer eso?
Re: interpolación de BézierLa spline elige una pendiente al principio y al final que no parece ser la misma para JMP y Excel. La spline utiliza un cúbico diferente entre cada par de puntos y puede unir sin problemas una gran cantidad de puntos, haciendo coincidir pendientes y curvaturas. Si solo tiene cuatro puntos, podría tener sentido ajustar un cúbico a los cuatro puntos y usar la fórmula para hacer la interpolación.
Tal vez obtengamos la respuesta de un estadístico.
Graph Builder can do it. So can Fit Y by X.Graph Builder puede hacerlo. También puede Ajustar Y por X.
Re: interpolación de BézierMe disculpo por la confusión aquí.
Datos:

En JMP, hice Fit Y by X


Si ingreso los mismos datos en Excel

entiendo esto

Observe que en la línea verde de JMP hay un poco de oscilación/doblez en la curva alrededor de la parte inferior izquierda (entre los valores X 2-3), mientras que en Excel ese no es el caso.
mi objetivo final es interpolar valores de la línea, por lo que si Excel y JMP dan dos líneas diferentes, terminaría con diferentes valores de interpolación.
Re: interpolación de BézierPensando en @gzmorgan0 explicación, puede hacerlo en el generador de gráficos:
Select Points, then SHIFT to add the lineSeleccione Puntos, luego MAYÚS para agregar la línea
Re: interpolación de Bézier@mitulashah ,
Sería útil si adjuntara el gráfico de Excel que espera.
Si uso los datos (series) que proporcionó, sin ordenarlos, Excel crea el primer gráfico a continuación. Si ordeno la serie en Excel, el segundo gráfico es el resultado.
Tenga en cuenta que
- Las plataformas JMP, por defecto, ajustan una curva a los datos por valor, no por orden en la tabla.
- Fit Y by X, fit Flexible, Kernel Smoother Linear Tri-Cube, sería la opción que usaría en lugar de una spline, asumiendo que desea una gráfica como la segunda gráfica a continuación.
- Para producir un gráfico como el primer gráfico a continuación, donde la curva representa el orden de los datos, deberá crear un script para una ruta, como @Craige_Hales previamente mencionado.
Por su respuesta, no me quedó claro lo que está buscando.

Re: interpolación de BézierEsto es lo que estoy tratando de hacer
Replique el diagrama de dispersión de Excel con una función de curva suave.
Si uso JMP ajuste Y por X con una columna vertebral flexible, tengo una curva diferente a la que produce Excel con diagrama de dispersión + línea suave. Creo que Excel está usando el ajuste de curva Bezier.
Puntos de datos:
Girar | X | Y
un | 2.41 | 846.8692
un | 0,93 | 77.043
un | 1.37 | 155.2193
un | 1.96 | 390.4639

No quiero dibujar esta línea usando spline flexible, pero quiero forzar una curva bezier. Espero que tenga sentido.
Gracias
Re: interpolación de Bézier¿Que estás tratando de hacer?
El wikipedia el artículo es bastante bueno. Los puntos de control generalmente no se encuentran en la curva de Bezier.
JMP puede ajustar una spline a un conjunto de puntos y le proporciona un control deslizante para establecer la rigidez de la spline.
this spline is very stiffesta estría es muy rígida
Editar: mal título! ¡NO muy rígido!
ver también ¿Cómo ver la ecuación utilizada para spline? y regresión spline cúbica y ¿Cómo se determina la línea suave en el generador de gráficos?
Re: interpolación de BézierHola Craige,
Estoy tratando de entender la función de ruta () y mover puntos, puntos de control, puntos de bezier.
Tengo estos cuatro puntos de los datos que tengo.
punto =
[ 0,93 77,04 1,
1,37 155,22 0,
1.96 390.46 0,
2,41 846,87 3];
Cuando pongo esto en la función de ruta, obtengo una línea entre el punto 1 y el punto 4, pero no pasa por el punto 2 y el punto 3. ¿Me estoy perdiendo de algo?
Gracias.
Re: interpolación de BézierMúltiples respuestas, dependiendo de lo que necesites hacer. Aquí están algunas.
Para gráficos 2D, puede usar la función de ruta. No puede encontrarlo buscando Bézier porque el índice de secuencias de comandos lo deletrea Bézier. Intente buscar zier en su lugar.@xangregg @sheila_loring
Este ejemplo amplía el ejemplo de índice de secuencias de comandos con controladores que se pueden arrastrar.
// initial data; points 3 and 5 are not initially constrained about point 4
points = [
10 10 1,// move-to
30 70 0,// control point
40 10 0,// control point
50 40 3,// bezier
60 60 0,// control point
70 20 0,// control point
90 10 3 // bezier
];
// moving a square handle will call this function to
// copy the handle coordinates to the matrix
setpoint = Function( {index, x, y}, // parameters
{angle, distance}, // local variables
// copy to the matrix
points[index, 1] = x;
points[index, 2] = y;
// 3 and 5 are constrained about 4, comment out to see why...
// if the angles don't match, it isn't smooth
If( index == 3 | index == 5,
other = If( index == 3, 5, 3 ); // if I'm 3, he must be 5, etc
// trig in radians, 2*pi is 360
// atan does all 4 quadrants with 2 arguments
angle = ATan( points[index, 2] - points[4, 2], points[index, 1] - points[4, 1] );
// maintain other's distance
distance = Sqrt( (points[other, 2] - points[4, 2]) ^ 2 + (points[other, 1] - points[4, 1]) ^ 2 );
// fix other's angle to match my angle, but opposite me
points[other, 1] = points[4, 1] + distance * Cos( angle + Pi() );
points[other, 2] = points[4, 2] + distance * Sin( angle + Pi() );
);
// redraw
gb << inval;
);
New Window( "Example",
gb = Graph Box(
Fill Color( "blue" );
// there is no good shortcut for creating handles; the JSL holds the instances
Handle( points[1, 1], points[1, 2], setpoint( 1, x, y ) );
Handle( points[2, 1], points[2, 2], setpoint( 2, x, y ) );
Handle( points[3, 1], points[3, 2], setpoint( 3, x, y ) );
Handle( points[4, 1], points[4, 2], setpoint( 4, x, y ) );
Handle( points[5, 1], points[5, 2], setpoint( 5, x, y ) );
Handle( points[6, 1], points[6, 2], setpoint( 6, x, y ) );
Handle( points[7, 1], points[7, 2], setpoint( 7, x, y ) );
// construction lines
Pen Color( "red" );
Line( {points[1, 1], points[1, 2]}, {points[2, 1], points[2, 2]} );
Line( {points[3, 1], points[3, 2]}, {points[4, 1], points[4, 2]} );
Line( {points[4, 1], points[4, 2]}, {points[5, 1], points[5, 2]} );
Line( {points[6, 1], points[6, 2]}, {points[7, 1], points[7, 2]} );
// the bezier
Pen Color( "black" );
Path( points );
)
);Me di cuenta de que también debería restringir el movimiento del punto 4 para arrastrar los puntos 3 y 5 también. (No hecho, debería ser fácil).
Bezier control pointsPuntos de control de Bézier
Tal vez necesites una spline. No estoy seguro de cuál es la distinción entre spline, p-spline, b-spline en el índice de secuencias de comandos. usé spline HeatColor vs Spline vs Interpolar para hacer esta curva
spline coef, spline evalcoeficiente de spline, evaluación de spline
También hay soporte para splines Bezier en el soporte 3D OpenGL de JMP: https://www.jmp.com/support/help/14-2/bezier-curves.shtml que podría ayudar a dibujar una superficie. Un mal ejemplo se esconde en Vídeo FFT
Buena publicación @Duane_Hayes Comprender las splines cúbicas
Algo con lo que me encontré en el camino: https://www.tinaja.com/glib/bezconn.pdf