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

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

Восстановить пароль Регистрация
 
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
03.05.2013, 17:49     Соеденить N равноудаленных точек на суперэллипсе #1
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 равноудаленных точек на суперэллипсе
Посмотрите здесь:

Как соеденить 2 строки? C++
C++ на плоскости задано множество точек. Найти все подмножества точек, лежащих на одной прямой.
C++ Задан массив точек. Найти номера наиболее и наименее удаленных друг от друга точек.
C++ Определить, сколько точек пересечения имеют прямая и окружность и найти координаты этих точек
C++ Для параболы на промежутке [0,1] найти значение производной в десяти равноудаленных точках. С закругленных найденных значений сформировать множество А
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
17.05.2013, 11:21  [ТС]     Соеденить N равноудаленных точек на суперэллипсе #2
посоветуйте пожалуйста где ещё можно спросить (:
vxg
Модератор
 Аватар для vxg
2639 / 1650 / 156
Регистрация: 13.01.2012
Сообщений: 6,212
17.05.2013, 11:25     Соеденить N равноудаленных точек на суперэллипсе #3
если то что на рисунке сделали вы не означает ли это что вы сделали задание? ведь по заданию нужно построить эту фигуру. или нет?
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
20.05.2013, 14:36  [ТС]     Соеденить N равноудаленных точек на суперэллипсе #4
Цитата Сообщение от vxg Посмотреть сообщение
если то что на рисунке сделали вы не означает ли это что вы сделали задание? ведь по заданию нужно построить эту фигуру. или нет?
то что на рисунке сделал я,
вектор содержит конечное множество реальных точек по которым строится суперэллипс,
среди этих точек нужно найти N таких, чтобы они были вершинами правильного многоугольника, по которым нужно построить звезду:
Миниатюры
Соеденить N равноудаленных точек на суперэллипсе  
vxg
Модератор
 Аватар для vxg
2639 / 1650 / 156
Регистрация: 13.01.2012
Сообщений: 6,212
20.05.2013, 14:46     Соеденить N равноудаленных точек на суперэллипсе #5
Цитата Сообщение от Cynacyn Посмотреть сообщение
нужно построить звезду
выберите любую точку на супер эллипсе, переберите все остальные точки, если расстояние до анализируемой точки вас устраивает - включайте ее в свою фигуру и стройте до нее линию
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
Модератор
 Аватар для vxg
2639 / 1650 / 156
Регистрация: 13.01.2012
Сообщений: 6,212
20.05.2013, 23:39     Соеденить N равноудаленных точек на суперэллипсе #7
Цитата Сообщение от Cynacyn Посмотреть сообщение
как
нужно уточнить условия. там сказано
Цитата Сообщение от Cynacyn Посмотреть сообщение
Выберите N точек на суперэллипсе
Цитата Сообщение от Cynacyn Посмотреть сообщение
Пусть эти точки лежат на равном расстоянии друг от друга. Соедините каждую из этих N точек с одной или несколькими другими точками
что хотел сказать человек произнося "на равном расстоянии"? вот я взял точку. и еще одну. я могу найти, наверное, минимум еще одну лежащую на таком же расстоянии (построив окружность с центром в первой точке и проходящую через вторую). однако получившаяся фигура будет уродом. этого ли мы хотим?
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
21.05.2013, 10:18  [ТС]     Соеденить N равноудаленных точек на суперэллипсе #8
Цитата Сообщение от vxg Посмотреть сообщение
нужно уточнить условия. там сказано


что хотел сказать человек произнося "на равном расстоянии"? вот я взял точку. и еще одну. я могу найти, наверное, минимум еще одну лежащую на таком же расстоянии (построив окружность с центром в первой точке и проходящую через вторую). однако получившаяся фигура будет уродом. этого ли мы хотим?
думаю речь о том, чтобы расстояние от первой точки до второй было равным расстоянию от второй до третей, от третей до четвертой... и от последней до первой
vxg
Модератор
 Аватар для vxg
2639 / 1650 / 156
Регистрация: 13.01.2012
Сообщений: 6,212
21.05.2013, 13:06     Соеденить N равноудаленных точек на суперэллипсе #9
1 взять одну из точек
2 провести вокруг нее окружность заданного радиуса
3 в точке пересечения окружности и следующего лепестка поставить новую точку
4 повторить для нее такие же процедуры
---
полученная фигура может быть 1 бесконечной 2 не циклической (то есть обойдя все лепестки вы можете получить отличное от заданного расстояние между первой и крайней точкой)
Cynacyn
 Аватар для 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
Модератор
 Аватар для vxg
2639 / 1650 / 156
Регистрация: 13.01.2012
Сообщений: 6,212
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++
C++ В заданном множестве точек плоскости найти количество точек в каждой из четвертей
C++ Как соеденить две DLL воедино?

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

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

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

Текущее время: 00:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru