nicht sicher, ob ich bekam, was Sie fragen, aber sieht aus wie Sie kontinuierliche Funktion folgende Tabelle von Abtastpunkten wie erstellen möchten:
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[]
}
Dies gibt Ihnen die nächsten Nachbarn Style-Funktion Wert. Wenn Sie brauchen, um etwas besser zu nutzen lineare oder kubische oder besser Interpolation zum Beispiel:
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
}
jetzt zum Problem:
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
}
wo:
view_start_time
Zeit des am weitesten links stehenden Pixel in Ihrem Grundstück Ansicht ist,
view_end_time
ist die Zeit des rechtesten Pixels in Ihrer Diagrammansicht
view_size_in_pixels
ist die x-Auflösung in [Pixel] Ihrer Diagrammansicht
[Notizen]
ich das Zeug direkt in SO-Editor Code, so kann es sein, Tippfehler ... der Hoffnung, Sie die mouseHandleCordinate
in einigen Paint-Ereignis aufrufen, anstatt auf Mausbewegungen, die nur um Zeitplan neu streichen sollte ... auch sollten Sie y Ansicht Skala in ähnlicher Weise wie in x Tonleiter habe ich ...
Für weitere Informationen siehe: