github.com/archlabjp/eeslism-go@v0.0.0-20231109122333-4bb7bfcdf292/eeslism/ZAHYOU.go (about)

     1  //This file is part of EESLISM.
     2  //
     3  //Foobar is free software : you can redistribute itand /or modify
     4  //it under the terms of the GNU General Public License as published by
     5  //the Free Software Foundation, either version 3 of the License, or
     6  //(at your option) any later version.
     7  //
     8  //Foobar is distributed in the hope that it will be useful,
     9  //but WITHOUT ANY WARRANTY; without even the implied warranty of
    10  //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
    11  //GNU General Public License for more details.
    12  //
    13  //You should have received a copy of the GNU General Public License
    14  //along with Foobar.If not, see < https://www.gnu.org/licenses/>.
    15  
    16  /*
    17  
    18     モンテカルロ法を用いる際の座標変換
    19                FILE=ZAHYOU.c
    20                Create Date=1999.6.7
    21  
    22  */
    23  
    24  package eeslism
    25  
    26  import "math"
    27  
    28  func ZAHYOU(Op, G XYZ, op *XYZ, wa, wb float64) {
    29  	Cwa := math.Cos(wa * math.Pi / 180)
    30  	Swa := math.Sin(wa * math.Pi / 180)
    31  	Cwb := math.Cos((-wb) * math.Pi / 180)
    32  	Swb := math.Sin((-wb) * math.Pi / 180)
    33  
    34  	p := XYZ{
    35  		X: Op.X - G.X,
    36  		Y: Op.Y - G.Y,
    37  		Z: Op.Z - G.Z,
    38  	}
    39  
    40  	q := XYZ{
    41  		X: p.X*Cwa - p.Y*Swa,
    42  		Y: p.X*Swa + p.Y*Cwa,
    43  		Z: p.Z,
    44  	}
    45  
    46  	op.X = q.X
    47  	op.Y = q.Y*Cwb - q.Z*Swb
    48  	op.Z = q.Y*Swb + q.Z*Cwb
    49  
    50  	CAT(&op.X, &op.Y, &op.Z)
    51  }
    52  
    53  /*------------------------------------------------------------------*/
    54  
    55  func R_ZAHYOU(Op, G XYZ, op *XYZ, wa, wb float64) {
    56  	Cwa := math.Cos((-wa) * math.Pi / 180)
    57  	Swa := math.Sin((-wa) * math.Pi / 180)
    58  	Cwb := math.Cos(wb * math.Pi / 180)
    59  	Swb := math.Sin(wb * math.Pi / 180)
    60  
    61  	p := XYZ{
    62  		X: Op.X,
    63  		Y: Op.Y*Cwb - Op.Z*Swb,
    64  		Z: Op.Y*Swb + Op.Z*Cwb,
    65  	}
    66  
    67  	q := XYZ{
    68  		X: p.X*Cwa - p.Y*Swa,
    69  		Y: p.X*Swa + p.Y*Cwa,
    70  		Z: p.Z,
    71  	}
    72  
    73  	op.X = q.X + G.X
    74  	op.Y = q.Y + G.Y
    75  	op.Z = q.Z + G.Z
    76  
    77  	CAT(&op.X, &op.Y, &op.Z)
    78  }