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

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

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

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

03.05.2013, 17:49. Просмотров 963. Ответов 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++
Приветствую! Вот задание из учебника: 1.Прочитайте в вектор набор целых чисел. Вычислите и отобразите сумму каждой пары смежных...

Для параболы на промежутке [0,1] найти значение производной в десяти равноудаленных точках. С закругленных найденных значений сформировать множество А - C++
Если не трудно.....

Соеденить 3 кода - C++
Здравствуйте, необходимо соединить 3 программы (Допустим, чтобы выбрать шифрование - нажать &quot;1&quot;, дешифрование - &quot;2&quot;, шифрование...

Как соеденить 2 строки? - C++
у меня есть 2 строки char *c1,*c2 как их обьеденить?

Дерево (соеденить узлы одного уровня) - C++
Здравствуйте. Прошу помощи, никак не могу понять данный алгоритм для соединения узлов на одном уровне. Буду очень признателен если кто-то...

Как соеденить две DLL воедино? - C++
Всем привет. Задался вопросом, возможно ли как-нибудь соеденить две DLL библиотеки воедино?

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


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

ох..
vxg
Модератор
3155 / 1957 / 218
Регистрация: 13.01.2012
Сообщений: 7,487
22.05.2013, 13:57 #11
Цитата Сообщение от Cynacyn Посмотреть сообщение
по каким критериям необходимо задавать радиус
этого я не знаю. наверное от балды. вам же сказали построить какую-то звезду. ну так вот она - какая-то звезда. или я недопонимаю условий.
Цитата Сообщение от Cynacyn Посмотреть сообщение
следующего лепестка
суперэллипс он как бы цветок - всего 4 лепестка
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
23.05.2013, 10:05  [ТС] #12
Цитата Сообщение от vxg Посмотреть сообщение
этого я не знаю. наверное от балды. вам же сказали построить какую-то звезду. ну так вот она - какая-то звезда. или я недопонимаю условий.

суперэллипс он как бы цветок - всего 4 лепестка
я всё ещё в замешательстве,
спасибо, энивэй (:
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2013, 10:05
Привет! Вот еще темы с ответами:

В заданном множестве точек плоскости найти количество точек в каждой из четвертей - C++
В заданном множестве точек плоскости найти количество точек в каждой из четвертей. Знаете я не могу понять - а как задано это...

Найти число точек и сумму расстояний от первой точки до остальных точек - C++
Вектора X и Y задаются вводом; n — размер каждого из векторов X и Y. Пара (Xk, Yk) представляет координаты одной из n точек на...

В заданном множестве точек плоскости найти количество точек в каждой из четвертей - C++
В заданном множестве точек плоскости найти количество точек в каждой из четвертей

Ввести координаты точек. Вычислить расстояния от всех точек до точки, введенной последней - C++
С клавиатуры вводятся координаты точек на плоскости в виде строк, представляющих пару в формате “(x,y)”. Строка должна быть...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.05.2013, 10:05
Ответ Создать тему
Опции темы

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