Как написать уравнение для равностороннего многоугольника

Не получается правильно вывести формулу.

Есть формула для равностороннего многоугольника

введите сюда описание изображения

Я пытаюсь его перевести в код чтоб нарисовать пяти-конечную звезду введите сюда описание изображения

Вот как я перевёл уравнение :

_mytKrg.integerVector.append(_mytKrg.X + (_mytKrg.R * cos(2*sin(1)+M_PI*3)/(2*5))/((cos(2*sin(cos(1*5*grad_kol_toch)))+M_PI*3)/(2*5))); //точка Х
_mytKrg.integerVector.append(_mytKrg.Y + (_mytKrg.R * sin(2*cos(1)+M_PI*3)/(2*5))/((sin(2*cos(sin(1*5*grad_kol_toch)))+M_PI*3)/(2*5))); //точка У

вот результат введите сюда описание изображения

Вот весь код :

zvezda.pro

#ifndef KRUG_QT_H
#define KRUG_QT_H

#include <QMainWindow>
#include <QDebug>
#include <QPainter>
#include <QPen>
#include <QFont>
#include <QtMath>
#include <QPointF>

// структура для отрисовки круга
struct strKryg
{
    strKryg()
    {
        R = 0.0; kol_toch = 0;
        tocka_1 = 0; tocka_2 = 0;
        X = 0.0; Y = 0.0;
        integerVector.clear();
        point_for_line.clear();
    }
    float R;                            // радиус
    int kol_toch;                       // колич точек которые будут формировать круг
    int tocka_1;                        // точка выреза начало
    int tocka_2;                        // точка выреза конец
    float X; float Y;                   // расположение икса и игрика

    QVector<float> integerVector;       // вектор куда кладём точки (Х и У)
    QVector<QPointF> point_for_line;    // вектор куда кладём QPointf для line
};

class Krug_qt : public QMainWindow
{
    Q_OBJECT

public:
    Krug_qt(QWidget *parent = 0);
    ~Krug_qt();

    void krygVertexArray();
    void vvodZnach(float R, int kol_toch);
    void vvodZnach(float R, int kol_toch, float X, float Y);
    void vvodZnach(float R, int kol_toch, int tocka_1, int tocka_2, float X, float Y);



protected:
    void paintEvent(QPaintEvent *event);
    strKryg     _mytKrg;    // структура круга

};

#endif // KRUG_QT_H

zvezda.cpp

#include "zvezda.h"

Krug_qt::Krug_qt(QWidget *parent)
    : QMainWindow(parent)
{

}

Krug_qt::~Krug_qt()
{

}

void Krug_qt::krygVertexArray()
{
    float grad = 360.0/_mytKrg.kol_toch;
    float grad_kol_toch = 0.0;
    // градусы*M_PI/180 = радианы
    int j;
    for (j = 0; j < _mytKrg.kol_toch; ++j){

        _mytKrg.integerVector.append(_mytKrg.X + (_mytKrg.R * cos(2*sin(1)+M_PI*3)/(2*5))/((cos(2*sin(cos(1*5*grad_kol_toch)))+M_PI*3)/(2*5)));
        _mytKrg.integerVector.append(_mytKrg.Y + (_mytKrg.R * sin(2*cos(1)+M_PI*3)/(2*5))/((sin(2*cos(sin(1*5*grad_kol_toch)))+M_PI*3)/(2*5)));

         grad_kol_toch = grad_kol_toch + grad;
    }
}
void Krug_qt::vvodZnach(float R, int kol_toch)
{
    _mytKrg.R = R;
    _mytKrg.kol_toch = kol_toch;
    _mytKrg.tocka_1 = 0;
    _mytKrg.tocka_2 = 0;
    _mytKrg.X = 0.0;
    _mytKrg.Y = 0.0;
}

void Krug_qt::vvodZnach(float R, int kol_toch, float X, float Y)
{
    _mytKrg.R = R;
    _mytKrg.kol_toch = kol_toch;
    _mytKrg.tocka_1 = 0;
    _mytKrg.tocka_2 = 0;
    _mytKrg.X = X;
    _mytKrg.Y = Y;
}

void Krug_qt::vvodZnach(float R, int kol_toch, int tocka_1, int tocka_2, float X, float Y)
{
    _mytKrg.R = R;
    _mytKrg.kol_toch = kol_toch;
    _mytKrg.tocka_1 = tocka_1;
    _mytKrg.tocka_2 = tocka_2;
    _mytKrg.X = 0.0;
    _mytKrg.Y = 0.0;
}

void Krug_qt::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);                                   // Создаём объект отрисовщика
    QPen pen_abris(Qt::black, 2, Qt::SolidLine, Qt::FlatCap); // кисть обрисовки (компаса)
    painter.setRenderHint(QPainter::Antialiasing);            // убираем резкие кубики
    painter.setPen(pen_abris);                                // Устанавливаем кисть обрисовки
     vvodZnach(200, 180, 600, 400);
    krygVertexArray();                                        // Набираем массив
 
 
    int i; bool d_t;  int tocka_1; int tocka_2;            // используемые переменные
    d_t = true; i = 0; tocka_1 =_mytKrg.tocka_1; tocka_2 = _mytKrg.tocka_2;  // ТОЧКА ОТРИСОВКИ
    for( ; i<_mytKrg.kol_toch; ++i)
    {
        if(i > tocka_1)          // угол "вырезания"  начало
        {
            d_t =  false;
            if( i < tocka_2)      // угол "вырезания" конец
            {
                tocka_1 = i*2;
                d_t = true;
            }
        }
        if(d_t == true)
        {
            // это отдельно все работает полноценный круг
            tocka_2 = tocka_1+1;
            painter.drawPoint(QPointF(_mytKrg.integerVector[tocka_1],_mytKrg.integerVector[tocka_2]));
            tocka_1 = tocka_1 +2;

            qDebug() << "i :"<<i;
            qDebug() << "_mytKrg.tocka_1 :"<<_mytKrg.tocka_1;
         }
    }
}

Тут сдвинулась моя задача, теперь застрял на переводе полярных координат в декартовые координаты

вот результат:

float grad = 360.0/_mytKrg.kol_toch;
float grad_kol_toch = 0.0;
// градусы*M_PI/180 = радианы
int j; float chisl; float znam; float k = 1; float n =5; float m =3;
for (j = 0; j < _mytKrg.kol_toch; ++j)
{
    chisl = cos((2*asin(k)+M_PI/180*m)/(2*n));
    znam  = cos((2*asin(k*cos(n*grad_kol_toch)+M_PI/180))/(2*n));

    _mytKrg.integerVector.append(_mytKrg.X + (_mytKrg.R * (chisl/znam) * cos(grad_kol_toch*M_PI/180.0) ));
    _mytKrg.integerVector.append(_mytKrg.Y + (_mytKrg.R * (chisl/znam) * sin(grad_kol_toch*M_PI/180.0) ));

    grad_kol_toch = grad_kol_toch + grad;
}

введите сюда описание изображения


Ответы (0 шт):