BEZIER 3 차 제어 포인트를 보간 입방으로 쉽게 변환 할 수 있습니다. 그냥이 역으로 그래서
:
/* bezier = interpol
1 | ( x0)=X1;
t | (3.0*x1)-(3.0*x0)=(0.5*(X2-X0));
tt | (3.0*x2)-(6.0*x1)+(3.0*x0)=(3.0*(X2-X1))-(X2-X0)-(0.5*(X3-X1));
ttt|( x3)-(3.0*x2)+(3.0*x1)-( x0)=(0.5*(X2-X0))+(0.5*(X3-X1))+(2.0*(-X2+X1));
1 | ( y0)=Y1;
t | (3.0*y1)-(3.0*y0)=(0.5*(Y2-Y0));
tt | (3.0*y2)-(6.0*y1)+(3.0*y0)=(3.0*(Y2-Y1))-(Y2-Y0)-(0.5*(Y3-Y1));
ttt|( y3)-(3.0*y2)+(3.0*y1)-( y0)=(0.5*(Y2-Y0))+(0.5*(Y3-Y1))+(2.0*(-Y2+Y1));
*/
// input: x0,y0,..x3,y3 ... Bezier control points
// output: X0,Y0,..X3,Y3 ... interpolation control points
double x0,y0,x1,y1,x2,y2,x3,y3,m=1.0/9.0;
X0=x0-(x1-x0)/m; Y0=y0-(y1-y0)/m;
X1=x0; Y1=y0;
X2=x3; Y2=y3;
X3=x3+(x3-x2)/m; Y3=y3+(y3-y2)/m;
희망 나는 어떤 대수 실수를하지 않았다. 셰이프가 변경되지 않은 상태에서 모든 컨트롤 포인트를 직접 커브로 이동합니다. BBOX 계산을 위해서는 사용 파라미터 t=<0,1>
이 그들 사이에 보간되어 있으므로 (X1,Y1)
과 (X2,Y2)
만을 사용해야한다는 것에주의하십시오 !!!.
그러나 제어 포인트가없는 극단을 가질 수 있기 때문에 부정확 할 수도 있습니다. (BBOX가해야 할 것보다 조금 작다) 경우에는 어떤 단계 (0.1
)로 커브의 점 집합 (예 : 10 입방)으로 모양을 다시 샘플링하고 BBOX를 수행 할 수 있습니다 전철기. 훨씬 정확하지만 느린 것입니다 ...
경로 복사본을 평평하게하고 그 경계를 사용할 수 있습니다. 제어점을 움직이면 커브가 많이 바뀔 것입니다! – TaW
문제가 경계를 계산하지 않습니다. 나는 이미 그 일을 병합함으로써 완성했다. 나는이 경로를 마스크로 사용하기 위해 자바/안드로이드 기능을 사용하고 퍼즐을 생성하기 위해 퍼즐 그림을 오버레이합니다. 그 기능은 이러한 한계를 사용하여이 문제를 겪게됩니다. 가능한 경우 경계 내에서 제어점을 이동하는 것이 가장 쉬운 방법입니다. 해결 방법은 없습니까? – pats