C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[20901] Re:spline연산이 가능한 수학 라이브러리를 알고싶습니다.
EmptySpear [] 1037 읽음    2002-08-20 11:21
안녕하세요..

아래 함수를 사용해 보세요. 요구하신것과 맞는지 모르겠지만..

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;
}


+ -

관련 글 리스트
20873 spline연산이 가능한 수학 라이브러리를 알고싶습니다. 양국진 769 2002/08/19
30363     Re:spline연산이 가능한 수학 라이브러리를 알고싶습니다. 한동희 795 2002/08/21
20901     Re:spline연산이 가능한 수학 라이브러리를 알고싶습니다. EmptySpear 1037 2002/08/20
20921         Re:Re:spline연산이 가능한 수학 라이브러리를 알고싶습니다. 양국진 789 2002/08/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.