2017-05-31 130 views
-2

Y軸的曲線圖將被自動縮放,這取決於未來休耕函數的值。創建C++視覺工作室

void mouseHandleCordinate(double val){ 
    // include graph function. 
} 

所以我想創建劇情圖時間。 X軸代表時間,Y代表函數以上的值。我如何創建上面的圖形功能。

始終將數據傳遞到void mouseHandleCordinate(double val)功能。 作爲例子:

val >>> 2.1,3,1,6,7,5.5,0,9,5,6,7,3.6,2,5,6,7,8,1,2,3,4 >> represent double val 
Time>>> 21,20,19,18,17,......., 4,3,2,1 second 

回答

0

不知道我得到了你問什麼,但看起來像你想創建以下就像個採樣點的表連續函數:

const int N=21; // number of samples 
const double t0=21.0,t1=1.0; // start,end times 
const double val[N]={ 2.1,3,1,6,7,5.5,0,9,5,6,7,3.6,2,5,6,7,8,1,2,3,4 }; 

double f(double t) // nearest 
{ 
t = (t-t0)/(t1-t0); // time scaled to <0,1> 
t*= (N-1); // time scaled to <0,N) .. index in table 
int ix=t; // convert to closest index in val[] 
if ((ix<0)||(ix>=N)) return 0.0; // handle undefined times 
return val[ix]; // return closest point in val[] 
} 

這會給你的近鄰風格功能值。如果你需要,例如更好的東西使用線性或立方或更好的插值:

double f(double t) // linear 
{ 
t = (t-t0)/(t1-t0); // time scaled to <0,1> 
t*= (N-1); // time scaled to <0,N) .. index in table 
int ix=t; // convert to closest index in val[] 
if ((ix<0)||(ix>=N)) return 0.0; // handle undefined times 
if (ix==N-1) return val[ix]; // return closest point in val[] if on edge 
// linear interpolation 
t = t-floor(t); // distance of time between ix and ix+1 points scaled to <0,1> 
return val[ix]+(val[ix+1]-val[ix])*t; // return linear interpolated value 
} 

我們您的問題:

void mouseHandleCordinate(double mx) // mouse x coordinate in [pixels] I assume 
{ 
double t,x,y,x0,y0 

// plot 
x=0; 
y=f(view_start_time) 
for (t=view_start_time;t<=view_end_time;t+=(view_end_time-view_start_time)/view_size_in_pixels,x0=x,x++) 
    { 
    y0=y; y=f(t); 
    // render line x0,y0,x,y 
    } 

// mouse highlight 
t = view_start_time+((view_end_time-view_start_time)*mx/view_size_in_pixels); 
x = mx; 
y = f(t); 
// render point x,y ... for example with circle r = 16 pixels 
} 

其中:
view_start_time是最左邊的像素的時間在你的情節視圖
view_end_time是您的繪圖視圖中最右邊像素的時間
view_size_in_pixels是您的繪圖視圖的[像素] x分辨率

[注意事項]

我的東西直接在SO編輯代碼,所以可能會有錯別字...... 希望你在一些Paint事件上移動鼠標只應安排重繪順序調用mouseHandleCordinate代替......你也應該以類似的方式對我用x縮放比例加上y視圖比例...

欲瞭解更多信息,請參閱: