1

Тема: Соеденить N равноудаленных точек на суперэллипсе

13. Поищите в веб информацию о суперэллипсе, чтобы лучше представит его себе.
Напишите программу, которая рисует звездообразные шаблоны, соединяя точки, лежащие на суперэллипсе. Пусть параметры а, b, m, n и N вводятся как аргументы. Выберите N точек на суперэллипсе, определенном параметрами a, b, n и m. Пусть эти точки лежат на равном расстоянии друг от друга. Соедините каждую из этих N точек с одной или несколькими другими точками (если хотите, можете задать количество таких точек с помощью дополнительного аргумента или использовать число N-1, т.е. все другие точки).

Здравствуйте (:
Сейчас прохожу 12 главу Страуструпа "Принципы и Практика использования С++", начинается работа с графикой, используя FTLK. Выше приводится текст из упражнения 13.

Есть вектор содержащий координаты точек, по которым строится суперэллипс:

//------------------------------------------------------------------------------
 
int sgn(double d) {
        
    if (d < 0)
        return -1;
    if (d == 0)
        return 0;
    if (d > 0)
        return 1;
    // exception
    error("sgn: something gone wrong\n");
}


//------------------------------------------------------------------------------

vector<Point> superellipse(double a, double b, double m, double n, double precision = 0.01, int xCenter = 200, int yCenter = 200) {
    if (precision >= 1.00 || precision < 0.001)
        error ("use numbers from range [0.001 ; 1.00) for precision parametr\n");

    vector<Point> points;
    Point temp;
    Point P;
    for (double d = -1.0; d < 1.00; d += precision) {
        double t = d*M_PI;
        int x = pow((abs(cos(t))),2.0/m) * a * sgn(cos(t));
        int y = pow((abs(sin(t))),2.0/n) * b * sgn(sin(t));
        P = Point(x + xCenter, y + yCenter);
        if (P != temp) // ignore dublicates
            points.push_back(P);
        temp = P;
    }

    return points;
}

//------------------------------------------------------------------------------

Я не особо силен в математике, мозги уже несколько дней набекрень с этим заданием.
Допоможіть будь-ласка (:

2

Re: Соеденить N равноудаленных точек на суперэллипсе

По коду допоможемо. Та перше ви оформите тему українською мовою, як того вимагає наше товариство. :)

I belong to the Dead Generation.

3

Re: Соеденить N равноудаленных точек на суперэллипсе

1. Про мову вже сказали.
2. Трохи незрозуміла умова (може, тому, що я болгарську не дуже знаю). Точки беруться на рівній відстані? А як вимірюється відстань - на площині за Евклідом чи вздовж кривої? Чи, може, мається на увазі параметричний вираз із однаковим кроком (як в програмі)?
3. А в чому, власне, проблема? Точки з'єднати?