我需要生成函数图
$$ y = \ exp(-0.1x)sin(0.5x)$$
对组成绘图的每个点都使用星号(*),以使绘图垂直向下延伸到页面的下方,每行一个点(一个星号)。
每条印刷线均由适当的编号组成。的空白。
如何在C程序中绘制此函数。 我是C语言的初学者,他只知道-2个D数组, 控制语句,数据输入-输出。
我不知道-递归,函数等。 我不知道,我该如何绘制这样的函数,因为我知道如何绘制金字塔,矩形等。
答案 0 :(得分:2)
好的,所以这是一个完整的解决方案,在终端中使用printf
使用自定义绘图仪。
在顶部有很多定义,您可以对其进行调整以更改绘图大小,精度和界限。
还有一个方程函数,您也可以使用。
使用gcc main.c -lm -o a.exe
之类的代码编译代码。
您会得到类似的东西。
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
#define PLOT_WIDTH (72U)
#define PLOT_HEIGHT (30U)
#define LIMIT_X_MAX (25.0)
#define LIMIT_Y_MAX (1.0)
#define LIMIT_X_MIN (-2.0)
#define LIMIT_Y_MIN (-1.0)
#define PLOT_POINTS (500U)
void print_plot(const bool plot[PLOT_WIDTH][PLOT_HEIGHT])
{
int i;
int j;
for (i = PLOT_HEIGHT - 1; i >= 0; i--)
{
printf("\n");
for (j = 0; j < PLOT_WIDTH; j++)
{
if (plot[j][i])
{
printf("*");
}
else
{
printf("-");
}
}
}
printf("\n");
}
double equation(const double x)
{
return exp(-0.1 * x) * sin(0.5 * x);
}
size_t get_plot_x(const double x)
{
double xx = x - LIMIT_X_MIN;
return (size_t)((PLOT_WIDTH - 1) * (xx / (LIMIT_X_MAX - LIMIT_X_MIN)));
}
double limit_y(const double y)
{
double yy = y;
if (y > LIMIT_Y_MAX) {
yy = LIMIT_Y_MAX;
}
if (y < LIMIT_Y_MIN) {
yy = LIMIT_Y_MIN;
}
return yy;
}
size_t get_plot_y(const double y)
{
double yy = limit_y(y) - LIMIT_Y_MIN;
return (size_t)((PLOT_HEIGHT - 1) * (yy / (LIMIT_Y_MAX - LIMIT_Y_MIN)));
}
double get_next_x(const double x)
{
return x + ((LIMIT_X_MAX - LIMIT_X_MIN) / PLOT_POINTS);
}
void populate_plot(bool plot[PLOT_WIDTH][PLOT_HEIGHT])
{
double x;
double y;
for (x = LIMIT_X_MIN; x < LIMIT_X_MAX; get_next_x(x))
{
y = equation(x);
plot[get_plot_x(x)][get_plot_y(y)] = true;
}
}
int main(void)
{
bool plot_area[PLOT_WIDTH][PLOT_HEIGHT] = { false };
populate_plot(plot_area);
print_plot(plot_area);
return 0;
}
答案 1 :(得分:1)
您想绘制函数y=exp(-0.1x)sin(0.5x)
,对吗?
然后您的第一个任务就是编写函数。
使用一些样本值从C根void main(int argc, char *argv[])
调用新函数,以确保计算正确。确定功能正常后,再进行“绘图”部分的工作。
由于要绘制“向下”(一次一行),因此可能要求解“ x”而不是“ y”。相应地调整C函数。
最后,循环调用您的函数:
void main(int argc, char *argv[])
{
...
for (y=0; y < nlines; y++) {
x = myFunction(y);
myPlot(x, y);
}
...
尝试一下。如果您在此过程中遇到任何挑战,请回传您遇到的任何具体问题。
答案 2 :(得分:-1)
这就是您所需要的。
您需要一个绘图库。这是koolplot,您可以在http://koolplot.codecutter.org/v1.2/koolplot1_2.zip处下载。另外,这是一个类似绘图库http://ndevilla.free.fr/gnuplot/的终端。
您需要一个方程式。
您需要一些C代码。在这里您可以找到示例代码。 http://koolplot.codecutter.org/byExample.html