Вывод в консоль графика ряда Фурье
Пытаюсь вывести в консоль график прямоугольной волны через синусоиды, но по какой-то причине во 2 и 4 координатных плоскостях амплитуда возрастает

#include "Graphics+.h"
#include "Sphere.h"
int main()
int heg = gr::GetHeg();
Sleep(50);
vector<Line> mas;
vector<Pivot> pt;
float R_,tipar=120;
const int k=5;
int tmp = 1;//увеличивается на 2 при добавлении в массив нового объекта
Line l1(A, tipar * (4 / (tmp * 3.14)), RGB(255, 0, 0));
mas.push_back(l1);
//добавляем векторы в массив
while (!_kbhit())
{
//поворот отрезка
f = 1;
for (int i = 0;i <= k;i++)
{
mas[i].LRotate(f);
f += 2;
}
//рисуем
gr::Line(gr::dcMem, mas[0].Start.x, mas[0].Start.y, mas[0].End.x, mas[0].End.y);
for (int i = 0;i < k;i++)
{
mas[i + 1].SetStart(mas[i].End);
gr::Set_pen(gr::dcMem, mas[i + 1].col, 3);
gr::Line(gr::dcMem, mas[i + 1].Start.x, mas[i + 1].Start.y, mas[i + 1].End.x, mas[i + 1].End.y);
}
//горизонталь
//точки
//выводим из памяти
//стираем
//очистка точек
Sleep(10);
}
cin.get();
return 0;
}
Sphere.h
class Line
{
private:
float t = 0;
public:
float R;
POINT Start, End;
COLORREF col;
Line(POINT strt_, float R_, COLORREF col_)
{
col = col_;
Start = strt_;
R = R_;
End.x = Start.x + R;
End.y = Start.y;
}
Line(POINT strt_, float R_)
{
Start = strt_;
R = R_;
BYTE r, g, b;
r = 50 + rand() % 200;
g = 50 + rand() % 200;
b = 50 + rand() % 200;
col = RGB(r, g, b);
End.x = Start.x + R;
End.y = Start.y;
}
void LRotate(int fi)
{
End.x = Start.x + R * cos(t*fi);
End.y = Start.y - R * sin(t*fi);
t += 0.01;
}
void SetStart(POINT start_) {Start = start_;}
};
class Pivot
{
public:
float x, y;
Pivot(float x_, float y_) :x(x_), y(y_) {}
};
Ответы (1 шт):
Автор решения: Ggo
→ Ссылка
Я ставил строку mas[i + 1].SetStart(mas[i].End); уже после того как повернул все линии, а надо ставить до поворота отрезка
//поворот отрезка
f = 1;
for (int i = 0;i <= k;i++)
{
mas[i].LRotate(f);
if (i == k) continue;
else mas[i + 1].SetStart(mas[i].End);
f += 2;
}