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

Реализация класса функций принадлежности треугольника и трапеций - C++

Восстановить пароль Регистрация
 
oksanaBM
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
17.05.2014, 10:19     Реализация класса функций принадлежности треугольника и трапеций #1
Здравствуйте. Передо мной стоит такая задача. Необходимо реализовать задачу поиска регрессионной зависимости в условиях нечеткой логики. Для этого надо прописать класс функций принадлежности. В котором у меня будут две функции: для построения треугольника и для построения трапеции.
C
1
2
3
4
5
6
class funcMembership
{
public:
    double funcTriangle(double x,double a, double b);//треугольная функция принадлежности
    double funcTrapezoid(double x,double a, double b);//трапециедальная функция принадлежности
};
Формулы для функций в картинках.
Как я поняла, для треугольника я задаю координаты х точек на основании, а координату х для пика должна вычислить. Так? Собственно, для трапеции такая же ситуация, координаты х пиков я должна тоже вычислить?
Миниатюры
Реализация класса функций принадлежности треугольника и трапеций   Реализация класса функций принадлежности треугольника и трапеций  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2014, 10:19     Реализация класса функций принадлежности треугольника и трапеций
Посмотрите здесь:

функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д. C++
C++ Вызов функций класса Dictionary функциями дружественного класса
C++ Перегрузка функций. Реализация функций
C++ Реализация функций
Реализация математических функций C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
oksanaBM
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
17.05.2014, 10:33  [ТС]     Реализация класса функций принадлежности треугольника и трапеций #2
Нагуглила вот такую реализацию функции треугольника, но совсем не понимаю ее. Задаются значения 1о и high, которые определяют базовые вершины треугольника. Высшая точка задается как high/2.
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
//функция принадлежности в виде треугольника
public float spikeProfile (float value, float lo, float high)
{
    float peak;
    value += (-lo);
    if ((lo < 0) && (high < 0))
    {
        high = -(high - lo);
    }
    else 
        if ((lo < 0) && (high > 0))
        {
            high += -lo;
        }
        else 
            if ((lo > 0) && (high > 0))
            {
                high -= lo;
            }
    peak = (float)(high / 2.0);
    lo =(float)0.0;
    if (value < peak)
        {
            return (value / peak);
        }
        else if (value > peak)
        {
            return ((high - value) / peak);
        }
    return (float)1.0;
}
Том Ардер
Модератор
 Аватар для Том Ардер
3619 / 2238 / 271
Регистрация: 15.06.2009
Сообщений: 3,925
17.05.2014, 12:22     Реализация класса функций принадлежности треугольника и трапеций #3
Цитата Сообщение от oksanaBM Посмотреть сообщение
Нагуглила вот такую реализацию функции треугольника
Наверное, в том месте должно быть и описание функции - параметры, интерфейс вызова. Без этого понять, что делает функция, восстановить алгоритм по коду - весьма сложно. Вам проще написать свой код функции - формулы уже есть.
И всё это лучше обсуждать в разделе форума С++, к статистике это не имеет никакого отношения.
oksanaBM
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
17.05.2014, 12:33  [ТС]     Реализация класса функций принадлежности треугольника и трапеций #4
В том месте, к сожалению, просто перечислены функции, без их вызова. Так вот написала начало:
C++
1
2
3
4
5
6
7
8
9
double funcMembership::funcTriangle(double x,double a, double b)//треугольная функция принадлежности
{
    float peak;//верхняя вершина треугольника 
 
    if (x<=a) return 0.0;
    if (x>a && x<=c) return (x-a)/(c-a);
    if (x>c && x<b) return (b-x)/(b-c);
    if (x>=b) return 1.0;
}
А как вычислить точку пика я не знаю(
Том Ардер
Модератор
 Аватар для Том Ардер
3619 / 2238 / 271
Регистрация: 15.06.2009
Сообщений: 3,925
17.05.2014, 13:19     Реализация класса функций принадлежности треугольника и трапеций #5
Цитата Сообщение от oksanaBM Посмотреть сообщение
как вычислить точку пика я не знаю(
Что такое "точка пика"? Смысл строки 3 в коде? В алгоритме (формула, рисунок) есть параметр с, в коде тоже, а где его определение?
oksanaBM
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
17.05.2014, 13:23  [ТС]     Реализация класса функций принадлежности треугольника и трапеций #6
Ну так я и не знаю, с я должна вычислять или задавать.
Том Ардер
Модератор
 Аватар для Том Ардер
3619 / 2238 / 271
Регистрация: 15.06.2009
Сообщений: 3,925
17.05.2014, 13:40     Реализация класса функций принадлежности треугольника и трапеций #7
В найденном Вами коде функции spikeProfile происходит просто смещение координат вершин треугольника, чтобы конечные выражения были проще.
В Вашем коде peak - это координата вершины, т.е. то же самое, что точка c, ввиду симметрии
C++
1
peak = (a+b)/2;
oksanaBM
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
17.05.2014, 13:51  [ТС]     Реализация класса функций принадлежности треугольника и трапеций #8
хорошо.
а как найти в трапециевидной точки с и d подобные точке с треугольника ?
C++
1
2
3
4
5
6
7
8
9
double funcMembership::funcTriangle(double x,double a, double b)//трапециевидная функция принадлежности
{
    float c,d;//вершины верхнего основания трапеции
 
    if (x<=a && x>=b) return 0.0;
    if (x>a && x<c) return (x-a)/(c-a);
    if (x>=c && x<=d) return 1.0;
    if (x>d && x<b) return (b-x)/(b-c);
}
Том Ардер
Модератор
 Аватар для Том Ардер
3619 / 2238 / 271
Регистрация: 15.06.2009
Сообщений: 3,925
17.05.2014, 14:10     Реализация класса функций принадлежности треугольника и трапеций #9
Цитата Сообщение от oksanaBM Посмотреть сообщение
как найти в трапециевидной точки с и d подобные точке с треугольника
Никак, хотя бы одну нужно задавать, вторую по симметрии.
oksanaBM
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
17.05.2014, 14:18  [ТС]     Реализация класса функций принадлежности треугольника и трапеций #10
Хм. Мне необходимо их как-то вычислять.. А в этом файле слишком замудрено? Тут вычисляются эти точки.
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
public float plateauProfile(float value, float lo, float lo_plat, float hi_plat, float hi)
{
    float upslope;
    float downslope;
    value += (-lo);
    
    if (lo < 0.0)
    {
        lo_plat += -lo; hi_plat += -lo;
        hi += -lo; lo = 0;
    }
        else
        {       
            lo_plat -= lo; hi_plat -= lo;
            hi -= lo; lo = 0;
        }
    upslope =(float) (1.0 / (lo_plat - lo));
    downslope = (float)(1.0 / (hi - hi_plat));
    
    if (value < lo) return (float)0.0;
    else 
        if (value > hi) return (float)0.0;
        else 
            if ((value >= lo_plat) && (value <= hi_plat)) return (float)1.0;
            else 
                if (value < lo_plat) return ((value - lo) * upslope);
                else 
                    if (value > hi_plat) return ((hi - value) * downslope);
    return (float)0.0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2014, 15:54     Реализация класса функций принадлежности треугольника и трапеций
Еще ссылки по теме:

реализация перегруженных функций в С++ C++
C++ реализация перегруженных функций
Классы и реализация функций C++

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

Или воспользуйтесь поиском по форуму:
Том Ардер
Модератор
 Аватар для Том Ардер
3619 / 2238 / 271
Регистрация: 15.06.2009
Сообщений: 3,925
17.05.2014, 15:54     Реализация класса функций принадлежности треугольника и трапеций #11
Судя по названиям переменных, здесь задаются координаты нижнего основания и величины верхнего и нижнего оснований трапеции. Вычисление точек c, d требует знаний геометрии на уровне 6-7 классов.
Yandex
Объявления
17.05.2014, 15:54     Реализация класса функций принадлежности треугольника и трапеций
Ответ Создать тему
Опции темы

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