Langleyの問題を三角関数で解いてみた。(2)

 Langley(ラングレー)の問題を三角関数で解くときに、定数部分Qの式変形に役に立ちそうな公式集を生成するプログラムをJavaで作ってみました。(^_^;
 ちなみに、4x系は、2x系を2回使っても出るようです。(^_^;

●GenTriFormula01.java

/* 
 * GenTriFormula01.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 GenTriFormula01 {
    public static void main(String[] args) {
        int[] a = new int[4];
        int dx=5;
        System.out.println("//--- 2x系 ---//");
        for(int x=0; 2*x<=90; x+=dx){
            a[0]=2*x; a[1]=x; a[2]=90-x;
            for(int i=0; i< 3; i++)
                if(a[i]> 90) a[i]=180-a[i];
            Arrays.sort(a,1,2);
            if((a[0]-a[1])*(a[0]-a[2])==0) continue;
            System.out.printf("sin[%2d]=2*sin[%2d]*sin[%2d]\n",a[0],a[1],a[2]);
        }
        System.out.println("//--- 3x系 ---//");
        for(int x=0; 3*x<=90; x+=dx){
            a[0]=3*x; a[1]=x; a[2]=60-x; a[3]=60+x;
            for(int i=0; i< 4; i++)
                if(a[i]> 90) a[i]=180-a[i];
            Arrays.sort(a,1,3);
            if((a[0]-a[1])*(a[0]-a[2])*(a[0]-a[3])==0) continue;
            System.out.printf("sin[%2d]=4*sin[%2d]*sin[%2d]*sin[%2d]\n",a[0],a[1],a[2],a[3]);
        }
        System.out.println("//--- 4x系1 ---//");
            for(int x=0; 4*x<=90; x+=dx){
            a[0]=4*x; a[1]=x; a[2]=90-2*x; a[3]=90-x;
            for(int i=0; i< 4; i++)
                if(a[i]> 90) a[i]=180-a[i];
            Arrays.sort(a,1,3);
            if((a[0]-a[1])*(a[0]-a[2])*(a[0]-a[3])==0) continue;
            System.out.printf("sin[%2d]=4*sin[%2d]*sin[%2d]*sin[%2d]\n",a[0],a[1],a[2],a[3]);
        }
        System.out.println("//--- 4x系2 ---//");
            for(int x=0; 4*x<=90; x+=dx){
            a[0]=4*x; a[1]=2*x; a[2]=45-x; a[3]=45+x;
            for(int i=0; i< 4; i++)
                if(a[i]> 90) a[i]=180-a[i];
            Arrays.sort(a,1,3);         
            if((a[0]-a[1])*(a[0]-a[2])*(a[0]-a[3])==0) continue;
            System.out.printf("sin[%2d]=4*sin[%2d]*sin[%2d]*sin[%2d]\n",a[0],a[1],a[2],a[3]);
        }
    }
}

●実行結果

//--- 2x系 ---//
sin[10]=2*sin[ 5]*sin[85]
sin[20]=2*sin[10]*sin[80]
sin[30]=2*sin[15]*sin[75]
sin[40]=2*sin[20]*sin[70]
sin[50]=2*sin[25]*sin[65]
sin[70]=2*sin[35]*sin[55]
sin[80]=2*sin[40]*sin[50]
sin[90]=2*sin[45]*sin[45]
//--- 3x系 ---//
sin[15]=4*sin[ 5]*sin[55]*sin[65]
sin[30]=4*sin[10]*sin[50]*sin[70]
sin[60]=4*sin[20]*sin[40]*sin[80]
sin[75]=4*sin[25]*sin[35]*sin[85]
//--- 4x系1 ---//
sin[20]=4*sin[ 5]*sin[80]*sin[85]
sin[40]=4*sin[10]*sin[70]*sin[80]
sin[80]=4*sin[20]*sin[50]*sin[70]
//--- 4x系2 ---//
sin[20]=4*sin[10]*sin[40]*sin[50]
sin[40]=4*sin[20]*sin[35]*sin[55]
sin[80]=4*sin[25]*sin[40]*sin[65]

明解Java 入門編

明解Java 入門編

公式集 (モノグラフ)

公式集 (モノグラフ)