|
x1 = (x >= max_range[0]) ? 450: (450 / max_range[0] * x);
위 구문이 궁금하신거죠?
현재 x 값을 가지고 Canvas에 대입했을때의 x1 값을 찾는것입니다.
최대 x-range = max_range[0]
x-range가 최대일때 Canvas에서의 x좌표값은 450 인것입니다.
수식으로 표현하면 max_range[0]일때 450이면 x일때는 ? 얼마인가의 문제입니다.
max_range[0] : 450 = x : ?
그러므로
450 * x = max_range[0] * ? ==> 양쪽을 max_range[0]로 나누면?
( 450 * x ) /max_range[0] = ?
? = x1 = 450 * x / max_range[0] ;
근데 위공식으로 x1값을 구하면 x값이 최대값 max_range[0]보다 클때는 450보다 넘어가겠죠
그러므로 x값이 max_range를 넘어가도 x1값이 450 이 넘어가지 않도록 위와같이 코딩한것입니다.
x1 = (x >= max_range[0]) ? 450: (450 / max_range[0] * x);
결론적으로 x값이 토크 최대값보다 클때는 Canvas에 x좌표를 450으로 그리고
최대값보다 작을때는 최대일때 450이니까 그보다 작은값으 그와 같은 비율로 줄여서 Canvas에 그려주는것입니다.
y값도 마찬가지로 canvas 최대값은 320 인것이구요
예를 들어
max_range[0]= 10000 일때
x값이 10000 보다 큰거나 같은경우는 x1= 450 이구요
x값이 100 이면 450/100 = 4.5
x값이 500 이면 450 / 20 = 22.5 가 되는것입니다.
x값이 1000 이면 450 / 10 = 45 가 되는것입니다.
p.s
이정도는 중학교 1,2학년 수학정도 될것 같은데...
저도 그렇지만 요즘 프로그램하면서 수학이 약한것을 많이 느낍니다.
학교다닐때 좀 열심히 해 놓을걸 하는 아쉬움이....
카리스 님이 쓰신 글 :
: 그래프 그리는 건데여.. 토크와 전압관계를 그리는 거에여...
: 그래프의 범위는
: void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
: {
: PaintBox1->Canvas->Pen->Color = clGray;
: PaintBox1->Canvas->MoveTo(0, 0);
: PaintBox1->Canvas->LineTo(0, 320);
: PaintBox1->Canvas->LineTo(450, 320);
: PaintBox1->Canvas->LineTo(450, 0);
: PaintBox1->Canvas->LineTo(0, 0);
: 이런 식이구영...
:
: if(graph_view_flag[0])
: ShowTVGraph(tor_val[data_count], vol_val[data_count]);
:
: 여기서 ShowTVGraph함수는
:
: void __fastcall TForm1::ShowTVGraph(double x, double y)
: {
: static double x_old, y_old;
: double x1, y1;
:
: x1 = (x >= max_range[0]) ? 450: (450 / max_range[0] * x);
: y1 = (y >= max_range[7]) ? 0: (320 - (320 / max_range[7] * y));
:
: if(data_count1 >= 1) {
: PaintBox1->Canvas->Pen->Color = (TColor)0x00C08080;
: PaintBox1->Canvas->MoveTo(x_old, y_old);
: PaintBox1->Canvas->LineTo(x1, y1);
: }
:
: x_old = x1;
: y_old = y1;
: }
: max_range[0]는 토크의 최대값 같구영... 그런데..
: 여기서 x1 = (x >= max_range[0]) ? 450: (450 / max_range[0] * x);
: 이부분이 이해가 안가여...
|