|
안녕하세요..
아래 함수를 사용해 보세요. 요구하신것과 맞는지 모르겠지만..
SrcDataX/Y에 곡선이 형성되어야 할 점을 건네주고 ScrCount에 점 갯수를 넘겨줍니다
그럼 DstDataX/Y배열에 nDpd의 해상도의 곡선좌표가 담겨져 나오지요 전체 갯수는 Return값이구요.
int __fastcall MakeSpline(float DstDataX[], float DstDataY[], float SrcDataX[], float SrcDataY[], int SrcCount, int nDpd)
{
int i, *D;
int idx = 0;
float x, y;
float t, dt;
float *pDeltaX, *pDeltaY;
dt = 1.0 / (nDpd);
D = new int[SrcCount + 1];
pDeltaX = new float[SrcCount + 1];
pDeltaY = new float[SrcCount + 1];
D[0] = 2;
for(i = 1; i < (SrcCount - 1); i++) D[i] = 4;
D[SrcCount-1] = 2;
pDeltaX[0] = 3 * (SrcDataX[1] - SrcDataX[0]);
pDeltaY[0] = 3 * (SrcDataY[1] - SrcDataY[0]);
for(i = 1; i < (SrcCount - 1); i++)
{
pDeltaX[i] = 3 * (SrcDataX[i + 1] - SrcDataX[i - 1]);
pDeltaY[i] = 3 * (SrcDataY[i + 1] - SrcDataY[i - 1]);
}
pDeltaX[i] = 3 * (SrcDataX[i] - SrcDataX[i - 1]);
pDeltaY[i] = 3 * (SrcDataY[i] - SrcDataY[i - 1]);
pDeltaX[i] /= D[i];
pDeltaY[i] /= D[i];
for(i = SrcCount - 2; i >= 0; i--)
{
pDeltaX[i] = (pDeltaX[i] - pDeltaX[i + 1]) / D[i];
pDeltaY[i] = (pDeltaY[i] - pDeltaY[i + 1]) / D[i];
}
for(i = 0; i < (SrcCount -1); i++)
{
for(t = 0.0; t <= 1.0; t += dt)
{
x = (2 * t * t * t - 3 * t * t + 1) * SrcDataX[i] +
(-2 * t * t * t + 3 * t * t) * SrcDataX[i + 1] +
(t * t * t - 2 * t * t + t) * pDeltaX[i] +
(t * t * t - t * t) * pDeltaX[i + 1];
y = (2 * t * t * t - 3 * t * t + 1) * SrcDataY[i] +
(-2 * t * t * t + 3 * t * t) * SrcDataY[i + 1] +
(t * t * t - 2 * t * t + t) * pDeltaY[i] +
(t * t * t - t * t) * pDeltaY[i + 1];
DstDataX[idx] = x;
DstDataY[idx++] = y;
}
}
DstDataX[idx] = SrcDataX[SrcCount - 1];
DstDataY[idx++] = SrcDataY[SrcCount - 1];
delete [] D;
delete [] pDeltaX ;
delete [] pDeltaY ;
return idx;
}
|