/// <summary> /// Indică dacă valoarea pentru o proprietate este fuzzy sau crisp. /// </summary> /// <param name="property">Proprietatea pentru care se caută valoarea</param> /// <returns>True pentru valori fuzzy şi False pentru valori crisp</returns> public bool isFuzzy(Property property) { return this.values.ContainsKey(property) && (this.values[property] is Term); }
/// <summary> /// Returnează valoarea crisp a unei proprietăţi. /// </summary> /// <param name="property">Proprietatea pentru care se caută valoarea</param> /// <returns>Valoarea crisp a proprietăţii sau NaN dacă valoarea este fuzzy sau dacă nu există proprietatea</returns> public double getCrispValue(Property property) { if (!this.values.ContainsKey(property)) { return double.NaN; } return this.values[property] is double ? (double)this.values[property] : double.NaN; }
/// <summary> /// Returnează termenul fuzzy al unei proprietăţi. /// </summary> /// <param name="property">Proprietatea pentru care se caută valoarea</param> /// <returns>Termenul fuzzy al valorii sau null dacă valoarea este crisp sau dacă nu există proprietatea</returns> public Term getFuzzyValue(Property property) { return this.values.ContainsKey(property) ? this.values[property] as Term : null; }
/// <summary> /// Adaugă o proprietate în graficul vizual. Se foloseşte un gradient cu gradaţii discrete pentru afişarea termenilor. /// </summary> /// <param name="property">Proprietatea de adăugat</param> /// <param name="startColor">Prima culoare în gradientul de afişare a termenilor</param> /// <param name="endColor">Ultima culoare în gradientul de afişare a termenilor</param> /// <param name="secondAxis">True indică plasarea formelor pe axa Y2, False pe axa Y1</param> public void addProperty(Property property, Color startColor, Color endColor, bool secondAxis) { if (property == null) { return; } int termsCount = property.termsCount; if (termsCount > 0) { float plusA = (float)(endColor.A - startColor.A) / termsCount; float plusR = (float)(endColor.R - startColor.R) / termsCount; float plusG = (float)(endColor.G - startColor.G) / termsCount; float plusB = (float)(endColor.B - startColor.B) / termsCount; float colA = (float)startColor.A; float colR = (float)startColor.R; float colG = (float)startColor.G; float colB = (float)startColor.B; foreach (Term term in property.terms) { this.addTerm(term, Color.FromArgb((int)colA, (int)colR, (int)colG, (int)colB), secondAxis, false, null); colA += plusA; colR += plusR; colG += plusG; colB += plusB; } } }