github.com/archlabjp/eeslism-go@v0.0.0-20231109122333-4bb7bfcdf292/eeslism/COORDNT.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=COORDNT.c
    20  	Create Date=1999.6.7
    21  */
    22  
    23  package eeslism
    24  
    25  import (
    26  	"fmt"
    27  	"math"
    28  	"os"
    29  )
    30  
    31  func LP_COORDNT(
    32  	lpn *int,
    33  	bdpn int,
    34  	obsn int,
    35  	treen int,
    36  	polyn int,
    37  	poly []POLYGN,
    38  	tree []TREE,
    39  	obs []OBS,
    40  	BDP []BBDP,
    41  	lp []P_MENN,
    42  ) {
    43  	var name string
    44  	var i, j, k, p int
    45  	var sWa, cWa, sWb, cWb, a, b, c, chWA, shWA float64
    46  	var csWA, ssWA, csWb, ssWb float64
    47  	var caWb, saWa, caWa, saWb float64
    48  	var cbWa, sbWa float64
    49  
    50  	k = 0
    51  	const M_rad = math.Pi / 180.0
    52  	for i = 0; i < bdpn; i++ {
    53  		sWb = math.Sin(BDP[i].Wb * M_rad)
    54  		cWb = math.Cos(BDP[i].Wb * M_rad)
    55  		sWa = math.Sin(-BDP[i].Wa * M_rad)
    56  		cWa = math.Cos(-BDP[i].Wa * M_rad)
    57  
    58  		if BDP[i].sumsblk != 0 {
    59  			for j = 0; j < BDP[i].sumsblk; j++ {
    60  
    61  				if BDP[i].SBLK[j].sbfname == "HISASI" {
    62  					a = 0.0
    63  					b = 0.0
    64  					c = 0.0
    65  					chWA = 0.0
    66  					shWA = 0.0
    67  
    68  					a = BDP[i].x0 + BDP[i].SBLK[j].x*cWa - BDP[i].SBLK[j].y*cWb*sWa
    69  					b = BDP[i].y0 + BDP[i].SBLK[j].x*sWa + BDP[i].SBLK[j].y*cWb*cWa
    70  					c = BDP[i].z0 + BDP[i].SBLK[j].y*sWb
    71  
    72  					chWA = math.Cos((BDP[i].SBLK[j].WA - BDP[i].Wb) * M_rad)
    73  					shWA = math.Sin((BDP[i].SBLK[j].WA - BDP[i].Wb) * M_rad)
    74  
    75  					lp[k].opname = BDP[i].SBLK[j].snbname
    76  					lp[k].wa = BDP[i].Wa
    77  					lp[k].wb = BDP[i].Wb + (180.0 - BDP[i].SBLK[j].WA)
    78  					if lp[k].wb > 180.0 {
    79  						lp[k].wb = 360.0 - lp[k].wb
    80  					}
    81  
    82  					lp[k].wd = 0
    83  					lp[k].ref = 0.0 /*--付設障害物からの反射率を0としている-*/
    84  					for p = 0; p < 366; p++ {
    85  						lp[k].shad[p] = 1
    86  					}
    87  
    88  					lp[k].sbflg = 1
    89  
    90  					lp[k].rgb[0] = BDP[i].SBLK[j].rgb[0]
    91  					lp[k].rgb[1] = BDP[i].SBLK[j].rgb[1]
    92  					lp[k].rgb[2] = BDP[i].SBLK[j].rgb[2]
    93  					lp[k].polyd = 4
    94  					lp[k].P = make([]XYZ, 4)
    95  
    96  					lp[k].P[0].X = a
    97  					lp[k].P[0].Y = b
    98  					lp[k].P[0].Z = c
    99  
   100  					lp[k].P[1].X = a + BDP[i].SBLK[j].D*chWA*sWa
   101  					lp[k].P[1].Y = b - BDP[i].SBLK[j].D*chWA*cWa
   102  					lp[k].P[1].Z = c + BDP[i].SBLK[j].D*shWA
   103  
   104  					lp[k].P[2].X = lp[k].P[1].X + BDP[i].SBLK[j].W*cWa
   105  					lp[k].P[2].Y = lp[k].P[1].Y + BDP[i].SBLK[j].W*sWa
   106  					lp[k].P[2].Z = lp[k].P[1].Z
   107  
   108  					lp[k].P[3].X = a + BDP[i].SBLK[j].W*cWa
   109  					lp[k].P[3].Y = b + BDP[i].SBLK[j].W*sWa
   110  					lp[k].P[3].Z = c
   111  
   112  					/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   113  					lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
   114  					lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
   115  					lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
   116  					CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
   117  
   118  					//HOUSEN2(&lp[k].P[0],&lp[k].P[1],&lp[k].P[2],&lp[k].e)
   119  
   120  					k = k + 1
   121  				} else if BDP[i].SBLK[j].sbfname == "BARUKONI" {
   122  
   123  					a = 0.0
   124  					b = 0.0
   125  					c = 0.0
   126  					chWA = 0.0
   127  					shWA = 0.0
   128  
   129  					a = BDP[i].x0 + BDP[i].SBLK[j].x*cWa - BDP[i].SBLK[j].y*cWb*sWa
   130  					b = BDP[i].y0 + BDP[i].SBLK[j].x*sWa + BDP[i].SBLK[j].y*cWb*cWa
   131  					c = BDP[i].z0 + BDP[i].SBLK[j].y*sWb
   132  
   133  					chWA = math.Cos((90.0 - BDP[i].Wb) * M_rad)
   134  					shWA = math.Sin((90.0 - BDP[i].Wb) * M_rad)
   135  
   136  					lp[k].opname = BDP[i].SBLK[j].snbname
   137  
   138  					lp[k].wa = BDP[i].Wa
   139  					lp[k].wb = BDP[i].Wb + 90.0
   140  					if lp[k].wb > 180.0 {
   141  						lp[k].wb = -(360.0 - lp[k].wb)
   142  					}
   143  
   144  					lp[k].ref = 0.0
   145  					lp[k].sbflg = 1
   146  
   147  					for p = 0; p < 366; p++ {
   148  						lp[k].shad[p] = 1
   149  					}
   150  
   151  					lp[k].rgb[0] = BDP[i].SBLK[j].rgb[0]
   152  					lp[k].rgb[1] = BDP[i].SBLK[j].rgb[1]
   153  					lp[k].rgb[2] = BDP[i].SBLK[j].rgb[2]
   154  					lp[k].polyd = 4
   155  					lp[k].P = make([]XYZ, 4)
   156  
   157  					lp[k].wd = 0
   158  
   159  					lp[k].P[0].X = a
   160  					lp[k].P[0].Y = b
   161  					lp[k].P[0].Z = c
   162  
   163  					lp[k].P[1].X = a + BDP[i].SBLK[j].D*chWA*sWa
   164  					lp[k].P[1].Y = b - BDP[i].SBLK[j].D*chWA*cWa
   165  					lp[k].P[1].Z = c + BDP[i].SBLK[j].D*shWA
   166  
   167  					lp[k].P[2].X = lp[k].P[1].X + BDP[i].SBLK[j].W*cWa
   168  					lp[k].P[2].Y = lp[k].P[1].Y + BDP[i].SBLK[j].W*sWa
   169  					lp[k].P[2].Z = lp[k].P[1].Z
   170  
   171  					lp[k].P[3].X = a + BDP[i].SBLK[j].W*cWa
   172  					lp[k].P[3].Y = b + BDP[i].SBLK[j].W*sWa
   173  					lp[k].P[3].Z = c
   174  
   175  					/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   176  					lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
   177  					lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
   178  					lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
   179  					CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
   180  
   181  					//HOUSEN2(&lp[k].P[0],&lp[k].P[1],&lp[k].P[2],&lp[k].e)
   182  
   183  					name = "2" + lp[k].opname
   184  					lp[k+1].opname = name
   185  
   186  					lp[k+1].wa = BDP[i].Wa - 90.0
   187  					if lp[k+1].wa <= -180.0 {
   188  						lp[k+1].wa = 360.0 + lp[k+1].wa
   189  					}
   190  					lp[k+1].wb = 90.0
   191  					lp[k+1].ref = 0.0
   192  					lp[k+1].sbflg = 1
   193  
   194  					for p = 0; p < 366; p++ {
   195  						lp[k+1].shad[p] = 1
   196  					}
   197  
   198  					lp[k+1].rgb[0] = BDP[i].SBLK[j].rgb[0]
   199  					lp[k+1].rgb[1] = BDP[i].SBLK[j].rgb[1]
   200  					lp[k+1].rgb[2] = BDP[i].SBLK[j].rgb[2]
   201  					lp[k+1].polyd = 4
   202  					lp[k+1].P = make([]XYZ, 4)
   203  
   204  					lp[k+1].wd = 0
   205  
   206  					lp[k+1].P[0] = lp[k].P[0]
   207  					lp[k+1].P[1] = lp[k].P[1]
   208  					lp[k+1].P[2].X = lp[k+1].P[1].X + BDP[i].SBLK[j].H*cWb*sWa
   209  					lp[k+1].P[2].Y = lp[k+1].P[1].Y - BDP[i].SBLK[j].H*cWb*cWa
   210  					lp[k+1].P[2].Z = lp[k+1].P[1].Z - BDP[i].SBLK[j].H*sWb
   211  					lp[k+1].P[3].X = a + BDP[i].SBLK[j].H*cWb*sWa
   212  					lp[k+1].P[3].Y = b - BDP[i].SBLK[j].H*cWb*cWa
   213  					lp[k+1].P[3].Z = c - BDP[i].SBLK[j].H*sWb
   214  
   215  					/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   216  					lp[k+1].e.Z = math.Cos(lp[k+1].wb * M_rad)
   217  					lp[k+1].e.Y = -math.Sin(lp[k+1].wb*M_rad) * math.Cos(lp[k+1].wa*M_rad)
   218  					lp[k+1].e.X = -math.Sin(lp[k+1].wb*M_rad) * math.Sin(lp[k+1].wa*M_rad)
   219  					CAT(&lp[k+1].e.X, &lp[k+1].e.Y, &lp[k+1].e.Z)
   220  
   221  					//HOUSEN2(&lp[k+1].P[0],&lp[k+1].P[1],&lp[k+1].P[2],&lp[k+1].e)
   222  
   223  					name = "3" + lp[k].opname
   224  					lp[k+2].opname = name
   225  
   226  					lp[k+2].wa = BDP[i].Wa
   227  					lp[k+2].wb = BDP[i].Wb - 90.0
   228  					lp[k+2].ref = BDP[i].SBLK[j].ref
   229  					lp[k+2].sbflg = 1
   230  
   231  					for p = 0; p < 366; p++ {
   232  						lp[k+2].shad[p] = 1
   233  					}
   234  
   235  					lp[k+2].wd = 0
   236  
   237  					lp[k+2].rgb[0] = BDP[i].SBLK[j].rgb[0]
   238  					lp[k+2].rgb[1] = BDP[i].SBLK[j].rgb[1]
   239  					lp[k+2].rgb[2] = BDP[i].SBLK[j].rgb[2]
   240  					lp[k+2].polyd = 4
   241  					lp[k+2].P = make([]XYZ, 4)
   242  
   243  					lp[k+2].P[0] = lp[k+1].P[3]
   244  					lp[k+2].P[1] = lp[k+1].P[2]
   245  					lp[k+2].P[2].X = lp[k+2].P[1].X + BDP[i].SBLK[j].W*cWa
   246  					lp[k+2].P[2].Y = lp[k+2].P[1].Y + BDP[i].SBLK[j].W*sWa
   247  					lp[k+2].P[2].Z = lp[k+2].P[1].Z
   248  					lp[k+2].P[3].X = lp[k+2].P[0].X + BDP[i].SBLK[j].W*cWa
   249  					lp[k+2].P[3].Y = lp[k+2].P[0].Y + BDP[i].SBLK[j].W*sWa
   250  					lp[k+2].P[3].Z = lp[k+2].P[0].Z
   251  
   252  					/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   253  					lp[k+2].e.Z = math.Cos(lp[k+2].wb * M_rad)
   254  					lp[k+2].e.Y = -math.Sin(lp[k+2].wb*M_rad) * math.Cos(lp[k+2].wa*M_rad)
   255  					lp[k+2].e.X = -math.Sin(lp[k+2].wb*M_rad) * math.Sin(lp[k+2].wa*M_rad)
   256  					CAT(&lp[k+2].e.X, &lp[k+2].e.Y, &lp[k+2].e.Z)
   257  
   258  					//HOUSEN2(&lp[k+2].P[0],&lp[k+2].P[1],&lp[k+2].P[2],&lp[k+2].e) ;
   259  
   260  					name = "4" + lp[k].opname
   261  					lp[k+3].opname = name
   262  
   263  					lp[k+3].wa = BDP[i].Wa + 90.0
   264  					if lp[k+3].wa >= 180.0 {
   265  						lp[k+3].wa = lp[k+3].wa - 360.0
   266  					}
   267  					lp[k+3].wb = 90.0
   268  					lp[k+3].ref = 0.0
   269  					lp[k+3].sbflg = 1
   270  
   271  					for p = 0; p < 366; p++ {
   272  						lp[k+3].shad[p] = 1
   273  					}
   274  
   275  					lp[k+3].rgb[0] = BDP[i].SBLK[j].rgb[0]
   276  					lp[k+3].rgb[1] = BDP[i].SBLK[j].rgb[1]
   277  					lp[k+3].rgb[2] = BDP[i].SBLK[j].rgb[2]
   278  					lp[k+3].polyd = 4
   279  					lp[k+3].P = make([]XYZ, 4)
   280  
   281  					lp[k+3].wd = 0
   282  
   283  					lp[k+3].P[0] = lp[k].P[3]
   284  					lp[k+3].P[1] = lp[k].P[2]
   285  					lp[k+3].P[2] = lp[k+2].P[2]
   286  					lp[k+3].P[3] = lp[k+2].P[3]
   287  
   288  					/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   289  					lp[k+3].e.Z = math.Cos(lp[k+3].wb * M_rad)
   290  					lp[k+3].e.Y = -math.Sin(lp[k+3].wb*M_rad) * math.Cos(lp[k+3].wa*M_rad)
   291  					lp[k+3].e.X = -math.Sin(lp[k+3].wb*M_rad) * math.Sin(lp[k+3].wa*M_rad)
   292  					CAT(&lp[k+3].e.X, &lp[k+3].e.Y, &lp[k+3].e.Z)
   293  
   294  					//HOUSEN2(&lp[k+3].P[0],&lp[k+3].P[1],&lp[k+3].P[2],&lp[k+3].e)
   295  
   296  					name = "5" + lp[k].opname
   297  					lp[k+4].opname = name
   298  
   299  					lp[k+4].wa = BDP[i].Wa - 180
   300  					if lp[k+4].wa > 180 {
   301  						lp[k+4].wa = lp[k+4].wa - 360
   302  					} else if lp[k+4].wa < 180 {
   303  						lp[k+4].wa = lp[k+4].wa + 360
   304  					}
   305  
   306  					lp[k+4].wb = BDP[i].Wb
   307  					lp[k+4].ref = 0.0
   308  					lp[k+4].sbflg = 1
   309  
   310  					for p = 0; p < 366; p++ {
   311  						lp[k+4].shad[p] = 1
   312  					}
   313  
   314  					lp[k+4].rgb[0] = BDP[i].SBLK[j].rgb[0]
   315  					lp[k+4].rgb[1] = BDP[i].SBLK[j].rgb[1]
   316  					lp[k+4].rgb[2] = BDP[i].SBLK[j].rgb[2]
   317  					lp[k+4].polyd = 4
   318  					lp[k+4].P = make([]XYZ, 4)
   319  
   320  					lp[k+4].wd = 0
   321  
   322  					lp[k+4].P[0] = lp[k+1].P[2]
   323  					lp[k+4].P[1].X = lp[k+4].P[0].X - BDP[i].SBLK[j].h*sWa*cWb
   324  					lp[k+4].P[1].Y = lp[k+4].P[0].Y + BDP[i].SBLK[j].h*cWa*cWb
   325  					lp[k+4].P[1].Z = lp[k+4].P[0].Z + BDP[i].SBLK[j].h*sWb
   326  					lp[k+4].P[2].X = lp[k+4].P[1].X + BDP[i].SBLK[j].W*cWa
   327  					lp[k+4].P[2].Y = lp[k+4].P[1].Y + BDP[i].SBLK[j].W*sWa
   328  					lp[k+4].P[2].Z = lp[k+4].P[1].Z
   329  					lp[k+4].P[3] = lp[k+3].P[2]
   330  
   331  					/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   332  					lp[k+4].e.Z = math.Cos(lp[k+4].wb * M_rad)
   333  					lp[k+4].e.Y = -math.Sin(lp[k+4].wb*M_rad) * math.Cos(lp[k+4].wa*M_rad)
   334  					lp[k+4].e.X = -math.Sin(lp[k+4].wb*M_rad) * math.Sin(lp[k+4].wa*M_rad)
   335  					CAT(&lp[k+4].e.X, &lp[k+4].e.Y, &lp[k+4].e.Z)
   336  
   337  					//HOUSEN2(&lp[k+4].P[0],&lp[k+4].P[1],&lp[k+4].P[2],&lp[k+4].e)
   338  					k = k + 5
   339  				} else if BDP[i].SBLK[j].sbfname == "SODEKABE" {
   340  
   341  					a = 0.0
   342  					b = 0.0
   343  					c = 0.0
   344  					csWA = 0.0
   345  					ssWA = 0.0
   346  					csWb = 0.0
   347  					ssWb = 0.0
   348  
   349  					a = BDP[i].x0 + BDP[i].SBLK[j].x*cWa - BDP[i].SBLK[j].y*cWb*sWa
   350  					b = BDP[i].y0 + BDP[i].SBLK[j].x*sWa + BDP[i].SBLK[j].y*cWb*cWa
   351  					c = BDP[i].z0 + BDP[i].SBLK[j].y*sWb
   352  					csWA = math.Cos((-BDP[i].Wa - BDP[i].SBLK[j].WA) * M_rad)
   353  					ssWA = math.Sin((-BDP[i].Wa - BDP[i].SBLK[j].WA) * M_rad)
   354  					csWb = math.Cos((90.0 - BDP[i].Wb) * M_rad)
   355  					ssWb = math.Sin((90.0 - BDP[i].Wb) * M_rad)
   356  
   357  					lp[k].opname = BDP[i].SBLK[j].snbname
   358  
   359  					lp[k].wa = BDP[i].Wa - 90.0
   360  					if lp[k].wa <= -180.0 {
   361  						lp[k].wa = 360.0 + lp[k].wa
   362  					}
   363  					lp[k].wb = 90.0
   364  					lp[k].ref = 0.0
   365  					lp[k].sbflg = 1
   366  
   367  					for p = 0; p < 366; p++ {
   368  						lp[k].shad[p] = 1
   369  					}
   370  
   371  					lp[k].rgb[0] = BDP[i].SBLK[j].rgb[0]
   372  					lp[k].rgb[1] = BDP[i].SBLK[j].rgb[1]
   373  					lp[k].rgb[2] = BDP[i].SBLK[j].rgb[2]
   374  					lp[k].polyd = 4
   375  					lp[k].P = make([]XYZ, 4)
   376  
   377  					lp[k].wd = 0
   378  
   379  					lp[k].P[0].X = a
   380  					lp[k].P[0].Y = b
   381  					lp[k].P[0].Z = c
   382  					lp[k].P[1].X = a + BDP[i].SBLK[j].D*csWb*csWA
   383  					lp[k].P[1].Y = b + BDP[i].SBLK[j].D*csWb*ssWA
   384  					lp[k].P[1].Z = c + BDP[i].SBLK[j].D*ssWb
   385  					lp[k].P[2].X = lp[k].P[1].X + BDP[i].SBLK[j].H*cWb*sWa
   386  					lp[k].P[2].Y = lp[k].P[1].Y - BDP[i].SBLK[j].H*cWb*cWa
   387  					lp[k].P[2].Z = lp[k].P[1].Z - BDP[i].SBLK[j].H*sWb
   388  					lp[k].P[3].X = a + BDP[i].SBLK[j].H*cWb*sWa
   389  					lp[k].P[3].Y = b - BDP[i].SBLK[j].H*cWb*cWa
   390  					lp[k].P[3].Z = c - BDP[i].SBLK[j].H*sWb
   391  
   392  					/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   393  					lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
   394  					lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
   395  					lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
   396  					CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
   397  
   398  					//HOUSEN2(&lp[k].P[0],&lp[k].P[1],&lp[k].P[2],&lp[k].e) ;
   399  
   400  					k = k + 1
   401  
   402  				} else if BDP[i].SBLK[j].sbfname == "MADOHIYOKE" {
   403  
   404  					a = 0.0
   405  					b = 0.0
   406  					c = 0.0
   407  					chWA = 0.0
   408  					shWA = 0.0
   409  
   410  					a = BDP[i].x0 + BDP[i].SBLK[j].x*cWa - BDP[i].SBLK[j].y*cWb*sWa
   411  					b = BDP[i].y0 + BDP[i].SBLK[j].x*sWa + BDP[i].SBLK[j].y*cWb*cWa
   412  					c = BDP[i].z0 + BDP[i].SBLK[j].y*sWb
   413  					chWA = math.Cos((90.0 - BDP[i].Wb) * M_rad)
   414  					shWA = math.Sin((90.0 - BDP[i].Wb) * M_rad)
   415  
   416  					lp[k].opname = BDP[i].SBLK[j].snbname
   417  
   418  					lp[k].wa = BDP[i].Wa - 180
   419  					if lp[k].wa > 180 {
   420  						lp[k].wa = lp[k].wa - 360
   421  					} else if lp[k].wa < 180 {
   422  						lp[k].wa = lp[k].wa + 360
   423  					}
   424  
   425  					lp[k].wb = BDP[i].Wb
   426  					lp[k].ref = 0.0
   427  					lp[k].sbflg = 1
   428  
   429  					for p = 0; p < 366; p++ {
   430  						lp[k].shad[p] = 1
   431  					}
   432  
   433  					lp[k].rgb[0] = BDP[i].SBLK[j].rgb[0]
   434  					lp[k].rgb[1] = BDP[i].SBLK[j].rgb[1]
   435  					lp[k].rgb[2] = BDP[i].SBLK[j].rgb[2]
   436  					lp[k].polyd = 4
   437  					lp[k].P = make([]XYZ, 4)
   438  
   439  					lp[k].wd = 0
   440  
   441  					lp[k].P[0].X = a + BDP[i].SBLK[j].D*chWA*sWa
   442  					lp[k].P[0].Y = b - BDP[i].SBLK[j].D*chWA*cWa
   443  					lp[k].P[0].Z = c + BDP[i].SBLK[j].H*shWA
   444  					lp[k].P[1].X = lp[k].P[0].X + BDP[i].SBLK[j].H*cWb*sWa
   445  					lp[k].P[1].Y = lp[k].P[0].Y - BDP[i].SBLK[j].H*cWb*cWa
   446  					lp[k].P[1].Z = lp[k].P[0].Z - BDP[i].SBLK[j].H*sWb
   447  					lp[k].P[3].X = lp[k].P[0].X + BDP[i].SBLK[j].W*cWa
   448  					lp[k].P[3].Y = lp[k].P[0].Y + BDP[i].SBLK[j].W*sWa
   449  					lp[k].P[3].Z = lp[k].P[0].Z
   450  					lp[k].P[2].X = lp[k].P[1].X + BDP[i].SBLK[j].W*cWa
   451  					lp[k].P[2].Y = lp[k].P[1].Y + BDP[i].SBLK[j].W*sWa
   452  					lp[k].P[2].Z = lp[k].P[1].Z
   453  
   454  					/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   455  					lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
   456  					lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
   457  					lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
   458  					CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
   459  
   460  					//HOUSEN2(&lp[k].P[0],&lp[k].P[1],&lp[k].P[2],&lp[k].e) ;
   461  					k = k + 1
   462  				}
   463  			}
   464  		}
   465  
   466  	}
   467  
   468  	/*-----------------------------------------------------*/
   469  
   470  	for i = 0; i < obsn; i++ {
   471  		if obs[i].fname == "rect" {
   472  			caWb = 0.0
   473  			saWa = 0.0
   474  			caWa = 0.0
   475  			saWb = 0.0
   476  
   477  			caWb = math.Cos(obs[i].Wb * M_rad)
   478  			saWa = math.Sin(-obs[i].Wa * M_rad)
   479  			saWb = math.Sin(obs[i].Wb * M_rad)
   480  			caWa = math.Cos(-obs[i].Wa * M_rad)
   481  
   482  			lp[k].opname = obs[i].obsname
   483  
   484  			lp[k].wa = obs[i].Wa
   485  			lp[k].wb = obs[i].Wb
   486  			lp[k].ref = obs[i].ref[0]
   487  			for p = 0; p < 366; p++ {
   488  				lp[k].shad[p] = 1
   489  			}
   490  
   491  			lp[k].rgb[0] = obs[i].rgb[0]
   492  			lp[k].rgb[1] = obs[i].rgb[1]
   493  			lp[k].rgb[2] = obs[i].rgb[2]
   494  			lp[k].polyd = 4
   495  			lp[k].P = make([]XYZ, 4)
   496  
   497  			lp[k].wd = 0
   498  			lp[k].sbflg = 0
   499  
   500  			lp[k].P[0].X = obs[i].x
   501  			lp[k].P[0].Y = obs[i].y
   502  			lp[k].P[0].Z = obs[i].z
   503  			lp[k].P[1].X = obs[i].x - obs[i].H*caWb*saWa
   504  			lp[k].P[1].Y = obs[i].y + obs[i].H*caWb*caWa
   505  			lp[k].P[1].Z = obs[i].z + obs[i].H*saWb
   506  			lp[k].P[2].X = obs[i].x + obs[i].W*caWa - obs[i].H*caWb*saWa
   507  			lp[k].P[2].Y = obs[i].y + obs[i].H*caWb*caWa + obs[i].W*saWa
   508  			lp[k].P[2].Z = obs[i].z + obs[i].H*saWb
   509  			lp[k].P[3].X = obs[i].x + obs[i].W*caWa
   510  			lp[k].P[3].Y = obs[i].y + obs[i].W*saWa
   511  			lp[k].P[3].Z = obs[i].z
   512  
   513  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   514  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
   515  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
   516  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
   517  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
   518  			//HOUSEN2(&lp[k].P[0],&lp[k].P[1],&lp[k].P[2],&lp[k].e)
   519  
   520  			k = k + 1
   521  		} else if obs[i].fname == "cube" {
   522  			cbWa = 0.0
   523  			sbWa = 0.0
   524  
   525  			cbWa = math.Cos(-obs[i].Wa * M_rad)
   526  			sbWa = math.Sin(-obs[i].Wa * M_rad)
   527  
   528  			lp[k].opname = obs[i].obsname
   529  
   530  			lp[k].wa = obs[i].Wa
   531  			lp[k].wb = 90.0
   532  			lp[k].ref = obs[i].ref[0]
   533  			for p = 0; p < 366; p++ {
   534  				lp[k].shad[p] = 1
   535  			}
   536  
   537  			lp[k].rgb[0] = obs[i].rgb[0]
   538  			lp[k].rgb[1] = obs[i].rgb[1]
   539  			lp[k].rgb[2] = obs[i].rgb[2]
   540  			lp[k].polyd = 4
   541  			lp[k].P = make([]XYZ, 4)
   542  
   543  			lp[k].wd = 0
   544  			lp[k].sbflg = 0
   545  
   546  			lp[k].P[0].X = obs[i].x
   547  			lp[k].P[0].Y = obs[i].y
   548  			lp[k].P[0].Z = obs[i].z
   549  			lp[k].P[1].X = obs[i].x
   550  			lp[k].P[1].Y = obs[i].y
   551  			lp[k].P[1].Z = obs[i].z + obs[i].H
   552  			lp[k].P[2].X = obs[i].x + obs[i].W*cbWa
   553  			lp[k].P[2].Y = obs[i].y + obs[i].W*sbWa
   554  			lp[k].P[2].Z = lp[k].P[1].Z
   555  			lp[k].P[3].X = lp[k].P[2].X
   556  			lp[k].P[3].Y = lp[k].P[2].Y
   557  			lp[k].P[3].Z = lp[k].P[0].Z
   558  
   559  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   560  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
   561  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
   562  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
   563  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
   564  
   565  			//HOUSEN2(&lp[k].P[0],&lp[k].P[1],&lp[k].P[2],&lp[k].e)
   566  
   567  			name = "2" + lp[k].opname
   568  			lp[k+1].opname = name
   569  
   570  			lp[k+1].wa = obs[i].Wa - 90.0
   571  			if lp[k+1].wa <= -180.0 {
   572  				lp[k+1].wa = 360.0 + lp[k+1].wa
   573  			}
   574  			lp[k+1].wb = 90.0
   575  			lp[k+1].ref = obs[i].ref[1]
   576  			for p = 0; p < 366; p++ {
   577  				lp[k+1].shad[p] = 1
   578  			}
   579  
   580  			lp[k+1].rgb[0] = obs[i].rgb[0]
   581  			lp[k+1].rgb[1] = obs[i].rgb[1]
   582  			lp[k+1].rgb[2] = obs[i].rgb[2]
   583  			lp[k+1].polyd = 4
   584  			lp[k+1].P = make([]XYZ, 4)
   585  
   586  			lp[k+1].wd = 0
   587  			lp[k+1].sbflg = 0
   588  
   589  			lp[k+1].P[0] = lp[k].P[3]
   590  			lp[k+1].P[1] = lp[k].P[2]
   591  			lp[k+1].P[2].X = lp[k+1].P[1].X - obs[i].D*sbWa
   592  			lp[k+1].P[2].Y = lp[k+1].P[1].Y + obs[i].D*cbWa
   593  			lp[k+1].P[2].Z = lp[k].P[2].Z
   594  			lp[k+1].P[3].X = lp[k+1].P[2].X
   595  			lp[k+1].P[3].Y = lp[k+1].P[2].Y
   596  			lp[k+1].P[3].Z = lp[k+1].P[0].Z
   597  
   598  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   599  			lp[k+1].e.Z = math.Cos(lp[k+1].wb * M_rad)
   600  			lp[k+1].e.Y = -math.Sin(lp[k+1].wb*M_rad) * math.Cos(lp[k+1].wa*M_rad)
   601  			lp[k+1].e.X = -math.Sin(lp[k+1].wb*M_rad) * math.Sin(lp[k+1].wa*M_rad)
   602  			CAT(&lp[k+1].e.X, &lp[k+1].e.Y, &lp[k+1].e.Z)
   603  			//HOUSEN2(&lp[k+1].P[0],&lp[k+1].P[1],&lp[k+1].P[2],&lp[k+1].e)
   604  
   605  			name = "3" + lp[k].opname
   606  			lp[k+2].opname = name
   607  
   608  			lp[k+2].wa = obs[i].Wa - 180.0
   609  			if lp[k+2].wa <= -180.0 {
   610  				lp[k+2].wa = 360.0 + lp[k+2].wa
   611  			}
   612  			lp[k+2].wb = 90.0
   613  			lp[k+2].ref = obs[i].ref[2]
   614  			for p = 0; p < 366; p++ {
   615  				lp[k+2].shad[p] = 1
   616  			}
   617  
   618  			lp[k+2].rgb[0] = obs[i].rgb[0]
   619  			lp[k+2].rgb[1] = obs[i].rgb[1]
   620  			lp[k+2].rgb[2] = obs[i].rgb[2]
   621  			lp[k+2].polyd = 4
   622  			lp[k+2].P = make([]XYZ, 4)
   623  
   624  			lp[k+2].wd = 0
   625  			lp[k+2].sbflg = 0
   626  			lp[k+2].P[0] = lp[k+1].P[3]
   627  			lp[k+2].P[1] = lp[k+1].P[2]
   628  			lp[k+2].P[2].X = obs[i].x - obs[i].D*sbWa
   629  			lp[k+2].P[2].Y = obs[i].y + obs[i].D*cbWa
   630  			lp[k+2].P[2].Z = lp[k+2].P[1].Z
   631  			lp[k+2].P[3].X = lp[k+2].P[2].X
   632  			lp[k+2].P[3].Y = lp[k+2].P[2].Y
   633  			lp[k+2].P[3].Z = lp[k+2].P[0].Z
   634  
   635  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   636  			lp[k+2].e.Z = math.Cos(lp[k+2].wb * M_rad)
   637  			lp[k+2].e.Y = -math.Sin(lp[k+2].wb*M_rad) * math.Cos(lp[k+2].wa*M_rad)
   638  			lp[k+2].e.X = -math.Sin(lp[k+2].wb*M_rad) * math.Sin(lp[k+2].wa*M_rad)
   639  			CAT(&lp[k+2].e.X, &lp[k+2].e.Y, &lp[k+2].e.Z)
   640  			//HOUSEN2(&lp[k+2].P[0],&lp[k+2].P[1],&lp[k+2].P[2],&lp[k+2].e)
   641  
   642  			name = "4" + lp[k].opname
   643  			lp[k+3].opname = name
   644  
   645  			lp[k+3].wa = obs[i].Wa + 90.0
   646  			if lp[k+3].wa > 180.0 {
   647  				lp[k+3].wa = 360.0 - lp[k+3].wa
   648  			}
   649  			lp[k+3].wb = 90.0
   650  			lp[k+3].ref = obs[i].ref[3]
   651  			for p = 0; p < 366; p++ {
   652  				lp[k+3].shad[p] = 1
   653  			}
   654  
   655  			lp[k+3].rgb[0] = obs[i].rgb[0]
   656  			lp[k+3].rgb[1] = obs[i].rgb[1]
   657  			lp[k+3].rgb[2] = obs[i].rgb[2]
   658  			lp[k+3].polyd = 4
   659  			lp[k+3].P = make([]XYZ, 4)
   660  
   661  			lp[k+3].wd = 0
   662  			lp[k+3].sbflg = 0
   663  			lp[k+3].P[0] = lp[k+2].P[3]
   664  			lp[k+3].P[1] = lp[k+2].P[2]
   665  			lp[k+3].P[2] = lp[k].P[1]
   666  			lp[k+3].P[3] = lp[k].P[0]
   667  
   668  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   669  			lp[k+3].e.Z = math.Cos(lp[k+3].wb * M_rad)
   670  			lp[k+3].e.Y = -math.Sin(lp[k+3].wb*M_rad) * math.Cos(lp[k+3].wa*M_rad)
   671  			lp[k+3].e.X = -math.Sin(lp[k+3].wb*M_rad) * math.Sin(lp[k+3].wa*M_rad)
   672  			CAT(&lp[k+3].e.X, &lp[k+3].e.Y, &lp[k+3].e.Z)
   673  			//HOUSEN2(&lp[k+3].P[0],&lp[k+3].P[1],&lp[k+3].P[2],&lp[k+3].e)
   674  
   675  			k = k + 4
   676  		} else if obs[i].fname == "r_tri" {
   677  
   678  			caWb = 0.0
   679  			saWa = 0.0
   680  			caWa = 0.0
   681  			saWb = 0.0
   682  
   683  			caWb = math.Cos(obs[i].Wb * M_rad)
   684  			saWa = math.Sin(obs[i].Wa * M_rad)
   685  			saWb = math.Sin(obs[i].Wb * M_rad)
   686  			caWa = math.Cos(obs[i].Wa * M_rad)
   687  
   688  			lp[k].opname = obs[i].obsname
   689  
   690  			lp[k].wa = obs[i].Wa
   691  			lp[k].wb = obs[i].Wb
   692  			lp[k].ref = obs[i].ref[0]
   693  			for p = 0; p < 366; p++ {
   694  				lp[k].shad[p] = 1
   695  			}
   696  
   697  			lp[k].rgb[0] = obs[i].rgb[0]
   698  			lp[k].rgb[1] = obs[i].rgb[1]
   699  			lp[k].rgb[2] = obs[i].rgb[2]
   700  			lp[k].polyd = 3
   701  			lp[k].P = make([]XYZ, 3)
   702  
   703  			lp[k].wd = 0
   704  			lp[k].sbflg = 0
   705  
   706  			lp[k].P[0].X = obs[i].x
   707  			lp[k].P[0].Y = obs[i].y
   708  			lp[k].P[0].Z = obs[i].z
   709  			lp[k].P[1].X = obs[i].x - obs[i].H*caWb*saWa
   710  			lp[k].P[1].Y = obs[i].y + obs[i].H*caWb*caWa
   711  			lp[k].P[1].Z = obs[i].z + obs[i].H*saWb
   712  			lp[k].P[2].X = obs[i].x + obs[i].W*caWa
   713  			lp[k].P[2].Y = obs[i].y + obs[i].W*saWa
   714  			lp[k].P[2].Z = obs[i].z
   715  
   716  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   717  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
   718  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
   719  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
   720  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
   721  			//HOUSEN2(&lp[k].P[0],&lp[k].P[1],&lp[k].P[2],&lp[k].e)
   722  
   723  			k = k + 1
   724  		} else if obs[i].fname == "i_tri" {
   725  
   726  			caWb = 0.0
   727  			saWa = 0.0
   728  			caWa = 0.0
   729  			saWb = 0.0
   730  
   731  			caWb = math.Cos(obs[i].Wb * M_rad)
   732  			saWa = math.Sin(-obs[i].Wa * M_rad)
   733  			saWb = math.Sin(obs[i].Wb * M_rad)
   734  			caWa = math.Cos(-obs[i].Wa * M_rad)
   735  
   736  			lp[k].opname = obs[i].obsname
   737  
   738  			lp[k].wa = obs[i].Wa
   739  			lp[k].wb = obs[i].Wb
   740  			lp[k].ref = obs[i].ref[0]
   741  			for p = 0; p < 366; p++ {
   742  				lp[k].shad[p] = 1
   743  			}
   744  
   745  			lp[k].rgb[0] = obs[i].rgb[0]
   746  			lp[k].rgb[1] = obs[i].rgb[1]
   747  			lp[k].rgb[2] = obs[i].rgb[2]
   748  			lp[k].polyd = 3
   749  			lp[k].P = make([]XYZ, 3)
   750  
   751  			lp[k].wd = 0
   752  			lp[k].sbflg = 0
   753  
   754  			lp[k].P[0].X = obs[i].x
   755  			lp[k].P[0].Y = obs[i].y
   756  			lp[k].P[0].Z = obs[i].z
   757  			lp[k].P[1].X = obs[i].x + ((obs[i].W)/2)*caWa - obs[i].H*caWb*saWa
   758  			lp[k].P[1].Y = obs[i].y + obs[i].H*caWb*caWa + ((obs[i].W)/2)*saWa
   759  			lp[k].P[1].Z = obs[i].z + obs[i].H*saWb
   760  			lp[k].P[2].X = obs[i].x + obs[i].W*caWa
   761  			lp[k].P[2].Y = obs[i].y + obs[i].W*saWa
   762  			lp[k].P[2].Z = obs[i].z
   763  
   764  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   765  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
   766  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
   767  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
   768  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
   769  			//HOUSEN2(&lp[k].P[0],&lp[k].P[1],&lp[k].P[2],&lp[k].e)
   770  
   771  			k = k + 1
   772  		} else {
   773  			fmt.Printf("error--**COORDNT-lp\n")
   774  			os.Exit(1)
   775  		}
   776  
   777  	}
   778  
   779  	/*--------------------------------------------------------*/
   780  	for i = 0; i < treen; i++ {
   781  		if tree[i].treetype == "treeA" {
   782  			name = tree[i].treename + "-m1"
   783  			lp[k].opname = name
   784  
   785  			for p = 0; p < 366; p++ {
   786  				lp[k].shad[p] = 1
   787  			}
   788  
   789  			lp[k].rgb[0] = 0.4
   790  			lp[k].rgb[1] = 0.3
   791  			lp[k].rgb[2] = 0.01
   792  			lp[k].polyd = 4
   793  			lp[k].P = make([]XYZ, 4)
   794  
   795  			lp[k].wa = 0
   796  			lp[k].wb = 90.0
   797  			lp[k].ref = 0.0
   798  			lp[k].wd = 0
   799  			lp[k].sbflg = 0
   800  
   801  			lp[k].P[0].X = tree[i].x - (tree[i].W1 * 0.5)
   802  			lp[k].P[0].Y = tree[i].y - (tree[i].W1 * 0.5)
   803  			lp[k].P[0].Z = tree[i].z
   804  			lp[k].P[1].X = lp[k].P[0].X
   805  			lp[k].P[1].Y = lp[k].P[0].Y
   806  			lp[k].P[1].Z = tree[i].z + tree[i].H1
   807  			lp[k].P[2].X = tree[i].x + (tree[i].W1 * 0.5)
   808  			lp[k].P[2].Y = lp[k].P[0].Y
   809  			lp[k].P[2].Z = tree[i].z + tree[i].H1
   810  			lp[k].P[3].X = lp[k].P[2].X
   811  			lp[k].P[3].Y = lp[k].P[0].Y
   812  			lp[k].P[3].Z = tree[i].z
   813  
   814  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   815  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
   816  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
   817  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
   818  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
   819  			//HOUSEN2(&lp[k].P[0],&lp[k].P[1],&lp[k].P[2],&lp[k].e)
   820  
   821  			k = k + 1
   822  
   823  			/*----2----*/
   824  			name = tree[i].treename + "-m2"
   825  			lp[k].opname = name
   826  			lp[k].wa = -90.0
   827  			lp[k].wb = 90.0
   828  			lp[k].ref = 0.0
   829  			lp[k].wd = 0
   830  			lp[k].sbflg = 0
   831  
   832  			for p = 0; p < 366; p++ {
   833  				lp[k].shad[p] = 1
   834  			}
   835  
   836  			lp[k].rgb[0] = 0.4
   837  			lp[k].rgb[1] = 0.3
   838  			lp[k].rgb[2] = 0.01
   839  			lp[k].polyd = 4
   840  			lp[k].P = make([]XYZ, 4)
   841  
   842  			lp[k].P[0] = lp[k-1].P[3]
   843  			lp[k].P[1] = lp[k-1].P[2]
   844  			lp[k].P[2].X = tree[i].x + (tree[i].W1 * 0.5)
   845  			lp[k].P[2].Y = tree[i].y + (tree[i].W1 * 0.5)
   846  			lp[k].P[2].Z = tree[i].z + tree[i].H1
   847  			lp[k].P[3].X = lp[k].P[2].X
   848  			lp[k].P[3].Y = lp[k].P[2].Y
   849  			lp[k].P[3].Z = tree[i].z
   850  
   851  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   852  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
   853  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
   854  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
   855  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
   856  			//HOUSEN2(&lp[k].P[0],&lp[k].P[1],&lp[k].P[2],&lp[k].e)
   857  
   858  			k = k + 1
   859  
   860  			/*----3----*/
   861  			name = tree[i].treename + "-m3"
   862  			lp[k].opname = name
   863  
   864  			lp[k].wa = 180.0
   865  			lp[k].wb = 90.0
   866  			lp[k].ref = 0.0
   867  			lp[k].wd = 0
   868  			lp[k].sbflg = 0
   869  
   870  			for p = 0; p < 366; p++ {
   871  				lp[k].shad[p] = 1
   872  			}
   873  
   874  			lp[k].rgb[0] = 0.4
   875  			lp[k].rgb[1] = 0.3
   876  			lp[k].rgb[2] = 0.01
   877  			lp[k].polyd = 4
   878  			lp[k].P = make([]XYZ, 4)
   879  
   880  			lp[k].P[0] = lp[k-1].P[3]
   881  			lp[k].P[1] = lp[k-1].P[2]
   882  			lp[k].P[2].X = tree[i].x - (tree[i].W1 * 0.5)
   883  			lp[k].P[2].Y = tree[i].y + (tree[i].W1 * 0.5)
   884  			lp[k].P[2].Z = tree[i].z + tree[i].H1
   885  			lp[k].P[3].X = lp[k].P[2].X
   886  			lp[k].P[3].Y = lp[k].P[2].Y
   887  			lp[k].P[3].Z = tree[i].z
   888  
   889  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   890  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
   891  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
   892  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
   893  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
   894  			//HOUSEN2(&lp[k].P[0],&lp[k].P[1],&lp[k].P[2],&lp[k].e)
   895  
   896  			k = k + 1
   897  
   898  			/*----4----*/
   899  			name = tree[i].treename + "-m4"
   900  			lp[k].opname = name
   901  
   902  			lp[k].wa = 90.0
   903  			lp[k].wb = 90.0
   904  			lp[k].ref = 0.0
   905  			lp[k].wd = 0
   906  			lp[k].sbflg = 0
   907  
   908  			for p = 0; p < 366; p++ {
   909  				lp[k].shad[p] = 1
   910  			}
   911  
   912  			lp[k].rgb[0] = 0.4
   913  			lp[k].rgb[1] = 0.3
   914  			lp[k].rgb[2] = 0.01
   915  			lp[k].polyd = 4
   916  			lp[k].P = make([]XYZ, 4)
   917  
   918  			lp[k].P[0] = lp[k-1].P[3]
   919  			lp[k].P[1] = lp[k-1].P[2]
   920  			lp[k].P[2] = lp[k-3].P[1]
   921  			lp[k].P[3] = lp[k-3].P[0]
   922  
   923  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   924  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
   925  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
   926  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
   927  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
   928  			//HOUSEN2(&lp[k].P[0],&lp[k].P[1],&lp[k].P[2],&lp[k].e)
   929  
   930  			k = k + 1
   931  
   932  			/*----5----*/
   933  			name = tree[i].treename
   934  			lp[k].opname = name
   935  
   936  			lp[k].wa = -22.5
   937  			lp[k].ref = 0.0
   938  			lp[k].wd = 0
   939  			lp[k].sbflg = 0
   940  
   941  			for p = 0; p < 366; p++ {
   942  				lp[k].shad[p] = 1
   943  			}
   944  
   945  			lp[k].rgb[0] = 0.0
   946  			lp[k].rgb[1] = 1
   947  			lp[k].rgb[2] = 0.0
   948  			lp[k].polyd = 4
   949  			lp[k].P = make([]XYZ, 4)
   950  
   951  			lp[k].P[0].X = tree[i].x
   952  			lp[k].P[0].Y = tree[i].y - (tree[i].W2 * 0.5)
   953  			lp[k].P[0].Z = tree[i].z + tree[i].H1
   954  			lp[k].P[1].X = tree[i].x
   955  			lp[k].P[1].Y = tree[i].y - (tree[i].W3 * 0.5)
   956  			lp[k].P[1].Z = tree[i].z + tree[i].H1 + tree[i].H2
   957  			lp[k].P[2].X = tree[i].x + (tree[i].W3*0.5)*math.Cos(45*M_rad)
   958  			lp[k].P[2].Y = tree[i].y - (tree[i].W3*0.5)*math.Sin(45*M_rad)
   959  			lp[k].P[2].Z = lp[k].P[1].Z
   960  			lp[k].P[3].X = tree[i].x + (tree[i].W2*0.5)*math.Cos(45*M_rad)
   961  			lp[k].P[3].Y = tree[i].y - (tree[i].W2*0.5)*math.Sin(45*M_rad)
   962  			lp[k].P[3].Z = tree[i].z + tree[i].H1
   963  
   964  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
   965  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
   966  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
   967  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
   968  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
   969  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
   970  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
   971  
   972  			k = k + 1
   973  
   974  			/*----6----*/
   975  			name = tree[i].treename
   976  			lp[k].opname = name
   977  
   978  			lp[k].wa = lp[k-1].wa - 45
   979  			lp[k].ref = 0.0
   980  			lp[k].wd = 0
   981  			lp[k].sbflg = 0
   982  
   983  			for p = 0; p < 366; p++ {
   984  				lp[k].shad[p] = 1
   985  			}
   986  
   987  			lp[k].rgb[0] = 0.0
   988  			lp[k].rgb[1] = 1
   989  			lp[k].rgb[2] = 0.0
   990  			lp[k].polyd = 4
   991  			lp[k].P = make([]XYZ, 4)
   992  
   993  			lp[k].P[0] = lp[k-1].P[3]
   994  			lp[k].P[1] = lp[k-1].P[2]
   995  			lp[k].P[2].X = tree[i].x + (tree[i].W3 * 0.5)
   996  			lp[k].P[2].Y = tree[i].y
   997  			lp[k].P[2].Z = lp[k].P[1].Z
   998  			lp[k].P[3].X = tree[i].x + (tree[i].W2 * 0.5)
   999  			lp[k].P[3].Y = tree[i].y
  1000  			lp[k].P[3].Z = lp[k].P[0].Z
  1001  
  1002  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1003  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1004  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1005  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1006  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1007  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1008  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1009  
  1010  			k = k + 1
  1011  
  1012  			/*----7----*/
  1013  			name = tree[i].treename
  1014  			lp[k].opname = name
  1015  
  1016  			lp[k].wa = lp[k-1].wa - 45
  1017  			lp[k].ref = 0.0
  1018  			lp[k].wd = 0
  1019  			lp[k].sbflg = 0
  1020  
  1021  			for p = 0; p < 366; p++ {
  1022  				lp[k].shad[p] = 1
  1023  			}
  1024  
  1025  			lp[k].rgb[0] = 0.0
  1026  			lp[k].rgb[1] = 1
  1027  			lp[k].rgb[2] = 0.0
  1028  			lp[k].polyd = 4
  1029  			lp[k].P = make([]XYZ, 4)
  1030  
  1031  			lp[k].P[0] = lp[k-1].P[3]
  1032  			lp[k].P[1] = lp[k-1].P[2]
  1033  			lp[k].P[2].X = tree[i].x + (tree[i].W3*0.5)*math.Cos(45*M_rad)
  1034  			lp[k].P[2].Y = tree[i].y + (tree[i].W3*0.5)*math.Sin(45*M_rad)
  1035  			lp[k].P[2].Z = lp[k].P[1].Z
  1036  			lp[k].P[3].X = tree[i].x + (tree[i].W2*0.5)*math.Cos(45*M_rad)
  1037  			lp[k].P[3].Y = tree[i].y + (tree[i].W2*0.5)*math.Sin(45*M_rad)
  1038  			lp[k].P[3].Z = lp[k].P[0].Z
  1039  
  1040  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1041  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1042  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1043  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1044  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1045  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1046  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1047  
  1048  			k = k + 1
  1049  
  1050  			/*----8----*/
  1051  			name = tree[i].treename
  1052  			lp[k].opname = name
  1053  
  1054  			lp[k].wa = lp[k-1].wa - 45
  1055  			lp[k].ref = 0.0
  1056  			lp[k].wd = 0
  1057  			lp[k].sbflg = 0
  1058  
  1059  			for p = 0; p < 366; p++ {
  1060  				lp[k].shad[p] = 1
  1061  			}
  1062  
  1063  			lp[k].rgb[0] = 0.0
  1064  			lp[k].rgb[1] = 1
  1065  			lp[k].rgb[2] = 0.0
  1066  			lp[k].polyd = 4
  1067  			lp[k].P = make([]XYZ, 4)
  1068  
  1069  			lp[k].P[0] = lp[k-1].P[3]
  1070  			lp[k].P[1] = lp[k-1].P[2]
  1071  			lp[k].P[2].X = tree[i].x
  1072  			lp[k].P[2].Y = tree[i].y + (tree[i].W3 * 0.5)
  1073  			lp[k].P[2].Z = lp[k].P[1].Z
  1074  			lp[k].P[3].X = tree[i].x
  1075  			lp[k].P[3].Y = tree[i].y + (tree[i].W2 * 0.5)
  1076  			lp[k].P[3].Z = lp[k].P[0].Z
  1077  
  1078  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1079  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1080  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1081  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1082  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1083  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1084  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1085  
  1086  			k = k + 1
  1087  
  1088  			/*----9----*/
  1089  			name = tree[i].treename
  1090  			lp[k].opname = name
  1091  
  1092  			lp[k].wa = 360 + (lp[k-1].wa - 45)
  1093  			lp[k].ref = 0.0
  1094  			lp[k].wd = 0
  1095  			lp[k].sbflg = 0
  1096  
  1097  			for p = 0; p < 366; p++ {
  1098  				lp[k].shad[p] = 1
  1099  			}
  1100  
  1101  			lp[k].rgb[0] = 0.0
  1102  			lp[k].rgb[1] = 1
  1103  			lp[k].rgb[2] = 0.0
  1104  			lp[k].polyd = 4
  1105  			lp[k].P = make([]XYZ, 4)
  1106  
  1107  			lp[k].P[0] = lp[k-1].P[3]
  1108  			lp[k].P[1] = lp[k-1].P[2]
  1109  			lp[k].P[2].X = tree[i].x - (tree[i].W3*0.5)*math.Cos(45*M_rad)
  1110  			lp[k].P[2].Y = tree[i].y + (tree[i].W3*0.5)*math.Sin(45*M_rad)
  1111  			lp[k].P[2].Z = lp[k].P[1].Z
  1112  			lp[k].P[3].X = tree[i].x - (tree[i].W2*0.5)*math.Cos(45*M_rad)
  1113  			lp[k].P[3].Y = tree[i].y + (tree[i].W2*0.5)*math.Sin(45*M_rad)
  1114  			lp[k].P[3].Z = lp[k].P[0].Z
  1115  
  1116  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1117  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1118  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1119  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1120  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1121  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1122  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1123  
  1124  			k = k + 1
  1125  
  1126  			/*----10----*/
  1127  			name = tree[i].treename
  1128  			lp[k].opname = name
  1129  
  1130  			lp[k].wa = lp[k-1].wa - 45
  1131  			lp[k].ref = 0.0
  1132  			lp[k].wd = 0
  1133  			lp[k].sbflg = 0
  1134  
  1135  			for p = 0; p < 366; p++ {
  1136  				lp[k].shad[p] = 1
  1137  			}
  1138  
  1139  			lp[k].rgb[0] = 0.0
  1140  			lp[k].rgb[1] = 1
  1141  			lp[k].rgb[2] = 0.0
  1142  			lp[k].polyd = 4
  1143  			lp[k].P = make([]XYZ, 4)
  1144  
  1145  			lp[k].P[0] = lp[k-1].P[3]
  1146  			lp[k].P[1] = lp[k-1].P[2]
  1147  			lp[k].P[2].X = tree[i].x - (tree[i].W3 * 0.5)
  1148  			lp[k].P[2].Y = tree[i].y
  1149  			lp[k].P[2].Z = lp[k].P[1].Z
  1150  			lp[k].P[3].X = tree[i].x - (tree[i].W2 * 0.5)
  1151  			lp[k].P[3].Y = tree[i].y
  1152  			lp[k].P[3].Z = lp[k].P[0].Z
  1153  
  1154  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1155  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1156  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1157  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1158  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1159  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1160  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1161  
  1162  			k = k + 1
  1163  
  1164  			/*----11----*/
  1165  			name = tree[i].treename
  1166  			lp[k].opname = name
  1167  
  1168  			lp[k].wa = lp[k-1].wa - 45
  1169  			lp[k].ref = 0.0
  1170  			lp[k].wd = 0
  1171  			lp[k].sbflg = 0
  1172  
  1173  			for p = 0; p < 366; p++ {
  1174  				lp[k].shad[p] = 1
  1175  			}
  1176  
  1177  			lp[k].rgb[0] = 0.0
  1178  			lp[k].rgb[1] = 1
  1179  			lp[k].rgb[2] = 0.0
  1180  			lp[k].polyd = 4
  1181  			lp[k].P = make([]XYZ, 4)
  1182  
  1183  			lp[k].P[0] = lp[k-1].P[3]
  1184  			lp[k].P[1] = lp[k-1].P[2]
  1185  			lp[k].P[2].X = tree[i].x - (tree[i].W3*0.5)*math.Cos(45*M_rad)
  1186  			lp[k].P[2].Y = tree[i].y - (tree[i].W3*0.5)*math.Sin(45*M_rad)
  1187  			lp[k].P[2].Z = lp[k].P[1].Z
  1188  			lp[k].P[3].X = tree[i].x - (tree[i].W2*0.5)*math.Cos(45*M_rad)
  1189  			lp[k].P[3].Y = tree[i].y - (tree[i].W2*0.5)*math.Sin(45*M_rad)
  1190  			lp[k].P[3].Z = lp[k].P[0].Z
  1191  
  1192  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1193  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1194  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1195  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1196  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1197  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1198  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1199  
  1200  			k = k + 1
  1201  
  1202  			/*----12----*/
  1203  			name = tree[i].treename
  1204  			lp[k].opname = name
  1205  
  1206  			lp[k].wa = lp[k-1].wa - 45
  1207  			lp[k].ref = 0.0
  1208  			lp[k].wd = 0
  1209  			lp[k].sbflg = 0
  1210  
  1211  			for p = 0; p < 366; p++ {
  1212  				lp[k].shad[p] = 1
  1213  			}
  1214  
  1215  			lp[k].rgb[0] = 0.0
  1216  			lp[k].rgb[1] = 1
  1217  			lp[k].rgb[2] = 0.0
  1218  			lp[k].polyd = 4
  1219  			lp[k].P = make([]XYZ, 4)
  1220  
  1221  			lp[k].P[0] = lp[k-1].P[3]
  1222  			lp[k].P[1] = lp[k-1].P[2]
  1223  			lp[k].P[2].X = tree[i].x
  1224  			lp[k].P[2].Y = tree[i].y - (tree[i].W3 * 0.5)
  1225  			lp[k].P[2].Z = lp[k].P[1].Z
  1226  			lp[k].P[3].X = tree[i].x
  1227  			lp[k].P[3].Y = tree[i].y - (tree[i].W2 * 0.5)
  1228  			lp[k].P[3].Z = lp[k].P[0].Z
  1229  
  1230  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1231  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1232  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1233  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1234  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1235  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1236  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1237  
  1238  			k = k + 1
  1239  
  1240  			/*----13----*/
  1241  			name = tree[i].treename
  1242  			lp[k].opname = name
  1243  
  1244  			lp[k].wa = -22.5
  1245  			lp[k].ref = 0.0
  1246  			lp[k].wd = 0
  1247  			lp[k].sbflg = 0
  1248  
  1249  			for p = 0; p < 366; p++ {
  1250  				lp[k].shad[p] = 1
  1251  			}
  1252  
  1253  			lp[k].rgb[0] = 0.0
  1254  			lp[k].rgb[1] = 1
  1255  			lp[k].rgb[2] = 0.0
  1256  			lp[k].polyd = 4
  1257  			lp[k].P = make([]XYZ, 4)
  1258  
  1259  			lp[k].P[0].X = tree[i].x
  1260  			lp[k].P[0].Y = tree[i].y - (tree[i].W3 * 0.5)
  1261  			lp[k].P[0].Z = tree[i].z + tree[i].H1 + tree[i].H2
  1262  			lp[k].P[1].X = tree[i].x
  1263  			lp[k].P[1].Y = tree[i].y - (tree[i].W4 * 0.5)
  1264  			lp[k].P[1].Z = tree[i].z + tree[i].H1 + tree[i].H2 + tree[i].H3
  1265  			lp[k].P[2].X = tree[i].x + (tree[i].W4*0.5)*math.Cos(45*M_rad)
  1266  			lp[k].P[2].Y = tree[i].y - (tree[i].W4*0.5)*math.Sin(45*M_rad)
  1267  			lp[k].P[2].Z = lp[k].P[1].Z
  1268  			lp[k].P[3].X = tree[i].x + (tree[i].W3*0.5)*math.Cos(45*M_rad)
  1269  			lp[k].P[3].Y = tree[i].y - (tree[i].W3*0.5)*math.Sin(45*M_rad)
  1270  			lp[k].P[3].Z = lp[k].P[0].Z
  1271  
  1272  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1273  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1274  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1275  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1276  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1277  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1278  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1279  
  1280  			k = k + 1
  1281  
  1282  			/*----14----*/
  1283  			name = tree[i].treename
  1284  			lp[k].opname = name
  1285  
  1286  			lp[k].wa = lp[k-1].wa - 45
  1287  			lp[k].ref = 0.0
  1288  			lp[k].wd = 0
  1289  			lp[k].sbflg = 0
  1290  
  1291  			for p = 0; p < 366; p++ {
  1292  				lp[k].shad[p] = 1
  1293  			}
  1294  
  1295  			lp[k].rgb[0] = 0.0
  1296  			lp[k].rgb[1] = 1
  1297  			lp[k].rgb[2] = 0.0
  1298  			lp[k].polyd = 4
  1299  			lp[k].P = make([]XYZ, 4)
  1300  
  1301  			lp[k].P[0] = lp[k-1].P[3]
  1302  			lp[k].P[1] = lp[k-1].P[2]
  1303  			lp[k].P[2].X = tree[i].x + (tree[i].W4 * 0.5)
  1304  			lp[k].P[2].Y = tree[i].y
  1305  			lp[k].P[2].Z = lp[k].P[1].Z
  1306  			lp[k].P[3].X = tree[i].x + (tree[i].W3 * 0.5)
  1307  			lp[k].P[3].Y = tree[i].y
  1308  			lp[k].P[3].Z = lp[k].P[0].Z
  1309  
  1310  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1311  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1312  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1313  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1314  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1315  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1316  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1317  
  1318  			k = k + 1
  1319  
  1320  			/*----15----*/
  1321  			name = tree[i].treename
  1322  			lp[k].opname = name
  1323  
  1324  			lp[k].wa = lp[k-1].wa - 45
  1325  			lp[k].ref = 0.0
  1326  			lp[k].wd = 0
  1327  			lp[k].sbflg = 0
  1328  
  1329  			for p = 0; p < 366; p++ {
  1330  				lp[k].shad[p] = 1
  1331  			}
  1332  
  1333  			lp[k].rgb[0] = 0.0
  1334  			lp[k].rgb[1] = 1
  1335  			lp[k].rgb[2] = 0.0
  1336  			lp[k].polyd = 4
  1337  			lp[k].P = make([]XYZ, 4)
  1338  
  1339  			lp[k].P[0] = lp[k-1].P[3]
  1340  			lp[k].P[1] = lp[k-1].P[2]
  1341  			lp[k].P[2].X = tree[i].x + (tree[i].W4*0.5)*math.Cos(45*M_rad)
  1342  			lp[k].P[2].Y = tree[i].y + (tree[i].W4*0.5)*math.Sin(45*M_rad)
  1343  			lp[k].P[2].Z = lp[k].P[1].Z
  1344  			lp[k].P[3].X = tree[i].x + (tree[i].W3*0.5)*math.Cos(45*M_rad)
  1345  			lp[k].P[3].Y = tree[i].y + (tree[i].W3*0.5)*math.Sin(45*M_rad)
  1346  			lp[k].P[3].Z = lp[k].P[0].Z
  1347  
  1348  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1349  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1350  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1351  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1352  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1353  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1354  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1355  
  1356  			k = k + 1
  1357  
  1358  			/*----16----*/
  1359  			name = tree[i].treename
  1360  			lp[k].opname = name
  1361  
  1362  			lp[k].wa = lp[k-1].wa - 45
  1363  			lp[k].ref = 0.0
  1364  			lp[k].wd = 0
  1365  			lp[k].sbflg = 0
  1366  
  1367  			for p = 0; p < 366; p++ {
  1368  				lp[k].shad[p] = 1
  1369  			}
  1370  
  1371  			lp[k].rgb[0] = 0.0
  1372  			lp[k].rgb[1] = 1
  1373  			lp[k].rgb[2] = 0.0
  1374  			lp[k].polyd = 4
  1375  			lp[k].P = make([]XYZ, 4)
  1376  
  1377  			lp[k].P[0] = lp[k-1].P[3]
  1378  			lp[k].P[1] = lp[k-1].P[2]
  1379  			lp[k].P[2].X = tree[i].x
  1380  			lp[k].P[2].Y = tree[i].y + (tree[i].W4 * 0.5)
  1381  			lp[k].P[2].Z = lp[k].P[1].Z
  1382  			lp[k].P[3].X = tree[i].x
  1383  			lp[k].P[3].Y = tree[i].y + (tree[i].W3 * 0.5)
  1384  			lp[k].P[3].Z = lp[k].P[0].Z
  1385  
  1386  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1387  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1388  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1389  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1390  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1391  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1392  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1393  
  1394  			k = k + 1
  1395  
  1396  			/*---17---*/
  1397  			name = tree[i].treename
  1398  			lp[k].opname = name
  1399  
  1400  			lp[k].wa = 360 + (lp[k-1].wa - 45)
  1401  			lp[k].ref = 0.0
  1402  			lp[k].wd = 0
  1403  			lp[k].sbflg = 0
  1404  
  1405  			for p = 0; p < 366; p++ {
  1406  				lp[k].shad[p] = 1
  1407  			}
  1408  
  1409  			lp[k].rgb[0] = 0.0
  1410  			lp[k].rgb[1] = 1
  1411  			lp[k].rgb[2] = 0.0
  1412  			lp[k].polyd = 4
  1413  			lp[k].P = make([]XYZ, 4)
  1414  
  1415  			lp[k].P[0] = lp[k-1].P[3]
  1416  			lp[k].P[1] = lp[k-1].P[2]
  1417  			lp[k].P[2].X = tree[i].x - (tree[i].W4*0.5)*math.Cos(45*M_rad)
  1418  			lp[k].P[2].Y = tree[i].y + (tree[i].W4*0.5)*math.Sin(45*M_rad)
  1419  			lp[k].P[2].Z = lp[k].P[1].Z
  1420  			lp[k].P[3].X = tree[i].x - (tree[i].W3*0.5)*math.Cos(45*M_rad)
  1421  			lp[k].P[3].Y = tree[i].y + (tree[i].W3*0.5)*math.Sin(45*M_rad)
  1422  			lp[k].P[3].Z = lp[k].P[0].Z
  1423  
  1424  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1425  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1426  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1427  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1428  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1429  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1430  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1431  
  1432  			k = k + 1
  1433  
  1434  			/*----18----*/
  1435  			name = tree[i].treename
  1436  			lp[k].opname = name
  1437  
  1438  			lp[k].wa = lp[k-1].wa - 45
  1439  			lp[k].ref = 0.0
  1440  			lp[k].wd = 0
  1441  			lp[k].sbflg = 0
  1442  
  1443  			for p = 0; p < 366; p++ {
  1444  				lp[k].shad[p] = 1
  1445  			}
  1446  
  1447  			lp[k].rgb[0] = 0.0
  1448  			lp[k].rgb[1] = 1
  1449  			lp[k].rgb[2] = 0.0
  1450  			lp[k].polyd = 4
  1451  			lp[k].P = make([]XYZ, 4)
  1452  
  1453  			lp[k].P[0] = lp[k-1].P[3]
  1454  			lp[k].P[1] = lp[k-1].P[2]
  1455  			lp[k].P[2].X = tree[i].x - (tree[i].W4 * 0.5)
  1456  			lp[k].P[2].Y = tree[i].y
  1457  			lp[k].P[2].Z = lp[k].P[1].Z
  1458  			lp[k].P[3].X = tree[i].x - (tree[i].W3 * 0.5)
  1459  			lp[k].P[3].Y = tree[i].y
  1460  			lp[k].P[3].Z = lp[k].P[0].Z
  1461  
  1462  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1463  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1464  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1465  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1466  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1467  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1468  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1469  
  1470  			k = k + 1
  1471  
  1472  			/*---19----*/
  1473  			name = tree[i].treename
  1474  			lp[k].opname = name
  1475  
  1476  			lp[k].wa = lp[k-1].wa - 45
  1477  			lp[k].ref = 0.0
  1478  			lp[k].wd = 0
  1479  			lp[k].sbflg = 0
  1480  
  1481  			for p = 0; p < 366; p++ {
  1482  				lp[k].shad[p] = 1
  1483  			}
  1484  
  1485  			lp[k].rgb[0] = 0.0
  1486  			lp[k].rgb[1] = 1
  1487  			lp[k].rgb[2] = 0.0
  1488  			lp[k].polyd = 4
  1489  			lp[k].P = make([]XYZ, 4)
  1490  
  1491  			lp[k].P[0] = lp[k-1].P[3]
  1492  			lp[k].P[1] = lp[k-1].P[2]
  1493  			lp[k].P[2].X = tree[i].x - (tree[i].W4*0.5)*math.Cos(45*M_rad)
  1494  			lp[k].P[2].Y = tree[i].y - (tree[i].W4*0.5)*math.Sin(45*M_rad)
  1495  			lp[k].P[2].Z = lp[k].P[1].Z
  1496  			lp[k].P[3].X = tree[i].x - (tree[i].W3*0.5)*math.Cos(45*M_rad)
  1497  			lp[k].P[3].Y = tree[i].y - (tree[i].W3*0.5)*math.Sin(45*M_rad)
  1498  			lp[k].P[3].Z = lp[k].P[0].Z
  1499  
  1500  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1501  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1502  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1503  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1504  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1505  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1506  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1507  
  1508  			k = k + 1
  1509  
  1510  			/*---20----*/
  1511  			name = tree[i].treename
  1512  			lp[k].opname = name
  1513  
  1514  			lp[k].wa = lp[k-1].wa - 45
  1515  			lp[k].ref = 0.0
  1516  			lp[k].wd = 0
  1517  			lp[k].sbflg = 0
  1518  
  1519  			for p = 0; p < 366; p++ {
  1520  				lp[k].shad[p] = 1
  1521  			}
  1522  
  1523  			lp[k].rgb[0] = 0.0
  1524  			lp[k].rgb[1] = 1
  1525  			lp[k].rgb[2] = 0.0
  1526  			lp[k].polyd = 4
  1527  			lp[k].P = make([]XYZ, 4)
  1528  
  1529  			lp[k].P[0] = lp[k-1].P[3]
  1530  			lp[k].P[1] = lp[k-1].P[2]
  1531  			lp[k].P[2].X = tree[i].x
  1532  			lp[k].P[2].Y = tree[i].y - (tree[i].W4 * 0.5)
  1533  			lp[k].P[2].Z = lp[k].P[1].Z
  1534  			lp[k].P[3].X = tree[i].x
  1535  			lp[k].P[3].Y = tree[i].y - (tree[i].W3 * 0.5)
  1536  			lp[k].P[3].Z = lp[k].P[0].Z
  1537  
  1538  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1539  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1540  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1541  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1542  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1543  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1544  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1545  
  1546  			k = k + 1
  1547  		} else {
  1548  			fmt.Printf("error--**COORDNT-lp TREE \n")
  1549  			os.Exit(1)
  1550  		}
  1551  	}
  1552  
  1553  	/*-------多角形の障害物の直接入力----------------------*/
  1554  	for i = 0; i < polyn; i++ {
  1555  
  1556  		if poly[i].polyknd == "OBS" {
  1557  			lp[k].opname = poly[i].polyname
  1558  
  1559  			lp[k].polyd = poly[i].polyd
  1560  			lp[k].P = make([]XYZ, lp[k].polyd)
  1561  
  1562  			for j = 0; j < lp[k].polyd; j++ {
  1563  				lp[k].P[j] = poly[i].P[j]
  1564  			}
  1565  
  1566  			HOUSEN2(&lp[k].P[0], &lp[k].P[1], &lp[k].P[2], &lp[k].e)
  1567  			lp[k].wb = math.Acos(lp[k].e.Z) * (180 / math.Pi)
  1568  			lp[k].wa = math.Asin(lp[k].e.X/math.Sin(lp[k].wb*M_rad)) * (180 / math.Pi)
  1569  			/*--法線ベクトルの算出 HOUSEN2関数を使うと、向きが逆になるので、変更 091128 higuchi --*/
  1570  			lp[k].e.Z = math.Cos(lp[k].wb * M_rad)
  1571  			lp[k].e.Y = -math.Sin(lp[k].wb*M_rad) * math.Cos(lp[k].wa*M_rad)
  1572  			lp[k].e.X = -math.Sin(lp[k].wb*M_rad) * math.Sin(lp[k].wa*M_rad)
  1573  			CAT(&lp[k].e.X, &lp[k].e.Y, &lp[k].e.Z)
  1574  
  1575  			lp[k].ref = 0.0
  1576  			lp[k].wd = 0
  1577  			lp[k].sbflg = 0
  1578  
  1579  			lp[k].rgb[0] = poly[i].rgb[0]
  1580  			lp[k].rgb[1] = poly[i].rgb[1]
  1581  			lp[k].rgb[2] = poly[i].rgb[2]
  1582  
  1583  			for p = 0; p < 366; p++ {
  1584  				lp[k].shad[p] = 1
  1585  			}
  1586  
  1587  			k = k + 1
  1588  		}
  1589  	}
  1590  	*lpn = k
  1591  }
  1592  
  1593  /*----------------------
  1594  
  1595  受照面OPに変換する関数               1999.5.22
  1596  ------------------------*/
  1597  func OP_COORDNT(opn *int, bdpn int, BDP []BBDP, op []P_MENN, polyn int, poly []POLYGN) {
  1598  	var l, j, i, v, sumop, k int
  1599  	var cWa, sWa, cWb, sWb, a, b, c float64
  1600  	var ax, by, cz float64
  1601  
  1602  	sumop = 0
  1603  
  1604  	const M_rad = math.Pi / 180.0
  1605  
  1606  	for l = 0; l < bdpn; l++ {
  1607  		k = 0
  1608  		cWa = 0.0
  1609  		sWa = 0.0
  1610  		cWb = 0.0
  1611  		sWb = 0.0
  1612  
  1613  		cWa = math.Cos(-BDP[l].Wa * M_rad)
  1614  		sWa = math.Sin(-BDP[l].Wa * M_rad)
  1615  		cWb = math.Cos(BDP[l].Wb * M_rad)
  1616  		sWb = math.Sin(BDP[l].Wb * M_rad)
  1617  
  1618  		sumop = sumop + BDP[l].sumRMP
  1619  		v = sumop - BDP[l].sumRMP
  1620  		for j = v; j < sumop; j++ {
  1621  			a = 0.0
  1622  			b = 0.0
  1623  			c = 0.0
  1624  
  1625  			op[j].wd = BDP[l].RMP[k].sumWD
  1626  			op[j].wlflg = 0
  1627  
  1628  			op[j].opname = BDP[l].RMP[k].rmpname
  1629  
  1630  			op[j].rgb[0] = BDP[l].RMP[k].rgb[0]
  1631  			op[j].rgb[1] = BDP[l].RMP[k].rgb[1]
  1632  			op[j].rgb[2] = BDP[l].RMP[k].rgb[2]
  1633  			op[j].polyd = 4
  1634  			op[j].P = make([]XYZ, 4)
  1635  
  1636  			a = BDP[l].x0 + BDP[l].RMP[k].xb0*cWa - BDP[l].RMP[k].yb0*cWb*sWa
  1637  			b = BDP[l].y0 + BDP[l].RMP[k].xb0*sWa + BDP[l].RMP[k].yb0*cWb*cWa
  1638  			c = BDP[l].z0 + BDP[l].RMP[k].yb0*sWb
  1639  
  1640  			op[j].P[0].X = a
  1641  			op[j].P[0].Y = b
  1642  			op[j].P[0].Z = c
  1643  
  1644  			op[j].P[1].X = a - BDP[l].RMP[k].Rh*cWb*sWa
  1645  			op[j].P[1].Y = b + BDP[l].RMP[k].Rh*cWb*cWa
  1646  			op[j].P[1].Z = c + BDP[l].RMP[k].Rh*sWb
  1647  
  1648  			op[j].P[2].X = BDP[l].RMP[k].Rw*cWa + op[j].P[1].X
  1649  			op[j].P[2].Y = BDP[l].RMP[k].Rw*sWa + op[j].P[1].Y
  1650  			op[j].P[2].Z = op[j].P[1].Z
  1651  
  1652  			op[j].P[3].X = a + BDP[l].RMP[k].Rw*cWa
  1653  			op[j].P[3].Y = b + BDP[l].RMP[k].Rw*sWa
  1654  			op[j].P[3].Z = c
  1655  
  1656  			op[j].grpx = BDP[l].RMP[k].grpx
  1657  			op[j].wa = BDP[l].Wa
  1658  			op[j].wb = BDP[l].Wb
  1659  			op[j].ref = BDP[l].RMP[k].ref
  1660  			op[j].e.Z = math.Cos(op[j].wb * M_rad)
  1661  			op[j].e.Y = -math.Sin(op[j].wb*M_rad) * math.Cos(op[j].wa*M_rad)
  1662  			op[j].e.X = -math.Sin(op[j].wb*M_rad) * math.Sin(op[j].wa*M_rad)
  1663  			CAT(&op[j].e.X, &op[j].e.Y, &op[j].e.Z)
  1664  
  1665  			op[j].Nopw = BDP[l].RMP[k].sumWD
  1666  			// opw構造体のメモリ確保
  1667  			if op[j].Nopw > 0 {
  1668  				op[j].opw = make([]WD_MENN, op[j].Nopw)
  1669  				for m := 0; m < op[j].Nopw; m++ {
  1670  					opw := op[j].opw[m]
  1671  
  1672  					opw.opwname = ""
  1673  					opw.P = nil
  1674  					opw.polyd = 0
  1675  					opw.ref = 0.0
  1676  					opw.grpx = 0.0
  1677  					opw.sumw = 0.0
  1678  					matinit(opw.rgb[:], 3)
  1679  				}
  1680  			}
  1681  			if BDP[l].RMP[k].sumWD != 0 {
  1682  				for i = 0; i < BDP[l].RMP[k].sumWD; i++ {
  1683  					ax = 0.0
  1684  					by = 0.0
  1685  					cz = 0.0
  1686  
  1687  					op[j].opw[i].opwname = BDP[l].RMP[k].WD[i].winname
  1688  
  1689  					ax = a + BDP[l].RMP[k].WD[i].xr*cWa - BDP[l].RMP[k].WD[i].yr*cWb*sWa
  1690  					by = b + BDP[l].RMP[k].WD[i].xr*sWa + BDP[l].RMP[k].WD[i].yr*cWb*cWa
  1691  					cz = c + BDP[l].RMP[k].WD[i].yr*sWb
  1692  
  1693  					op[j].opw[i].grpx = BDP[l].RMP[k].WD[i].grpx
  1694  					op[j].opw[i].ref = BDP[l].RMP[k].WD[i].ref
  1695  
  1696  					op[j].opw[i].rgb[0] = BDP[l].RMP[k].WD[i].rgb[0]
  1697  					op[j].opw[i].rgb[1] = BDP[l].RMP[k].WD[i].rgb[1]
  1698  					op[j].opw[i].rgb[2] = BDP[l].RMP[k].WD[i].rgb[2]
  1699  					op[j].opw[i].polyd = 4
  1700  					op[j].opw[i].P = make([]XYZ, 4)
  1701  
  1702  					op[j].opw[i].P[0].X = ax
  1703  					op[j].opw[i].P[0].Y = by
  1704  					op[j].opw[i].P[0].Z = cz
  1705  
  1706  					op[j].opw[i].P[1].X = ax - BDP[l].RMP[k].WD[i].Wh*cWb*sWa
  1707  					op[j].opw[i].P[1].Y = by + BDP[l].RMP[k].WD[i].Wh*cWb*cWa
  1708  					op[j].opw[i].P[1].Z = cz + BDP[l].RMP[k].WD[i].Wh*sWb
  1709  					op[j].opw[i].P[2].X = ax + BDP[l].RMP[k].WD[i].Ww*cWa - BDP[l].RMP[k].WD[i].Wh*cWb*sWa
  1710  					op[j].opw[i].P[2].Y = by + BDP[l].RMP[k].WD[i].Ww*sWa + BDP[l].RMP[k].WD[i].Wh*cWb*cWa
  1711  					op[j].opw[i].P[2].Z = cz + BDP[l].RMP[k].WD[i].Wh*sWb
  1712  					op[j].opw[i].P[3].X = ax + BDP[l].RMP[k].WD[i].Ww*cWa
  1713  					op[j].opw[i].P[3].Y = by + BDP[l].RMP[k].WD[i].Ww*sWa
  1714  					op[j].opw[i].P[3].Z = cz
  1715  				}
  1716  			}
  1717  			k = k + 1
  1718  		}
  1719  	}
  1720  
  1721  	for i = 0; i < polyn; i++ {
  1722  		if poly[i].polyknd == "RMP" {
  1723  
  1724  			op[sumop].opname = poly[i].polyname
  1725  			op[sumop].ref = poly[i].ref
  1726  			op[sumop].wd = 0
  1727  			op[sumop].grpx = poly[i].grpx
  1728  
  1729  			op[sumop].rgb[0] = poly[i].rgb[0]
  1730  			op[sumop].rgb[1] = poly[i].rgb[1]
  1731  			op[sumop].rgb[2] = poly[i].rgb[2]
  1732  			op[sumop].polyd = poly[i].polyd
  1733  			op[sumop].P = make([]XYZ, op[sumop].polyd)
  1734  			for j = 0; j < op[sumop].polyd; j++ {
  1735  				op[sumop].P[j] = poly[i].P[j]
  1736  			}
  1737  
  1738  			HOUSEN2(&op[sumop].P[0], &op[sumop].P[1], &op[sumop].P[2], &op[sumop].e)
  1739  			op[sumop].wb = math.Acos(op[sumop].e.Z) * (180 / math.Pi)
  1740  			op[sumop].wa = math.Asin(op[sumop].e.X/math.Sin(op[sumop].wb*M_rad)) * (180 / math.Pi)
  1741  
  1742  			/*--ポリゴンの法線ベクトルが逆で出てしまうのを修正 091128 higuchi--*/
  1743  			op[sumop].e.Z = math.Cos(op[sumop].wb * M_rad)
  1744  			op[sumop].e.Y = -math.Sin(op[sumop].wb*M_rad) * math.Cos(op[sumop].wa*M_rad)
  1745  			op[sumop].e.X = -math.Sin(op[sumop].wb*M_rad) * math.Sin(op[sumop].wa*M_rad)
  1746  
  1747  			sumop = sumop + 1
  1748  		}
  1749  
  1750  	}
  1751  
  1752  	*opn = sumop
  1753  }