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
[50047] Re:Re:[질문]TChart 에서 임의의 x값에 해당하는 y의 값을 알 수 있나요. - 어느정도 해결 되었네요.
unitas [kjlee1] 1983 읽음    2007-07-24 09:33
답변 감사합니다.
MouseMove를 사용하면 물론 x,y 좌표를 얻을수는 있지만 제가 원하는 것은 Chart 어는곳에 마우스를 찍어도
(또는 TrackBar를 움직여도) 해당 그래프의 x에 해당하는 Y값을 얻는것 이거든요. (소수점 이하 2자리까지)
일반적으로 말하는 스펙트럼에 Mark 기능이라고 생각하시면 될겁니다.

말씀하신 내용으로 보니 마침 제가 처리한 것과 비슷 한데요.

제가 해결한 방법은 그림을 첨부했지만
마우스로 클릭한 x위치(아마 정수가 아닌 실수가 될 겁니다.)  를 정수로 얻어낸다.
[x가 2.3등 일때 2를 얻어낸다.] x2와 3의 y값은 데이타가 수신되기 때문에 알수 있다.
x 2와 3을 100으로 나눈다.  y값의 차를 100 으로 나눈다.
해당 x에 해당하는 y값을 구한다.

아래와 같이 함수를 구현해서 Test를 해보니 아직까지는 괜찮은것 같은데 아무래도 함수안에 For문을
돌리는것이 마음에 들지 않네요.(Mark기능을 많이 사용하지 않는다고 해도...)
좀더 좋은 방법이 있으면 조언 주십시요.

    int     n_bufcnt;   // 몇번째 buf
    int     n_x_start;  // 바로전 x [ex : 2.3 일때 2]
    int     n_forx;      // for문에서 click한 x가 몇번째인지 확인하기 위해서
    int     n_fory;      // for문에서 y 범위 지정
    int     n_x_inter;  // x 간격의 몇번째
    float   f_y_start;  // 바로전 y값
    float   f_y_inter;  // y 값 사이의 차이 값

해당 x에 해당하는 y값을 구하는 함수를 아래와 같이 처리했습니다.
float TForm::Rtn_Y(float fx) // fx가 2.3일때
{
    float   fy;

    n_x_start   = (int)(fx);        // 바로전 x값 2
    n_bufcnt    = n_x_start ;    // 몇번째 buf  - 수신데이타를 buf에 저장해놓아야 한다. buf[0] - buf[9];

    f_y_start   = buf[n_bufcnt];   // 바로전 y값 (x값 2에 해당하는)
    f_y_inter   = buf[n_bufcnt + 1] - buf[n_bufcnt]) / 100.0; // y 값 간격 값

    n_fory  = n_x_start * 100;   // ex 200
    n_forx  = fx * 100;              // ex 230

    for(int i = n_fory; i < n_fory + 100; i++)   // ex : 200 ~ 300
    {
        if(n_forx == i)
        {
            n_x_inter = i - n_fory;
            break;
        }
    }

    fy  = n_x_inter * f_y_inter + f_y_start;    //   x 간격의 몇번째 * y차이 + 바로전 y

    return fy;
}
//---------------------------------------------------------------------------











smleelms 님이 쓰신 글 :
: 일단 다음 함수들을 한번 살펴보시기 바랍니다. 버젼따라 어떻게 되는지 몰라서요.
:
: 일단 Chart의 MouseMove 이벤트를 거시면 픽셀 x,  y값이 얻어집니다.
: 그러면, 그 픽셀에 따른 정수값 x, x1, x2 좌표값을 얻은뒤에, x1에 따른 y1값, x2에 따른 y2값을 얻은뒤에 x에 따른 y값을 보간해서 얻을시면 되리라봅니다.
:
: 그럼, 좋은 결과 있으시길 바랍니다.
:
: unitas 님이 쓰신 글 :
: : 수신 data가 10 개 있을때 (x는 0 에서 10 - 수신이 11개가 되네요.)
: : 임의의 x값에 해당하는 y값을 어떻게 알수 있나요?
: : 예를 들어서 x값이 5.25일때 y의 값을 알고 싶습니다.
: : [실제로 x가 5일때와 6일때 값은 수신받기 때문에 알수 있지만 그 사이값은 제가 알아서 구해야 하거든요.]
: : (그림 첨부 했습니다.)
: :
: : 일반 Mark 기능은 수신되는 값에 대해서 표시가 되고
: : mouse move event와 Onclick로 x, y 값을 알수 있지만
: : 사용자가 TChart 상에서 마우스로 x의 값 5.25를 정확히 찍어야 하잖아요.
: : 이러한 방법 말구 없나요?
: :
: : TChart 버전은 4.02 입니다.
: :
: : TChart 버전 7.0 Series를 다운받아서 설치를 해봤는데 컴파일 에러가 계속 나더라구요.
: : [include xxx.hpp 파일 경로가 잘못되었다고...  TChart의 해당하는 include hpp파일 ]
: :
: : 구매를 해야 한다고 나왔는데 어떤분이 알려주신 http://www.steema.com/ 들어가서
: : 구매하지 않고 Download 받을 수가 있어서 설치를 해봤습니다.
: :
: : Example을 훓어서 봤는데 정말 다양하고 멋진 Chart 기능이 많더라구요.
: : 하지만 제가 정작 원하는 기능은 Example에서 찾기 어렵네요.
: :
: : 비슷한건 Editing Chart- Serie-Marks 에서 mark drag (정확히 기억은 나지 않네요.) 가 하는 걸로
: : 되어 있는 예제가 있습니다. [이 예제를 이용하면 될것 같습니다.]
: : x 값을 이동하면서 y의 값이 표시되는 그런 예제 이었습니다.
: :
: : 쓰다보니 글이 길어졌습니다.
: : 정리하자면 낮은 버전의 TChart로 구현이 가능한지 아니면 7.0 설치 했을때 경로가 잘못 되었다는
: : 컴파일 에러를 어떻게 잡아야 하는지 알고 싶습니다.
: :
: : 부탁드립니다.

+ -

관련 글 리스트
50012 [질문]TChart 에서 임의의 x값에 해당하는 y의 값을 알 수 있나요. unitas 1347 2007/07/21
50046     Re:[질문]TChart 에서 임의의 x값에 해당하는 y의 값을 알 수 있나요. 외랑 1541 2007/07/24
50049         Re:Re:[질문]TChart 에서 임의의 x값에 해당하는 y의 값을 알 수 있나요. - 감사합니다. unitas 1696 2007/07/24
50044     Re:[질문]TChart 에서 임의의 x값에 해당하는 y의 값을 알 수 있나요. smleelms 1823 2007/07/23
50047         Re:Re:[질문]TChart 에서 임의의 x값에 해당하는 y의 값을 알 수 있나요. - 어느정도 해결 되었네요. unitas 1983 2007/07/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.