public static void _FUZZY_SETS(List <Fuzzy_sets> _Fuzzy_sets, ref int i, ref string line) { Fuzzy_sets F_s = new Fuzzy_sets { Name = (Additional_functions.Trim(line, ref i, '(', ')')).Trim() }; string temp = Additional_functions.ClearLine(ref i, line).Replace('\n', ' ').Replace('\r', ' ').Replace(" ", ""); try{ string[] Functions = temp.Split(','); int k = 0; foreach (var f in Functions) { F_s.Functions.Add(new Trapeze( Additional_functions.ToLine(Additional_functions.Trim(f, ref k, '[', ']'), Additional_functions.Trim(f, ref k, '[', ']')), Additional_functions.ToLine(Additional_functions.Trim(f, ref k, '[', ']'), Additional_functions.Trim(f, ref k, '[', ']')) )); k = 0; } _Fuzzy_sets.Add(F_s); } catch { Stored_Exceptions.Add(new Exception("Error: _Fuzzy_sets exception, fuzzy sets number " + _Fuzzy_sets.Count + 1)); } }
/// <summary> /// Считываем и распознаём множества из строкового представления /// </summary> /// <param name="text">Входная строка</param> public void read(String text) { Mass.Clear(); //очищаем предыдущее чтение Error_Log_textBox.Text += "[info] Начали распознавание множеств. "; //логи String[] _Temp = text.Replace(" ", "").Replace("\n", "").Replace("\r", "").Replace("\t", "").Replace(".", ",").Split(';'); //режем по строчкам множеств Error_Log_textBox.Text += "Предположительное количество: " + _Temp.Length + "\r\n"; //логи foreach (String s in _Temp) //пробегаем { try //отлов исключений и ошибок, {самая забагованная часть кода :D} { Fuzzy_sets <Double> _F_Temp = ConvertTo_Fuzzy_Sets(s); //преобразуем строку в нечёткое if (_F_Temp == null) { break; } #region Добавление недостающих элементов из унивёрсума List <Double> Universum = Read_Universum(Universal.Text); //универсальное множество foreach (var u in Universum) //Добавляем те элементы которые были в универсальном но неоказались в нашем множестве { bool flag = false; foreach (Element_Fuzzy_sets <Double> _F in _F_Temp) { if (_F.Element == u) { flag = true; break; } } if (!flag) { _F_Temp.Add(u); } } #endregion Mass.Add(new Fuzzy_sets <Double>(_F_Temp, _F_Temp.Name)); Error_Log_textBox.Text += "[info] Множество: \"" + _F_Temp.Name + "\" распознано \r\n";//логи } catch (System.Exception ex) { Error_Log_textBox.Text += "[Ошибка] " + ex.Message + " произошла на \"" + s + "\" \r\n";//логи } } Error_Log_textBox.Text += "[info] Распознано: " + Mass.Count + " из " + _Temp.Length + "\r\n";//логи }
void plot(Fuzzy_sets <Double> e, Brush _Brush) { Int32 _Height = pictureBox1.Height, _Width = pictureBox1.Width; //размеры холста Point[] _p = new Point[e.Count]; //линии //сортировка элементов по оси х Fuzzy_sets <Double> _T = e.Sort_from_Element; for (int i = 0; i < e.Count; i++) { _p[i].X = (int)((int)(e[i].Element * ((_Width / 2d) / MAX))); //добавляем точку x для контура _p[i].Y = (int)((int)((e[i].Accessory_Function) * (_Height - 25) + 25)); //точку y для контура gr.FillEllipse(_Brush, (int)(e[i].Element * ((_Width / 2d) / MAX)) - 3, (int)((e[i].Accessory_Function) * (_Height - 25) + 22), 6, 6); } if (checkBox1.Checked) { gr.DrawLines(new Pen(_Brush), _p); } }
/// <summary> /// Преобразует указанную строку в нечеткое множество /// </summary> /// <param name="s"></param> /// <returns></returns> Fuzzy_sets <Double> ConvertTo_Fuzzy_Sets(String s) { String[] Name_F = s.Split('='); //отделяем название от описания Error_Log_textBox.Text += "[info] Распознаём: \"" + Name_F[0] + "\"\r\n"; //логи if (Name_F.Length != 2) //если длинна не 2 элемента, 0 элемент это имя множества, 1 элемент строка с описанием множества { Error_Log_textBox.Text += "[Ошибка] Неверный синтаксис описания множества: \"" + Name_F[0] + "\"\r\n"; //логи return(null); } String[] Fuzzu_elem = Name_F[1].Split('+'); //режем строку с описанием множества по плюсам Fuzzy_sets <Double> _F_Temp = new Fuzzy_sets <Double>(Name_F[0]); //текущее создаваемое нечёткое множество foreach (String el in Fuzzu_elem) //добавляем все элементы множества { _F_Temp.Add(Convert.ToDouble(el.Split('/')[1]), Convert.ToDouble(el.Split('/')[0])); } return(_F_Temp); }
private void построитьГрафикToolStripMenuItem_Click(object sender, EventArgs e) { CheckedListBox CheckedListBoxs = (contextMenuStrip1.SourceControl as CheckedListBox); if (CheckedListBoxs != null) { //Список множеств для отправки на постройку List <Fuzzy_sets <Double> > Selected_Items = new List <Fuzzy_sets <Double> >(); foreach (var it in CheckedListBoxs.CheckedItems)//пробегаемся по отмеченным { Fuzzy_sets <Double> _temp = (it as Fuzzy_sets <Double>); if (_temp != null)//если преобразовалось то добавляем в список отправки { Selected_Items.Add(_temp); } else { String _temp1 = (it as String); if (_temp1 != null) { try { Fuzzy_sets <Double> D = ConvertTo_Fuzzy_Sets(_temp1); if (D != null) { Selected_Items.Add(D); } } catch { Error_Log_textBox.Text += "[Ошибка] Данное " + _temp1 + " вычисление нельзя построить!!!!. \r\n";//логи }; } } } if (Selected_Items.Count != 0) //если количество больше 0 { new Graphics1(Selected_Items).Show(); //отправляем на построение } } }
public Fuzzy_sets(Fuzzy_sets F_s) { Name = F_s.Name; Functions = new List <Trapeze>(F_s.Functions); }
/// <summary> /// Конструктор класса /// </summary> /// <param name="Fuzzy">Нечеткое множество</param> /// <param name="Name">Название множества</param> public Fuzzy_Object(Fuzzy_sets <T> Fuzzy, String Name = "") { this.Name = Name; this.Sets = Fuzzy; }