Evaluates this expression according to given type and context.
Source
evaluate(EvaluationType type, ContextModel context) {
if (type == EvaluationType.VECTOR) {
EvaluationType elementType = EvaluationType.REAL;
if (length == 1) {
// Does not seem to be a vector, try to return REAL.
return elements[0].evaluate(elementType, context);
}
// Interpret vector elements as REAL.
if (length == 2) {
double x,y;
x = elements[0].evaluate(elementType, context);
y = elements[1].evaluate(elementType, context);
return new Vector2(x, y);
}
if (length == 3) {
double x,y,z;
x = elements[0].evaluate(elementType, context);
y = elements[1].evaluate(elementType, context);
z = elements[2].evaluate(elementType, context);
return new Vector3(x, y, z);
}
if (length == 4) {
double x,y,z,w;
x = elements[0].evaluate(elementType, context);
y = elements[1].evaluate(elementType, context);
z = elements[2].evaluate(elementType, context);
w = elements[3].evaluate(elementType, context);
return new Vector4(x, y, z, w);
}
if (length > 4) {
throw new UnimplementedError("Vector of arbitrary length (> 4) are not supported yet.");
}
}
if (type == EvaluationType.REAL && length == 1) {
// Interpret vector as real number.
return elements[0].evaluate(type, context);
}
throw new UnsupportedError('Vector $this with length $length can not be interpreted as: $type');
}