package de.gaalop.productComputer; /** * Calculates the geometric product of two blades * @author christian */ public class GeoProductCalculator implements ProductCalculator { @Override public void calcProduct(SignedBlade b1, SignedBlade b2, SumOfBlades result, int bitCount, byte[] squareMask) { SignedBlade resultOuter = new SignedBlade(bitCount, b1, b1.coefficient*b2.coefficient*GAMethods.canonicalReorderingSign(b1,b2, bitCount)); resultOuter.xor(b2); if (!b1.intersects(b2)) { //outer product is not null and geometric product is equal to outer product result.add(resultOuter); } else { //outer product is null //calculate geo product Blade aAndBMasked = new Blade(bitCount, b1); aAndBMasked.and(b2); for (int index = 0;index < bitCount; index++) if (aAndBMasked.get(index)) resultOuter.coefficient *= squareMask[index]; result.add(resultOuter); } } }