@Craige_Hales 그리고 @미툴샤 ,
베지어 곡선에 대한 나의 지식과 경험은 제한적입니다. 나는 제도(건축 및 조경) 디자인과 의류 디자인에서 그들의 유용성을 보았다. 물론 수학적 토대는 항상 나에게 흥미롭다.나는 인터넷에서 약간의 국수를했고 그것을 발견했습니다. @미툴샤 Excel의 베지어 스플라인, B-스플라인, 알고리즘에 대한 의 탐구는 일반적인 것입니다. 하나의 링크 Excel 스무딩 알고리즘 질문 zip 파일에 대한 링크를 포함했습니다. http://xlrotor.com/Smooth_curve_bezier_example_file.zip 이 zip에는 자동화 루틴이 포함된 베지어 곡선의 2002 .xls 예제가 포함되어 있어 Excel의 매끄러운 곡선에서 픽셀을 가져와 곡선의 포인트를 보간합니다."정확"하지 않으며 곡선에서 4픽셀을 잡는 기술을 사용합니다. 끝점은 첫 번째 보간 지점과 마지막 보간 지점에서 두 번 사용됩니다.
곡선으로 만드는 GraphBuilder 선 요소 옵션에 대한 Craige의 게시물 이후 제가 JMP에서 발견한 한 가지는 끝점 기울기가 Excel과 매우 유사하기 때문에 이 플랫폼에 사용되는 스플라인이 다른 알고리즘을 사용해야 한다는 것입니다. GB 플롯의 픽셀을 추출하여 일부 DSP(디지털 신호 처리)를 수행하는 스크립트를 시작했습니다. 그런 다음 위에 나열된 웹 링크를 찾았고 Excel 스프레드시트에서 보간된 점을 사용하고 GB 선(곡선)으로 오버레이하기로 결정했습니다. 아래의 첫 번째 스크린샷은 JMP 테이블에 스핀 B 포인트로 추가된 베지어 스플라인 및 보간된 포인트가 포함된 Excel 그래프가 포함된 Excel 워크시트를 보여줍니다.두 번째 그림은 Excel 보간점이 중첩된 JMP GB 선(곡선)을 보여줍니다.
Excel Interpolated Points > Spin B in JMP tableExcel 보간점 > JMP 테이블의 스핀 B
JMP Line(curve) spline overlaid with Excel interpolationsExcel 보간으로 중첩된 JMP 선(곡선) 스플라인
보간이 위쪽 꼬리의 JMP 선(곡선)에서 약간 오프셋되어 있음을 알 수 있습니다. 이는 보간 알고리즘, Excel 및 JMP 곡선의 차이 또는 둘의 조합 때문일 수 있습니다. 동일한 4개의 포인트가 Excel 차트의 곡선보다 약간 더 높다는 점에 유의하십시오.
그래서 제 결론은 JMP GB Line(곡선) 스플라인이 Excel Bezier 곡선과 매우 유사하다는 것입니다.내 관심은 높지 않지만 지루해지면 Line(곡선) 포인트를 "얻기" 위해 DSP 스크립트를 완료할 수 있습니다.이전 버전의 JMP는 저장된 .jrn 파일에서 곡선 점을 보고하는 데 사용되었지만 이제는 숨겨진 함수에 대한 참조만 .jrn 파일에 있습니다.
이제 이 문제에 대해 상담하는 경우 첫 번째 질문은 다음과 같습니다.
- 이 데이터(4점)는 어디에서 왔으며 목표는 무엇입니까?
- 직선 및 다항식과 같은 스플라인 곡선은 복잡한 기능 관계 대신 보정 곡선(보간에 사용되는 곡선)을 만드는 데 유용할 수 있습니다. 그러나 정확성을 위해 곡선에서 보간을 계산해야 하는 경우 정기적인 데이터 간격 및 복제가 권장됩니다. X 값의 간격이 불규칙하기 때문에 X와 Y 모두에 영향을 미치는 세 번째(또는 그 이상) 변수가 있는지 궁금합니다. 예를 들어 둘 다 일일 또는 주간 테스트 판독값의 판독값입니다.
- X와 Y의 관계를 뒷받침하는 근본적인 첫 번째 원칙이 있습니까? 세포 성장; 오염 부식 등
- 왜 그렇게 적은 점수입니까? 복제 비용은 얼마입니까?
근본적인 비선형 관계가 있는 경우 데이터를 가져오고 매개변수(학습 곡선, 저하 곡선) 등을 추정하기 위해 관계를 맞추는 노력을 기울일 가치가 있는 경우가 많습니다. Craige Hales, 제어점(숫자 및 위치)의 작은 차이, 매듭 및 끝점은 특히 "x"의 넓은 간격이 있는 스플라인의 곡률(곡선 위의 점)에 큰 차이를 만들 수 있습니다.Excel이 의도적으로 곡선 스플라인에 대한 점이나 공식을 게시하지 않았기 때문에 사람들이 추정을 위해 적합 모델처럼 사용하지 않을 것이라고 생각합니다.X 및 복제의 "가까운" 값을 사용하면 보간이 훨씬 덜 위험합니다.
스플라인은 시작과 끝에서 JMP와 Excel에서 동일하지 않은 것처럼 보이는 기울기를 선택합니다. 스플라인은 각 점 쌍 사이에 서로 다른 입방체를 사용하고 기울기와 곡률이 일치하는 많은 수의 점을 매끄럽게 결합할 수 있습니다. 4개의 점이 있는 경우 4개의 점에 입방체를 맞추고 수식을 사용하여 보간을 수행하는 것이 좋습니다.
아마도 우리는 통계학자의 대답을 얻을 것입니다.
Graph Builder can do it. So can Fit Y by X.그래프 빌더가 할 수 있습니다. Y를 X로 맞출 수 있습니다.
이것이 내가하려고하는 것입니다
부드러운 곡선 기능으로 Excel의 산점도를 복제합니다.
유연한 척추가 있는 JMP 적합 Y x X를 사용하면 산점도 + 매끄러운 선으로 Excel에서 생성하는 것과 다른 곡선이 생깁니다. Excel에서 Bezier 곡선 맞춤을 사용하고 있다고 생각합니다.
데이터 점수:
스핀 | 엑스 | 와이
A | 2.41 | 846.8692
A | 0.93 | 77.043
A | 1.37 | 155.2193
A | 1.96 | 390.4639

유연한 스플라인을 사용하여 이 선을 그리는 것이 아니라 강제로 베지어 곡선을 만들고 싶습니다. 말이 되기를 바랍니다.
감사해요
안녕 크레이지,
path() 함수를 이해하고 포인트, 컨트롤 포인트, 베지어 포인트를 이동하려고 합니다.
내가 가지고 있는 데이터에서 이 네 가지 포인트가 있습니다.
포인트 =
[ 0.93 77.04 1,
1.37 155.22 0,
1.96 390.46 0,
2.41 846.87 3];
이것을 경로 함수에 넣으면 점 1과 점 4 사이에 선이 생기지만 점 2와 점 3을 거치지 않습니다. 내가 뭔가를 놓치고 있습니까?
감사해요.
수행해야 할 작업에 따라 여러 답변이 제공됩니다. 여기 몇 가지가 있습니다.
2D 그래프의 경우 경로 기능을 사용할 수 있습니다. 스크립팅 인덱스에서 철자가 Bézier이기 때문에 Bezier를 검색해도 찾을 수 없습니다. 대신 zier를 검색해 보세요.@XanGregg @sheila_loring
이 예제는 드래그 가능한 핸들로 스크립팅 인덱스 예제를 확장합니다.
// 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 );
)
);포인트 3과 5도 함께 드래그하려면 포인트 4를 이동하도록 제한해야 한다는 것을 깨달았습니다. (완료되지 않았으며 쉬워야 합니다.)
Bezier control points베지어 제어점
스플라인이 필요할 수도 있습니다. 스크립팅 인덱스에서 스플라인, p-스플라인, b-스플라인의 차이점이 무엇인지 잘 모르겠습니다. 나는 스플라인을 사용했다 HeatColor 대 스플라인 대 보간 이 곡선을 만들기 위해
spline coef, spline eval스플라인 계수, 스플라인 평가
JMP의 3D OpenGL 지원에는 베지어 스플라인도 지원됩니다. https://www.jmp.com/support/help/14-2/bezier-curves.shtml 표면을 그리는 데 도움이 될 수 있습니다. 나쁜 예가 숨겨져 있습니다. FFT 비디오
그레이트 포스트 @Duane_Hayes 3차 스플라인 이해
도중에 만난 것 : https://www.tinaja.com/glib/bezconn.pdf