使用c ++创建sin / cos图

时间:2016-11-27 19:39:46

标签: c++ codeblocks

我正在用c ++编写一些代码,在一张图上显示两个图。一个函数需要是sin函数,另一个函数需要是cos函数。

我有sin图表和cos图表所需的代码,但我无法将它们一起显示。

#include <cmath>
#include <iostream>
#include <cstdlib>

using namespace std;
const float PI = 3.1459265;
int main()
{
    int size = 80, height = 21;
    char chart[height][size];
    size = 80, height = 21;
    double cosx[size];
    double sinx[size];

    {
        for (int i=0; i<size; i++)
            cosx[i] = 10*cos(i/4.5);

        for (int i=0; i<height; i++)
            for (int j=0; j<size; j++)
                if (-.01 < 10 - i - round(cosx[j]) && 10 - i - round(cosx[j]) <0.01)
                    chart[i][j] = 'x';
                else if (i==height/2)
                    chart[i][j] = '-';
                else
                    chart[i][j] = ' ';

        for (int i=0; i<height; i++)
            for (int j=0; j<size; j++)
                cout << chart[i][j];

        for (int i=0; i<size; i++)
            sinx[i] = 10*sin(i/4.5);

        for (int i=0; i<height; i++)
            for (int j=0; j<size; j++)

        if (-.01 < 10 - i - round(sinx[j]) && 10 - i - round(sinx[j]) <0.01)
            chart[i][j] = 'x';
        else if (i==height/2)
            chart[i][j] = '-';
        else
            chart[i][j] = ' ';

        for (int i=0; i<height; i++)
            for (int j=0; j<size; j++)
                cout << chart[i][j];
    }
}

1 个答案:

答案 0 :(得分:0)

您不会在图表的每一行后打印换行符。替换

for (int i=0; i<height; i++)
    for (int j=0; j<size; j++)
       cout << chart[i][j];

for (int i=0; i<height; i++) {
    for (int j=0; j<size; j++) {
       cout << chart[i][j];
    }
    cout << '\n';
}

然后它适合我。

然而,这似乎是一种有点令人费解的方式。如果是我,我会从函数值计算x-es的坐标,而不是扫描并检查每个坐标是否接近函数值。例如:

#include <cmath>
#include <iostream>
#include <string>
#include <vector>

int main()
{
  int size = 80, height = 21;

  // Start with an empty chart (lots of spaces and a line in the middle)
  std::vector<std::string> chart(height, std::string(size, ' '));
  chart[height/2] = std::string(size, '-');

  // Then just put x-es where the function should be plotted
  for(int i = 0; i < size; ++i) {
    chart[static_cast<int>(std::round(10 * std::cos(i / 4.5) + 10))][i] = 'x';
  }

  // and print the whole shebang
  for(auto &&s : chart) {
    std::cout << s << '\n';
  }
}