interpolación de BézierHola,
¿Existe una función para trazar la interpolación de Bézier?
Re: Interpolación Bézier@Craige_Hales y @mitulshah ,
Mi conocimiento y experiencia sobre las curvas de Bézier son limitados. He visto su utilidad en la redacción (construcción y paisajismo) de diseño y en el diseño de indumentaria. Por supuesto, los fundamentos matemáticos siempre me resultan interesantes.Busqué un poco en Internet y descubrí que @mitulshah 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 Bézier con rutinas de automatización integradas para capturar 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 toma 4 píxeles de la curva. El punto final se utiliza 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 del gráfico GB. Luego encontré los enlaces web enumerados anteriormente y decido usar simplemente 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 Bézier y puntos interpolados, que se agregaron como puntos Spin B a la tabla JMP.La segunda imagen muestra la línea (curva) JMP GB con los puntos interpolados de Excel superpuestos.
Excel Interpolated Points > Spin B in JMP tableExcel Interpolated Points > Spin B in JMP tablePuntos interpolados de Excel> Girar B en la tabla JMP
JMP Line(curve) spline overlaid with Excel interpolationsJMP Line(curve) spline overlaid with Excel interpolationsSpline de línea JMP (curva) 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, diferencias en las curvas de Excel y JMP o una combinación de ambas. 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 de línea (curva) de JMP GB es muy similar a la curva de Bézier de Excel.Mi interés no es alto, pero si me aburro, podría terminar mi script DSP para "obtener" los puntos de la 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 primera serie de preguntas serían:
- ¿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 fines de precisión, se recomiendan intervalos de datos regulares y replicaciones, 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 se base en la relación de X e Y, por ejemplo: dosis-respuesta; 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 el presentimiento de que Excel no publicó deliberadamente puntos o una fórmula para su curva spline para que la gente no lo usara 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 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 splinesnip 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 aquí podrían aplicarse 1 o 4; Estoy más allá de mi conocimiento.
Re: Interpolación 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 Bézier que pase por los cuatro puntos. ¿Hay una manera de hacer eso?
Re: Interpolación BézierLa spline elige una pendiente al principio y al final que no parece ser la misma para JMP y Excel. El spline utiliza una cúbica diferente entre cada par de puntos y puede unir suavemente una gran cantidad de puntos, haciendo coincidir pendientes y curvaturas. Si solo tienes cuatro puntos, podría tener sentido ajustar un cubo a los cuatro puntos y usar la fórmula para hacer la interpolación.
Quizás obtengamos la respuesta de un estadístico.
Graph Builder can do it. So can Fit Y by X.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 BézierPido disculpas por la confusión aquí.
Datos:

En JMP, hice Fit Y por X


Si ingreso los mismos datos en Excel

entiendo esto

Observe que en la línea verde de JMP hay una pequeña oscilación/torcedura 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 valores de interpolación diferentes.
Re: Interpolación BézierPensando en @gzmorgan0 explicación, puedes hacerlo en el generador de gráficos:
Select Points, then SHIFT to add the lineSelect Points, then SHIFT to add the lineSeleccione Puntos, luego MAYÚS para agregar la línea
Re: Interpolación Bézier@mitulshah ,
Sería útil si adjuntara el gráfico de Excel que espera.
Si uso los datos (series) que proporcionaste, 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, de forma predeterminada, ajustan una curva a los datos por valor, no por orden en la tabla.
- Ajustar Y por X, ajustar Flexible, Kernel Smoother Linear Tri-Cube, sería la opción que usaría en lugar de una spline, asumiendo que desea un gráfico como el segundo gráfico 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, necesitará crear una secuencia de comandos para una Ruta, como @Craige_Hales previamente mencionado.
Por tu respuesta no me quedó claro lo que buscas.

Re: Interpolación BézierEsto es lo que estoy tratando de hacer
Replica el diagrama de dispersión de Excel con una característica de curva suave.
Si uso JMP ajustar Y por X con un lomo flexible, tengo una curva diferente a la que produce Excel con diagrama de dispersión + línea suave. Creo que Excel utiliza el ajuste de curva de Bézier.
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 una spline flexible, pero quiero forzar la curva Bézier. Espero que tenga sentido.
Gracias
Re: Interpolación 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 Bézier.
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 stiffthis spline is very stiffesta ranura 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 Graph Builder?
Re: Interpolación BézierHola Craige,
Estoy tratando de comprender la función path () y mover puntos, puntos de control y puntos Bézier.
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 BézierMúltiples respuestas, dependiendo de lo que necesites hacer. Aquí están algunas.
Para gráficos 2D, puede utilizar la función de ruta. No puede encontrarlo buscando Bézier porque el índice de secuencias de comandos lo escribe Bézier. Intente buscar zier en su lugar.@XanGregg @sheila_loring
Este ejemplo amplía el ejemplo del í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 también los puntos 3 y 5. (No hecho, debería ser fácil).
Bezier control pointsBezier control pointsPuntos de control de Bézier
Quizás necesites una ranura. No estoy seguro de cuál es la distinción entre spline, p-spline y b-spline en el índice de secuencias de comandos. yo usé spline HeatColor vs Spline vs Interpolar para hacer esta curva
spline coef, spline evalspline 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 lo que podría ayudar a dibujar una superficie. Un mal ejemplo se esconde en Vídeo FFT
Buena publicación @Duane_Hayes Entendiendo los splines cúbicos
Algo con lo que me encontré en el camino: https://www.tinaja.com/glib/bezconn.pdf