37 lines
1.3 KiB
Java
37 lines
1.3 KiB
Java
package org.nfunk.jep.function;
|
|
|
|
import java.util.Stack;
|
|
import java.util.Vector;
|
|
import org.nfunk.jep.ParseException;
|
|
|
|
public class Dot extends PostfixMathCommand {
|
|
static Add add = new Add();
|
|
|
|
static Multiply mul = new Multiply();
|
|
|
|
public void run(Stack paramStack) throws ParseException {
|
|
checkStack(paramStack);
|
|
Object object1 = paramStack.pop();
|
|
Object object2 = paramStack.pop();
|
|
paramStack.push(dot(object2, object1));
|
|
}
|
|
|
|
public Object dot(Object paramObject1, Object paramObject2) throws ParseException {
|
|
if (paramObject1 instanceof Vector && paramObject2 instanceof Vector)
|
|
return dot((Vector)paramObject1, (Vector)paramObject2);
|
|
throw new ParseException("Dot: Invalid parameter type, both arguments must be vectors");
|
|
}
|
|
|
|
public Object dot(Vector paramVector1, Vector paramVector2) throws ParseException {
|
|
if (paramVector1.size() != paramVector2.size())
|
|
throw new ParseException("Dot: both sides of dot must be same length");
|
|
int i = paramVector1.size();
|
|
if (i < 1)
|
|
throw new ParseException("Dot: empty vectors parsed");
|
|
Object object = mul.mul(paramVector1.elementAt(0), paramVector2.elementAt(0));
|
|
for (byte b = 1; b < i; b++)
|
|
object = add.add(object, mul.mul(paramVector1.elementAt(b), paramVector2.elementAt(b)));
|
|
return object;
|
|
}
|
|
}
|