

public abstract class Isometry
{
    public abstract int getDim();



    public abstract double[ ] apply(double p[ ], double result[ ]);



    public double[ ] apply(double p[ ])
    {
        return apply(p, new double[getDim()]);
    }



    protected abstract Isometry _times(Isometry F0, Isometry result);



    public static Isometry mul(Isometry F1, Isometry F0, Isometry result)
    {
        return F1._times(F0, result);
    }

}
