Fuzzy libray for embedded targets developed by zerokol. Read more on: http://zerokol.com/product/51e93616e84c5571b7000018/2/en edit by Bruno Alfano - corrected deallocation of FuzzyOutput

Fuzzy library by Zerokol. Read more on: http://zerokol.com/product/51e93616e84c5571b7000018/2/en

edit by Bruno Alfano - corrected deallocation bug for FuzzyOutput

Committer:
astaff15
Date:
Wed Jun 24 15:08:13 2015 +0000
Revision:
2:460b409e26e8
Parent:
0:66cd67db4f1b
Corrected FuzzyOutput destructor bug

Who changed what in which revision?

UserRevisionLine numberNew contents of line
astaff15 0:66cd67db4f1b 1 /*
astaff15 0:66cd67db4f1b 2 * Robotic Research Group (RRG)
astaff15 0:66cd67db4f1b 3 * State University of Piaui (UESPI), Brazil - Piauí - Teresina
astaff15 0:66cd67db4f1b 4 *
astaff15 0:66cd67db4f1b 5 * FuzzySet.cpp
astaff15 0:66cd67db4f1b 6 *
astaff15 0:66cd67db4f1b 7 * Author: Msc. Marvin Lemos <marvinlemos@gmail.com>
astaff15 0:66cd67db4f1b 8 * AJ Alves <aj.alves@zerokol.com>
astaff15 0:66cd67db4f1b 9 * Co authors: Douglas S. Kridi <douglaskridi@gmail.com>
astaff15 0:66cd67db4f1b 10 * Kannya Leal <kannyal@hotmail.com>
astaff15 0:66cd67db4f1b 11 */
astaff15 0:66cd67db4f1b 12 #include "FuzzySet.h"
astaff15 0:66cd67db4f1b 13
astaff15 0:66cd67db4f1b 14 FuzzySet::FuzzySet(){
astaff15 0:66cd67db4f1b 15 }
astaff15 0:66cd67db4f1b 16
astaff15 0:66cd67db4f1b 17 FuzzySet::FuzzySet(float a, float b, float c, float d){
astaff15 0:66cd67db4f1b 18 this->a = a;
astaff15 0:66cd67db4f1b 19 this->b = b;
astaff15 0:66cd67db4f1b 20 this->c = c;
astaff15 0:66cd67db4f1b 21 this->d = d;
astaff15 0:66cd67db4f1b 22 this->pertinence = 0.0;
astaff15 0:66cd67db4f1b 23 }
astaff15 0:66cd67db4f1b 24
astaff15 0:66cd67db4f1b 25 float FuzzySet::getPointA(){
astaff15 0:66cd67db4f1b 26 return this->a;
astaff15 0:66cd67db4f1b 27 }
astaff15 0:66cd67db4f1b 28
astaff15 0:66cd67db4f1b 29 float FuzzySet::getPointB(){
astaff15 0:66cd67db4f1b 30 return this->b;
astaff15 0:66cd67db4f1b 31 }
astaff15 0:66cd67db4f1b 32
astaff15 0:66cd67db4f1b 33 float FuzzySet::getPointC(){
astaff15 0:66cd67db4f1b 34 return this->c;
astaff15 0:66cd67db4f1b 35 }
astaff15 0:66cd67db4f1b 36
astaff15 0:66cd67db4f1b 37 float FuzzySet::getPointD(){
astaff15 0:66cd67db4f1b 38 return this->d;
astaff15 0:66cd67db4f1b 39 }
astaff15 0:66cd67db4f1b 40
astaff15 0:66cd67db4f1b 41 bool FuzzySet::calculatePertinence(float crispValue){
astaff15 0:66cd67db4f1b 42 float slope;
astaff15 0:66cd67db4f1b 43
astaff15 0:66cd67db4f1b 44 if (crispValue < this->a){
astaff15 0:66cd67db4f1b 45 if (this->a == this->b && this->b != this->c && this->c != this->d){
astaff15 0:66cd67db4f1b 46 this->pertinence = 1.0;
astaff15 0:66cd67db4f1b 47 }else{
astaff15 0:66cd67db4f1b 48 this->pertinence = 0.0;
astaff15 0:66cd67db4f1b 49 }
astaff15 0:66cd67db4f1b 50 }else if (crispValue >= this->a && crispValue < this->b){
astaff15 0:66cd67db4f1b 51 slope = 1.0 / (this->b - this->a);
astaff15 0:66cd67db4f1b 52 this->pertinence = slope * (crispValue - this->b) + 1.0;
astaff15 0:66cd67db4f1b 53 }else if (crispValue >= this->b && crispValue <= this->c){
astaff15 0:66cd67db4f1b 54 this->pertinence = 1.0;
astaff15 0:66cd67db4f1b 55 }else if (crispValue > this->c && crispValue <= this->d){
astaff15 0:66cd67db4f1b 56 slope = 1.0 / (this->c - this->d);
astaff15 0:66cd67db4f1b 57 this->pertinence = slope * (crispValue - this->c) + 1.0;
astaff15 0:66cd67db4f1b 58 }else if (crispValue > this->d){
astaff15 0:66cd67db4f1b 59 if (this->c == this->d && this->c != this->b && this->b != this->a){
astaff15 0:66cd67db4f1b 60 this->pertinence = 1.0;
astaff15 0:66cd67db4f1b 61 }else{
astaff15 0:66cd67db4f1b 62 this->pertinence = 0.0;
astaff15 0:66cd67db4f1b 63 }
astaff15 0:66cd67db4f1b 64 }
astaff15 0:66cd67db4f1b 65 return true;
astaff15 0:66cd67db4f1b 66 }
astaff15 0:66cd67db4f1b 67
astaff15 0:66cd67db4f1b 68 void FuzzySet::setPertinence(float pertinence){
astaff15 0:66cd67db4f1b 69 if(this->pertinence < pertinence){
astaff15 0:66cd67db4f1b 70 this->pertinence = pertinence;
astaff15 0:66cd67db4f1b 71 }
astaff15 0:66cd67db4f1b 72 }
astaff15 0:66cd67db4f1b 73
astaff15 0:66cd67db4f1b 74 float FuzzySet::getPertinence(){
astaff15 0:66cd67db4f1b 75 return this->pertinence;
astaff15 0:66cd67db4f1b 76 }
astaff15 0:66cd67db4f1b 77
astaff15 0:66cd67db4f1b 78 void FuzzySet::reset(){
astaff15 0:66cd67db4f1b 79 this->pertinence = 0.0;
astaff15 0:66cd67db4f1b 80 }