github.com/archlabjp/eeslism-go@v0.0.0-20231109122333-4bb7bfcdf292/eeslism/DAINYUU.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=DAINYUU.c
    20    Create Date=1999.6.7
    21  */
    22  
    23  package eeslism
    24  
    25  import (
    26  	"fmt"
    27  	"os"
    28  )
    29  
    30  /*---------------------------------------------------------------------*/
    31  func DAINYUU_MP(mp *[]P_MENN, op []P_MENN, opn int, mpn int) {
    32  	k := 0
    33  	for i := 0; i < opn; i++ {
    34  		(*mp)[k].P = make([]XYZ, op[i].polyd)
    35  		(*mp)[k] = op[i]
    36  		(*mp)[k].wd = 0
    37  		(*mp)[k].sbflg = 0
    38  		(*mp)[k].wlflg = 0
    39  		(*mp)[k].opname = op[i].opname
    40  
    41  		for j := 0; j < op[i].wd; j++ {
    42  			k++
    43  			(*mp)[k].wd = 0
    44  			(*mp)[k].sbflg = 0
    45  			(*mp)[k].wlflg = 1
    46  			(*mp)[k].refg = op[i].refg
    47  			(*mp)[k].ref = op[i].opw[j].ref
    48  			(*mp)[k].rgb[0] = op[i].opw[j].rgb[0]
    49  			(*mp)[k].rgb[1] = op[i].opw[j].rgb[1]
    50  			(*mp)[k].rgb[2] = op[i].opw[j].rgb[2]
    51  			(*mp)[k].polyd = op[i].opw[j].polyd
    52  			(*mp)[k].P = make([]XYZ, op[i].opw[j].polyd)
    53  			(*mp)[k].grpx = op[i].opw[j].grpx
    54  			(*mp)[k].wb = op[i].wb
    55  			(*mp)[k].wa = op[i].wa
    56  			(*mp)[k].e = op[i].e
    57  			(*mp)[k].opname = op[i].opw[j].opwname
    58  
    59  			for l := 0; l < (*mp)[k].polyd; l++ {
    60  				(*mp)[k].P[l] = op[i].opw[j].P[l]
    61  			}
    62  		}
    63  		k++
    64  	}
    65  }
    66  
    67  /*-------------------------------------------------------------------------*/
    68  func DAINYUU_GP(p *XYZ, O XYZ, E XYZ, ls float64, ms float64, ns float64) {
    69  	var t, u float64
    70  
    71  	u = E.X*ls + E.Y*ms + E.Z*ns
    72  
    73  	if u != 0.0 {
    74  		t = (E.X*O.X + E.Y*O.Y + E.Z*O.Z) / u
    75  		p.X = ls * t
    76  		p.Y = ms * t
    77  		p.Z = ns * t
    78  	} else {
    79  		fmt.Println("error DAINYUU_GP")
    80  		os.Exit(1)
    81  	}
    82  }
    83  
    84  /*-----------------------------------------------------------------------*/
    85  func DAINYUU_SMO(opn int, mpn int, op []P_MENN, mp []P_MENN) {
    86  	k := 0
    87  	for i := 0; i < opn; i++ {
    88  		mp[k].sum = op[i].sum
    89  		for j := 0; j < op[i].wd; j++ {
    90  			k++
    91  			mp[k].sum = op[i].opw[j].sumw
    92  		}
    93  		k++
    94  	}
    95  }
    96  
    97  /*-----------------------------------------------------------------------*/
    98  func DAINYUU_SMO2(opn int, mpn int, op []P_MENN, mp []P_MENN, Sdstr []SHADSTR, dcnt int, tm int) {
    99  	k := 0
   100  
   101  	if dcnt == 1 {
   102  		// 過去の影で近似しない時間
   103  		for i := 0; i < opn; i++ {
   104  			mp[k].sum = op[i].sum
   105  			Sdstr[k].sdsum[tm] = mp[k].sum
   106  			for j := 0; j < op[i].wd; j++ {
   107  				k++
   108  				mp[k].sum = op[i].opw[j].sumw
   109  				Sdstr[k].sdsum[tm] = mp[k].sum
   110  			}
   111  			k++
   112  		}
   113  	} else {
   114  		//過去の影で近似する時間
   115  		for k = 0; k < mpn; k++ {
   116  			mp[k].sum = Sdstr[k].sdsum[tm]
   117  		}
   118  	}
   119  }