first commit
This commit is contained in:
39
hrmsEjb/org/nfunk/jep/function/Cross.java
Normal file
39
hrmsEjb/org/nfunk/jep/function/Cross.java
Normal file
@@ -0,0 +1,39 @@
|
||||
package org.nfunk.jep.function;
|
||||
|
||||
import java.util.Stack;
|
||||
import java.util.Vector;
|
||||
import org.nfunk.jep.ParseException;
|
||||
|
||||
public class Cross extends PostfixMathCommand {
|
||||
static Subtract sub = new Subtract();
|
||||
|
||||
static Multiply mul = new Multiply();
|
||||
|
||||
public void run(Stack paramStack) throws ParseException {
|
||||
checkStack(paramStack);
|
||||
Object object1 = paramStack.pop();
|
||||
Object object2 = paramStack.pop();
|
||||
paramStack.push(cross(object2, object1));
|
||||
}
|
||||
|
||||
public Object cross(Object paramObject1, Object paramObject2) throws ParseException {
|
||||
if (paramObject1 instanceof Vector && paramObject2 instanceof Vector)
|
||||
return cross((Vector)paramObject1, (Vector)paramObject2);
|
||||
throw new ParseException("Cross: Invalid parameter type, both arguments must be vectors");
|
||||
}
|
||||
|
||||
public Object cross(Vector paramVector1, Vector paramVector2) throws ParseException {
|
||||
int i = paramVector1.size();
|
||||
if ((i != 2 && i != 3) || i != paramVector2.size())
|
||||
throw new ParseException("Cross: both sides must be of length 3");
|
||||
if (i == 3) {
|
||||
Vector vector = new Vector(3);
|
||||
vector.setSize(3);
|
||||
vector.setElementAt(sub.sub(mul.mul(paramVector1.elementAt(1), paramVector2.elementAt(2)), mul.mul(paramVector1.elementAt(2), paramVector2.elementAt(1))), 0);
|
||||
vector.setElementAt(sub.sub(mul.mul(paramVector1.elementAt(2), paramVector2.elementAt(0)), mul.mul(paramVector1.elementAt(0), paramVector2.elementAt(2))), 1);
|
||||
vector.setElementAt(sub.sub(mul.mul(paramVector1.elementAt(0), paramVector2.elementAt(1)), mul.mul(paramVector1.elementAt(1), paramVector2.elementAt(0))), 2);
|
||||
return vector;
|
||||
}
|
||||
return sub.sub(mul.mul(paramVector1.elementAt(0), paramVector2.elementAt(1)), mul.mul(paramVector1.elementAt(1), paramVector2.elementAt(0)));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user