Недавно нам в классе сказали работать над заданием, в котором мы должны были построить некоторые инженерные функции. Их было несколько, поэтому я беру только косинус в качестве примера. Мы должны были написать и вызвать несколько функций, которые будут принимать реальные координаты, а затем отображать их в пиксельные координаты, а также получать значения y на основе заданных массивов значений x. Я думаю, что все в порядке с функциями, но теперь, когда они все записаны, я понятия не имею, какую функцию использовать в рисовании, чтобы иметь возможность фактически нарисовать эту функцию косинуса. Я в основном хочу получить совет о том, как я могу продолжать и правильно вызывать эти функции в какой функции рисования, чтобы можно было просто отобразить эту косинусную кривую. Я буду признателен за любую помощь, которую смогу получить.
Я пытался использовать функцию ofDrawCurve для построения точек, но это не позволяет мне использовать мои массивы в списке аргументов. ofXPlotter, похоже, тоже не работает, хотя я не совсем уверен, что использовал его правильно.
Вот мои функции для построения точек и отображения:
int getXSamples(float xmin, float xmax, float step, float x[])
{
int n;
n = (xmax - xmin) / step + 1;
for (int i = 0; i < n; i++)
{
x[i] = xmin + i * step;
}
return n;
}
void getDampedCosSamples(int n, float x[], float y[], float alpha, float w)
{
for (int i = 0; i < n; i++)
{
y[i] = exp(-alpha * x[i])*cos(w*x[i]);
}
}
void getGaussianSamples(int n, float x[], float y[], float alpha, float mu)
{
for (int i = 0; i < n; i++)
{
y[i] = exp(-alpha * (x[i] - mu)*(x[i] - mu));
}
}
void getSincSamples(int n, float x[], float y[], float alpha)
{
for (int i = 0; i < n; i++)
{
y[i] = (sin(alpha*PI*x[i]) / (alpha*PI*x[i]));
}
}
float map(float in, float inMin, float inMax, float outMin, float outMax)
{
float m, b, out;
m = (outMax - outMin) / (inMax - inMin);
b = outMax - m * inMax;
out = m * in + b;
return(out);
}
void map_vec(int n, float in[], float out[], float inMin, float inMax, float outMin, float outMax)
{
float m, b;
m = (outMax - outMin) / (inMax - inMin);
b = outMax - m * inMax;
for (int i = 0; i < n; i++)
{
out[i] = m * in[i] + b;
}
}