# TrapezoidShape.java

```package libai.fuzzy.sets;

import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

/**
* Fuzzy set representing a trapezoid function. The trapezoid function can take
* 3 variations: <br>
* <ul>
* <li>right trapezoid to the left. a = b != c != d.</li>
* <li>centered trapezoid a != b != c != d.</li>
* <li>right trapezoid to the right a != b != c = d.</li>
* </ul>
*
* @author kronenthaler
*/
public class TrapezoidShape implements FuzzySet {

private double a;
private double b;
private double c;
private double d;

public TrapezoidShape(Node xmlNode) {
}

/**
* Constructor.
*
* @param a Left vertex of the trapezoid.
* @param b Middle-left vertex of the trapezoid.
* @param c Middle-right vertex of the trapezoid.
* @param d Right vertex of the trapezoid.
*
*/
public TrapezoidShape(double a, double b, double c, double d) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}

@Override
public double eval(double x) {
if ((a == b && x == a) || (d == c && x == c) || (b <= x && x <= c)) {
return 1;
}

if (x <= a || x >= d) {
return 0;
}

if (a < x && x < b) {
return (x - a) / (b - a);
}

return (d - x) / (d - c);
}

@Override
public String toXMLString(String indent) {
return String.format("%s<TrapezoidShape Param1=\"%f\" Param2=\"%f\" Param3=\"%f\" Param4=\"%f\"/>", indent, a, b, c, d);
}

@Override