半整数角四角形の問題を解いてみた。

 今更ですが、ついでに、半整数角四角形の問題を解いてみました。(^_^;
 問題を要約すると、例の四角形において、

a=(5/2)°,b=(125/2)°,c=(165/2)°,d=5°

 P=(125/2+165/2)°=(290/2)°=145°
 e=180°-(145+5)°=30°,f=180°-(5/2+145)°=(65/2)°
 Q=\frac{\sin\left(\frac{125^\circ}{2}\right)\sin\left(5^\circ\right)\sin\left(\frac{65^\circ}{2}\right)}{\sin\left(\frac{5^\circ}{2}\right)\sin\left(\frac{165^\circ}{2}\right)\sin\left(30^\circ\right)}
 このとき、前回と同様にして、次の連立方程式(1),(2)の解を求めます。
 \left{{x+y=P \cdots(1)}\\{\frac{\sin\left(y\right)}{\sin\left(x\right)}=Q \cdots(2)}
 ここで、プログラムを作って、定数部分Qの変形に役に立ちそうな公式集を生成すると、次の通りになります。

●生成した公式集

//--- 2x系 ---//
sin[  5  ]=2*sin[  5/2]*sin[175/2]
sin[ 10  ]=2*sin[  5  ]*sin[ 85  ]
sin[ 15  ]=2*sin[ 15/2]*sin[165/2]
sin[ 20  ]=2*sin[ 10  ]*sin[ 80  ]
sin[ 25  ]=2*sin[ 25/2]*sin[155/2]
sin[ 30  ]=2*sin[ 15  ]*sin[ 75  ]
sin[ 35  ]=2*sin[ 35/2]*sin[145/2]
sin[ 40  ]=2*sin[ 20  ]*sin[ 70  ]
sin[ 45  ]=2*sin[ 45/2]*sin[135/2]
sin[ 50  ]=2*sin[ 25  ]*sin[ 65  ]
sin[ 55  ]=2*sin[ 55/2]*sin[125/2]
sin[ 65  ]=2*sin[ 65/2]*sin[115/2]
sin[ 70  ]=2*sin[ 35  ]*sin[ 55  ]
sin[ 75  ]=2*sin[ 75/2]*sin[105/2]
sin[ 80  ]=2*sin[ 40  ]*sin[ 50  ]
sin[ 85  ]=2*sin[ 85/2]*sin[ 95/2]
sin[ 90  ]=2*sin[ 45  ]*sin[ 45  ]
//--- 3x系 ---//
sin[ 15/2]=4*sin[  5/2]*sin[115/2]*sin[125/2]
sin[ 15  ]=4*sin[  5  ]*sin[ 55  ]*sin[ 65  ]
sin[ 45/2]=4*sin[ 15/2]*sin[105/2]*sin[135/2]
sin[ 30  ]=4*sin[ 10  ]*sin[ 50  ]*sin[ 70  ]
sin[ 75/2]=4*sin[ 25/2]*sin[ 95/2]*sin[145/2]
sin[105/2]=4*sin[ 35/2]*sin[ 85/2]*sin[155/2]
sin[ 60  ]=4*sin[ 20  ]*sin[ 40  ]*sin[ 80  ]
sin[135/2]=4*sin[ 45/2]*sin[ 75/2]*sin[165/2]
sin[ 75  ]=4*sin[ 25  ]*sin[ 35  ]*sin[ 85  ]
sin[165/2]=4*sin[ 55/2]*sin[ 65/2]*sin[175/2]
//--- 4x系1 ---//
sin[ 10  ]=4*sin[  5/2]*sin[ 85  ]*sin[175/2]
sin[ 20  ]=4*sin[  5  ]*sin[ 80  ]*sin[ 85  ]
sin[ 30  ]=4*sin[ 15/2]*sin[ 75  ]*sin[165/2]
sin[ 40  ]=4*sin[ 10  ]*sin[ 70  ]*sin[ 80  ]
sin[ 50  ]=4*sin[ 25/2]*sin[ 65  ]*sin[155/2]
sin[ 70  ]=4*sin[ 35/2]*sin[ 55  ]*sin[145/2]
sin[ 80  ]=4*sin[ 20  ]*sin[ 50  ]*sin[ 70  ]
sin[ 90  ]=4*sin[ 45/2]*sin[ 45  ]*sin[135/2]
//--- 4x系2 ---//
sin[ 10  ]=4*sin[  5  ]*sin[ 85/2]*sin[ 95/2]
sin[ 20  ]=4*sin[ 10  ]*sin[ 40  ]*sin[ 50  ]
sin[ 30  ]=4*sin[ 15  ]*sin[ 75/2]*sin[105/2]
sin[ 40  ]=4*sin[ 20  ]*sin[ 35  ]*sin[ 55  ]
sin[ 50  ]=4*sin[ 25  ]*sin[ 65/2]*sin[115/2]
sin[ 70  ]=4*sin[ 55/2]*sin[ 35  ]*sin[125/2]
sin[ 80  ]=4*sin[ 25  ]*sin[ 40  ]*sin[ 65  ]
sin[ 90  ]=4*sin[ 45/2]*sin[ 45  ]*sin[135/2]

Q=\frac{\sin\left(\frac{125^\circ}{2}\right)\sin\left(5^\circ\right)\sin\left(\frac{65^\circ}{2}\right)}{\sin\left(\frac{5^\circ}{2}\right)\sin\left(\frac{165^\circ}{2}\right)\sin\left(30^\circ\right)} \text{ }\cdots(3)
として、上の公式集から、
\sin\left(5^\circ\right)=2\sin\left(\frac{5^\circ}{2}\right)\sin\left(\frac{175^\circ}{2}\right) \text{ }\cdots(4)
\sin\left(\frac{165^\circ}{2}\right)=4\sin\left(\frac{55^\circ}{2}\right)\sin\left(\frac{65^\circ}{2}\right)\sin\left(\frac{175^\circ}{2}\right) \text{ }\cdots(5)
 (3),(4),(5)から、
Q=\frac{\sin\left(\frac{125^\circ}{2}\right)\left{2\sin\left(\frac{5^\circ}{2}\right)\sin\left(\frac{175^\circ}{2}\right)\right}\sin\left(\frac{65^\circ}{2}\right)}{\sin\left(\frac{5^\circ}{2}\right)\left{4\sin\left(\frac{55^\circ}{2}\right)\sin\left(\frac{65^\circ}{2}\right)\sin\left(\frac{175^\circ}{2}\right)\right}\sin\left(30^\circ\right)}=\frac{\sin\left(\frac{125^\circ}{2}\right)}{\sin\left(\frac{55^\circ}{2}\right)}

Q=\frac{\sin\left(180^\circ-\frac{125^\circ}{2}\right)}{\sin\left(\frac{55^\circ}{2}\right)}=\frac{\sin\left(\frac{235^\circ}{2}\right)}{\sin\left(\frac{55^\circ}{2}\right)}

このとき、(55/2)°+(235/2)°=(290/2)°=145°=Pを満たしているので、x=(55/2)°,y=(235/2)°は、連立方程式(1),(2)の解である。
 ちなみに、公式集が多すぎると思う場合は、2x系は2倍角の公式からすぐに導けるのでわざわざ表にしなくてもいいかも知れません。

※参考プログラム
●GenTriFormula02.java

/* 
 * GenTriFormula02.java
 * 
 * //--- 2x系 ---//
 * sin[2x]=2sin[x]*sin[90゚-x]
 * //--- 3x系 ---//
 * sin[3x]=4sin[x]sin[60゚- x]sin[60゚+x]
 * //--- 4x系1 ---//
 * sin[4x]=4sin[x]sin[90゚-2x]sin[90゚-x]
 * //--- 4x系2 ---//
 * sin[4x]=4sin[2x]sin[45゚-x]sin[45゚+x]
 * 
 */

import java.util.Arrays;

public class GenTriFormula02 {
    static String sAngle(double x) {
        String result="";
        int iX =(int)x;
        if(iX%2==0) result=String.format("%3d  ",iX/2);
        else        result=String.format("%3d/2",iX);
        return result;
    }
    
    public static void main(String[] args) {
        double[] a = new double[4];
        double dx=2.5;
        System.out.println("//--- 2x系 ---//");
        for(double x=0.0; 2.0*x<=90.0; x+=dx){
            a[0]=2.0*x; a[1]=x; a[2]=90-x;
            for(int i=0; i< 3; i++)
                if(a[i]> 90.0) a[i]=180.0-a[i];
            Arrays.sort(a,1,2);
            if((a[0]-a[1])*(a[0]-a[2])==0) continue;
            for(int i=0; i< 3; i++) a[i]*=2.0;
            System.out.printf("sin[%s]=2*sin[%s]*sin[%s]\n",
                sAngle(a[0]),sAngle(a[1]),sAngle(a[2]));
        }
        System.out.println("//--- 3x系 ---//");
        for(double x=0.0; 3.0*x<=90.0; x+=dx){
            a[0]=3.0*x; a[1]=x; a[2]=60.0-x; a[3]=60.0+x;
            for(int i=0; i< 4; i++)
                if(a[i]> 90.0) a[i]=180.0-a[i];
            Arrays.sort(a,1,3);
            if((a[0]-a[1])*(a[0]-a[2])*(a[0]-a[3])==0) continue;
            for(int i=0; i< 4; i++) a[i]*=2.0;
            System.out.printf("sin[%s]=4*sin[%s]*sin[%s]*sin[%s]\n",
                sAngle(a[0]),sAngle(a[1]),sAngle(a[2]),sAngle(a[3]));
        }
        System.out.println("//--- 4x系1 ---//");
            for(double x=0.0; 4.0*x<=90.0; x+=dx){
            a[0]=4.0*x; a[1]=x; a[2]=90.0-2.0*x; a[3]=90.0-x;
            for(int i=0; i< 4; i++)
                if(a[i]> 90.0) a[i]=180.0-a[i];
            Arrays.sort(a,1,3);
            if((a[0]-a[1])*(a[0]-a[2])*(a[0]-a[3])==0) continue;
            for(int i=0; i< 4; i++) a[i]*=2.0;
            System.out.printf("sin[%s]=4*sin[%s]*sin[%s]*sin[%s]\n",
                sAngle(a[0]),sAngle(a[1]),sAngle(a[2]),sAngle(a[3]));
        }
        System.out.println("//--- 4x系2 ---//");
            for(double x=0.0; 4.0*x<=90.0; x+=dx){
            a[0]=4.0*x; a[1]=2.0*x; a[2]=45.0-x; a[3]=45.0+x;
            for(int i=0; i< 4; i++)
                if(a[i]> 90.0) a[i]=180.0-a[i];
            Arrays.sort(a,1,3);
            if((a[0]-a[1])*(a[0]-a[2])*(a[0]-a[3])==0) continue;
            for(int i=0; i< 4; i++) a[i]*=2.0;
            System.out.printf("sin[%s]=4*sin[%s]*sin[%s]*sin[%s]\n",
                sAngle(a[0]),sAngle(a[1]),sAngle(a[2]),sAngle(a[3]));
        }
    }
}

明解Java 入門編

明解Java 入門編

公式集 (モノグラフ)

公式集 (モノグラフ)

大人のための数学勉強法 ― どんな問題も解ける10のアプローチ

大人のための数学勉強法 ― どんな問題も解ける10のアプローチ