Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
#1

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

03.05.2013, 17:49. Просмотров 927. Ответов 11
Метки нет (Все метки)

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

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//------------------------------------------------------------------------------
 
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;
}
 
//------------------------------------------------------------------------------
Я не особо силен в математике, мозги уже несколько дней набекрень с этим заданием. Помогите позязя.

Вот так выглядит superellipse(a = 7, b = 13, m = 0.5, n = 0.9, precision = 0.01, xCenter = 300, yCenter =300) http://iceimg.com/i/95/36/d9621ad8e7.png
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2013, 17:49     Соеденить N равноудаленных точек на суперэллипсе
Посмотрите здесь:

C++ пара точек
C++ множество точек
Массив точек C++
Как соеденить 2 строки? C++
C++ Множество точек m
C++ Для параболы на промежутке [0,1] найти значение производной в десяти равноудаленных точках. С закругленных найденных значений сформировать множество А
Просуммировать количество точек в наборе домино, где количество точек на каждом конце может быть от 1 до n C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
17.05.2013, 11:21  [ТС]     Соеденить N равноудаленных точек на суперэллипсе #2
посоветуйте пожалуйста где ещё можно спросить (:
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,123
17.05.2013, 11:25     Соеденить N равноудаленных точек на суперэллипсе #3
если то что на рисунке сделали вы не означает ли это что вы сделали задание? ведь по заданию нужно построить эту фигуру. или нет?
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
20.05.2013, 14:36  [ТС]     Соеденить N равноудаленных точек на суперэллипсе #4
Цитата Сообщение от vxg Посмотреть сообщение
если то что на рисунке сделали вы не означает ли это что вы сделали задание? ведь по заданию нужно построить эту фигуру. или нет?
то что на рисунке сделал я,
вектор содержит конечное множество реальных точек по которым строится суперэллипс,
среди этих точек нужно найти N таких, чтобы они были вершинами правильного многоугольника, по которым нужно построить звезду:
Миниатюры
Соеденить N равноудаленных точек на суперэллипсе  
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,123
20.05.2013, 14:46     Соеденить N равноудаленных точек на суперэллипсе #5
Цитата Сообщение от Cynacyn Посмотреть сообщение
нужно построить звезду
выберите любую точку на супер эллипсе, переберите все остальные точки, если расстояние до анализируемой точки вас устраивает - включайте ее в свою фигуру и стройте до нее линию
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
20.05.2013, 18:39  [ТС]     Соеденить N равноудаленных точек на суперэллипсе #6
Цитата Сообщение от vxg Посмотреть сообщение
выберите любую точку на супер эллипсе, переберите все остальные точки, если расстояние до анализируемой точки вас устраивает - включайте ее в свою фигуру и стройте до нее линию
да в общем я понимаю что именно так и нужно сделать
но у меня трудности именно с проверкой и условием

допустим даже есть вектор, который содержит в себе объекты класса,
C++
1
2
3
4
5
struct Distance {
Point A;
Point B;
double distanceAB;
};
для всех возможных комбинаций точек из _points без повторений ( в том смысле что есть комбинации points[0] - points[1], points[0] - points[2] ... points[0] - points[points.size()-1] ... points[points.size()-2] - points[points.size()-1])

но как среди этого множества осуществить правильную выборку не могу понять
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,123
20.05.2013, 23:39     Соеденить N равноудаленных точек на суперэллипсе #7
Цитата Сообщение от Cynacyn Посмотреть сообщение
как
нужно уточнить условия. там сказано
Цитата Сообщение от Cynacyn Посмотреть сообщение
Выберите N точек на суперэллипсе
Цитата Сообщение от Cynacyn Посмотреть сообщение
Пусть эти точки лежат на равном расстоянии друг от друга. Соедините каждую из этих N точек с одной или несколькими другими точками
что хотел сказать человек произнося "на равном расстоянии"? вот я взял точку. и еще одну. я могу найти, наверное, минимум еще одну лежащую на таком же расстоянии (построив окружность с центром в первой точке и проходящую через вторую). однако получившаяся фигура будет уродом. этого ли мы хотим?
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
21.05.2013, 10:18  [ТС]     Соеденить N равноудаленных точек на суперэллипсе #8
Цитата Сообщение от vxg Посмотреть сообщение
нужно уточнить условия. там сказано


что хотел сказать человек произнося "на равном расстоянии"? вот я взял точку. и еще одну. я могу найти, наверное, минимум еще одну лежащую на таком же расстоянии (построив окружность с центром в первой точке и проходящую через вторую). однако получившаяся фигура будет уродом. этого ли мы хотим?
думаю речь о том, чтобы расстояние от первой точки до второй было равным расстоянию от второй до третей, от третей до четвертой... и от последней до первой
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,123
21.05.2013, 13:06     Соеденить N равноудаленных точек на суперэллипсе #9
1 взять одну из точек
2 провести вокруг нее окружность заданного радиуса
3 в точке пересечения окружности и следующего лепестка поставить новую точку
4 повторить для нее такие же процедуры
---
полученная фигура может быть 1 бесконечной 2 не циклической (то есть обойдя все лепестки вы можете получить отличное от заданного расстояние между первой и крайней точкой)
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
21.05.2013, 17:56  [ТС]     Соеденить N равноудаленных точек на суперэллипсе #10
Цитата Сообщение от vxg Посмотреть сообщение
1 взять одну из точек
2 провести вокруг нее окружность заданного радиуса
3 в точке пересечения окружности и следующего лепестка поставить новую точку
4 повторить для нее такие же процедуры
---
полученная фигура может быть 1 бесконечной 2 не циклической (то есть обойдя все лепестки вы можете получить отличное от заданного расстояние между первой и крайней точкой)
я не понимаю что значит:
- "заданного радиуса" по каким критериям необходимо задавать радиус относительно параметров по которым строится эллипс a, b, n, m и числа точекN?
- "следующего лепестка"?

ох..
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,123
22.05.2013, 13:57     Соеденить N равноудаленных точек на суперэллипсе #11
Цитата Сообщение от Cynacyn Посмотреть сообщение
по каким критериям необходимо задавать радиус
этого я не знаю. наверное от балды. вам же сказали построить какую-то звезду. ну так вот она - какая-то звезда. или я недопонимаю условий.
Цитата Сообщение от Cynacyn Посмотреть сообщение
следующего лепестка
суперэллипс он как бы цветок - всего 4 лепестка
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2013, 10:05     Соеденить N равноудаленных точек на суперэллипсе
Еще ссылки по теме:

C++ Как соеденить две DLL воедино?
Дерево (соеденить узлы одного уровня) C++
Найти суммы пар элементов, равноудаленных от начала и конца массива C++
C++ Получить координаты точек сферы, равноотстоящие от соседних точек
C++ Соеденить 3 кода

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
23.05.2013, 10:05  [ТС]     Соеденить N равноудаленных точек на суперэллипсе #12
Цитата Сообщение от vxg Посмотреть сообщение
этого я не знаю. наверное от балды. вам же сказали построить какую-то звезду. ну так вот она - какая-то звезда. или я недопонимаю условий.

суперэллипс он как бы цветок - всего 4 лепестка
я всё ещё в замешательстве,
спасибо, энивэй (:
Yandex
Объявления
23.05.2013, 10:05     Соеденить N равноудаленных точек на суперэллипсе
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru