public class KM { double S[][][] = new double[100][4][4]; int sp = 0; void initFrame() { sp = 0; Matrix.identity(S[sp]); } void push() { Matrix.copy(S[sp], S[sp+1]); sp++; } void pop() { --sp; } void translate(double x,double y,double z) { Matrix.translate(S[sp], x, y, z); } void rotateX(double theta) { Matrix.rotateX(S[sp], theta); } void rotateY(double theta) { Matrix.rotateY(S[sp], theta); } void rotateZ(double theta) { Matrix.rotateZ(S[sp], theta); } void scale(double x,double y,double z) { Matrix.scale(S[sp], x, y, z); } void transform(double src[], double dst[]) { Matrix.transform(S[sp], src, dst); } double[][] get() { return S[sp]; } }