gaptool的Java版本

javac GL2R.java

java GL2R
0=>0
1=>1
2=>2
3=>3
4=>5
5=>4
1 2 3 4 5 6
2 1 5 6 3 4
3 6 1 5 4 2
4 5 6 1 2 3
5 4 2 3 6 1
6 3 4 2 1 5

interface IGroup {
    void printSet();
    void printTable();     
    int mul(int a,int b);
    int size();
    int inv(int a); 
}

class DM2{
    public double a,b,c,d;
    public DM2(double a, double b,double c, double d){
        init(a,b,c,d);
    }
    public void init(double a, double b,double c, double d){
        this.a = a;
        this.b = b;
        this.c = c;
        this.d = d;
    }    
    public static DM2 create(double a, double b,double c, double d){
        DM2 ret=new DM2(a,b,c,d);
        return ret;
    }    
    public static boolean IsEqual(DM2 t,DM2 a)
    {
        final double err=0.01;
        if(Math.abs(t.a-a.a)<err && Math.abs(t.b-a.b)<err && Math.abs(t.c-a.c)<err && Math.abs(t.d-a.d)<err)
            return true;        
        return false;
    }
    public static DM2 Mul(DM2 t,DM2 m){
        DM2 ret = new DM2(t.a * m.a+t.b * m.c,t.a * m.b+t.b * m.d, t.c * m.a+t.d * m.c, t.c * m.b+t.d * m.d);
        return ret;
    }    
}

// GL(2,R)的N階有限子羣
public class GL2R implements IGroup {
    DM2[] m_Set;    
    //int[][] m_Mul;

    //  靜態函數    
    public static int getidx(DM2 Set[],DM2 a){
        int n=Set.length;
        for(int i=0;i<n;i++){
            if(DM2.IsEqual(Set[i],a))
                return i;
        }
        return -1;
    }
    public static void printGroup(IGroup g){
       int n=g.size();
       for(int i=0;i<n;i++){
           for(int j=0;j<n;j++){
              int ij=g.mul(i,j);
              System.out.printf("%d ",ij+1); 
           } 
           System.out.printf("\n");       
       }
    }    
    
    // 實現接口的方法
    public void printSet() {
        for(int i=0;i<size();i++){
            int i1=inv(i);
            System.out.printf("%d=>%d\n",i,i1); 
        }    
    }
    public void printTable() {
        printGroup(this);
    }
    public int mul(int a,int b){
        // if(true){
            // int c=m_Mul[a][b];
            // return c;
        // }else{
            DM2 t=m_Set[a];
            DM2 m=m_Set[b];
            DM2 tm=DM2.Mul(t,m);
            int ij=getidx(m_Set,tm);
            return ij;
        // }
    }
    public int size(){
        return m_Set.length;
    }
    public int inv(int a){
        DM2 mi=m_Set[a];
        DM2 m0=m_Set[0];
        DM2 m1=mi;
        while(!DM2.IsEqual(mi,m0)){
            m1=mi;
            mi=DM2.Mul(mi,m_Set[a]);
        }
        int ij=getidx(m_Set,m1);
        return ij;
    }    
    
    // public GL2R(){
        // initD3();
        // //initTable();
    // } 
    public void initD3(){
        double pi=Math.atan2(0,-1);
        //System.out.printf("pi=%f\n",pi); 
        double arr[][]=new double[][]{
            {1,0,0,1},
            {-1,0,0,1},//b
            {-Math.cos(2*pi/3),-Math.sin(2*pi/3),-Math.sin(2*pi/3),Math.cos(2*pi/3)},//ab
            {-Math.cos(4*pi/3),-Math.sin(4*pi/3),-Math.sin(4*pi/3),Math.cos(4*pi/3)},//a^2b
            {Math.cos(4*pi/3),-Math.sin(4*pi/3),Math.sin(4*pi/3),Math.cos(4*pi/3)},//a^2
            {Math.cos(2*pi/3),-Math.sin(2*pi/3),Math.sin(2*pi/3),Math.cos(2*pi/3)},//a
        };
        int n=arr.length;
        m_Set=new DM2[n];        
        for(int i=0;i<n;i++){
            m_Set[i]=DM2.create(arr[i][0],arr[i][1],arr[i][2],arr[i][3]);
            //System.out.printf("%f,%f,%f,%f\n",arr[i][0],arr[i][1],arr[i][2],arr[i][3]);
        }
    } 
    /*
    public void initTable(){
        int n=size();
        m_Mul=new int[n][n];
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                DM2 t=m_Set[i];
                DM2 m=m_Set[j];
                DM2 tm=DM2.Mul(t,m);
                int ij=getidx(m_Set,tm);
                m_Mul[i][j]=ij;
            }
        }
    }
    */
    public static void main (String args[])
    {  
        GL2R d3 = new GL2R();
        d3.initD3();
        d3.printSet();
        d3.printTable();
    }    
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章