首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指数函数的作图

指数函数的作图
EN

Stack Overflow用户
提问于 2018-12-23 03:16:32
回答 2查看 661关注 0票数 1

我需要生成函数$$ y=\exp(-0.1x)sin(0.5x) $$的曲线图

对组成绘图的每个点使用星号(*),使绘图垂直向下运行,每行一个点(一个星号)。每一打印行由适当的编号组成。空白处。

我该如何在C程序中绘制这个函数。我是一个C的初学者,只知道-2D数组,控制语句,数据输入-output。

我不知道-Recursion,函数等,我不知道,我应该如何绘制这样的函数,因为我知道如何绘制金字塔,矩形等。

EN

回答 2

Stack Overflow用户

发布于 2018-12-23 04:52:27

好的,这是一个完整的解决方案,在终端中使用printf的自定义绘图仪。

在顶部有一堆定义,您可以调整这些定义来更改绘图大小、精度和限制。

有一个方程式函数,你也可以使用它。

使用类似gcc main.c -lm -o a.exe的代码编译代码。

你会得到类似这样的东西。

代码语言:javascript
复制
#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; x = 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;
}
票数 3
EN

Stack Overflow用户

发布于 2018-12-23 03:28:21

你想绘制函数,

  1. y=exp(-0.1x)sin(0.5x),对吗?

使用一些示例值从C根void main(int argc, char *argv[])调用新函数,以确保计算正确。

  • 既然你想画“下”(一次一行),那么你可能想要求解"x",而不是"y“。调整你的C函数accordingly.

  • Finally,循环调用你的函数:

对于(y=0;y

  • 尝试一下。如果您在此过程中遇到任何挑战,请回复您的任何具体问题。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53898625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档