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 }