| File: | src/seek/textract.c |
| Location: | line 211, column 3 |
| Description: | The right operand of '-' is a garbage value |
| 1 | /* | |||||
| 2 | Teem: Tools to process and visualize scientific data and images . | |||||
| 3 | Copyright (C) 2011, 2010, 2009, 2008 Thomas Schultz | |||||
| 4 | ||||||
| 5 | This library is free software; you can redistribute it and/or | |||||
| 6 | modify it under the terms of the GNU Lesser General Public License | |||||
| 7 | (LGPL) as published by the Free Software Foundation; either | |||||
| 8 | version 2.1 of the License, or (at your option) any later version. | |||||
| 9 | The terms of redistributing and/or modifying this software also | |||||
| 10 | include exceptions to the LGPL that facilitate static linking. | |||||
| 11 | ||||||
| 12 | This library is distributed in the hope that it will be useful, | |||||
| 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||||
| 15 | Lesser General Public License for more details. | |||||
| 16 | ||||||
| 17 | You should have received a copy of the GNU Lesser General Public License | |||||
| 18 | along with this library; if not, write to Free Software Foundation, Inc., | |||||
| 19 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||||
| 20 | */ | |||||
| 21 | ||||||
| 22 | /* This file collects functions that implement extraction of crease | |||||
| 23 | * surfaces as proposed in Schultz / Theisel / Seidel, "Crease | |||||
| 24 | * Surfaces: From Theory to Extraction and Application to Diffusion | |||||
| 25 | * Tensor MRI", IEEE TVCG 16(1):109-119, 2010 */ | |||||
| 26 | ||||||
| 27 | #include "seek.h" | |||||
| 28 | #include "privateSeek.h" | |||||
| 29 | ||||||
| 30 | /* private helper routines for the T-based extraction */ | |||||
| 31 | ||||||
| 32 | /* Converts a Hessian into the transformed tensor T (cf. paper) | |||||
| 33 | * | |||||
| 34 | * T is a 9-vector representing the output | |||||
| 35 | * evals is a 3-vector (eigenvalues of the Hessian) | |||||
| 36 | * evecs is a 9-vector (eigenvectors of the Hessian) | |||||
| 37 | * evalDiffThresh is the threshold parameter theta (cf. Eq. (4) in paper) | |||||
| 38 | * ridge is non-zero if we are looking for a ridge (zero for valley) | |||||
| 39 | */ | |||||
| 40 | void | |||||
| 41 | _seekHess2T(double *T, const double *evals, const double *evecs, | |||||
| 42 | const double evalDiffThresh, const char ridge) { | |||||
| 43 | double lambdas[3]={0.0,0.0,0.0}; | |||||
| 44 | double tmpMat[9], diag[9], evecsT[9]; | |||||
| 45 | if (ridge) { | |||||
| 46 | double diff = evals[1]-evals[2]; | |||||
| 47 | lambdas[0]=lambdas[1]=1.0; | |||||
| 48 | if (diff<evalDiffThresh) | |||||
| 49 | lambdas[2]=(1.0-diff/evalDiffThresh)*(1.0-diff/evalDiffThresh); | |||||
| 50 | } else { | |||||
| 51 | double diff = evals[0]-evals[1]; | |||||
| 52 | lambdas[1]=lambdas[2]=1.0; | |||||
| 53 | if (diff<evalDiffThresh) | |||||
| 54 | lambdas[0]=(1.0-diff/evalDiffThresh)*(1.0-diff/evalDiffThresh); | |||||
| 55 | } | |||||
| 56 | ELL_3M_ZERO_SET(diag)((((diag)+0)[0] = (0), ((diag)+0)[1] = (0), ((diag)+0)[2] = ( 0)), (((diag)+3)[0] = (0), ((diag)+3)[1] = (0), ((diag)+3)[2] = (0)), (((diag)+6)[0] = (0), ((diag)+6)[1] = (0), ((diag)+6 )[2] = (0))); | |||||
| 57 | ELL_3M_DIAG_SET(diag, lambdas[0], lambdas[1], lambdas[2])((diag)[0] = (lambdas[0]), (diag)[4] = (lambdas[1]), (diag)[8 ] = (lambdas[2])); | |||||
| 58 | ELL_3M_TRANSPOSE(evecsT, evecs)((evecsT)[0] = (evecs)[0], (evecsT)[1] = (evecs)[3], (evecsT) [2] = (evecs)[6], (evecsT)[3] = (evecs)[1], (evecsT)[4] = (evecs )[4], (evecsT)[5] = (evecs)[7], (evecsT)[6] = (evecs)[2], (evecsT )[7] = (evecs)[5], (evecsT)[8] = (evecs)[8]); | |||||
| 59 | ELL_3M_MUL(tmpMat, diag, evecs)((tmpMat)[0] = (diag)[0]*(evecs)[0] + (diag)[1]*(evecs)[3] + ( diag)[2]*(evecs)[6], (tmpMat)[1] = (diag)[0]*(evecs)[1] + (diag )[1]*(evecs)[4] + (diag)[2]*(evecs)[7], (tmpMat)[2] = (diag)[ 0]*(evecs)[2] + (diag)[1]*(evecs)[5] + (diag)[2]*(evecs)[8], ( tmpMat)[3] = (diag)[3]*(evecs)[0] + (diag)[4]*(evecs)[3] + (diag )[5]*(evecs)[6], (tmpMat)[4] = (diag)[3]*(evecs)[1] + (diag)[ 4]*(evecs)[4] + (diag)[5]*(evecs)[7], (tmpMat)[5] = (diag)[3] *(evecs)[2] + (diag)[4]*(evecs)[5] + (diag)[5]*(evecs)[8], (tmpMat )[6] = (diag)[6]*(evecs)[0] + (diag)[7]*(evecs)[3] + (diag)[8 ]*(evecs)[6], (tmpMat)[7] = (diag)[6]*(evecs)[1] + (diag)[7]* (evecs)[4] + (diag)[8]*(evecs)[7], (tmpMat)[8] = (diag)[6]*(evecs )[2] + (diag)[7]*(evecs)[5] + (diag)[8]*(evecs)[8]); | |||||
| 60 | ELL_3M_MUL(T, evecsT, tmpMat)((T)[0] = (evecsT)[0]*(tmpMat)[0] + (evecsT)[1]*(tmpMat)[3] + (evecsT)[2]*(tmpMat)[6], (T)[1] = (evecsT)[0]*(tmpMat)[1] + ( evecsT)[1]*(tmpMat)[4] + (evecsT)[2]*(tmpMat)[7], (T)[2] = (evecsT )[0]*(tmpMat)[2] + (evecsT)[1]*(tmpMat)[5] + (evecsT)[2]*(tmpMat )[8], (T)[3] = (evecsT)[3]*(tmpMat)[0] + (evecsT)[4]*(tmpMat) [3] + (evecsT)[5]*(tmpMat)[6], (T)[4] = (evecsT)[3]*(tmpMat)[ 1] + (evecsT)[4]*(tmpMat)[4] + (evecsT)[5]*(tmpMat)[7], (T)[5 ] = (evecsT)[3]*(tmpMat)[2] + (evecsT)[4]*(tmpMat)[5] + (evecsT )[5]*(tmpMat)[8], (T)[6] = (evecsT)[6]*(tmpMat)[0] + (evecsT) [7]*(tmpMat)[3] + (evecsT)[8]*(tmpMat)[6], (T)[7] = (evecsT)[ 6]*(tmpMat)[1] + (evecsT)[7]*(tmpMat)[4] + (evecsT)[8]*(tmpMat )[7], (T)[8] = (evecsT)[6]*(tmpMat)[2] + (evecsT)[7]*(tmpMat) [5] + (evecsT)[8]*(tmpMat)[8]); | |||||
| 61 | } | |||||
| 62 | ||||||
| 63 | /* Converts a Hessian derivative into a derivative of the transformed | |||||
| 64 | * tensor field T | |||||
| 65 | * | |||||
| 66 | * Tder is a 9-vector representing the output | |||||
| 67 | * hessder is a 9-vector (Hessian derivative) | |||||
| 68 | * evals is a 3-vector (eigenvalues of the Hessian value) | |||||
| 69 | * evecs is a 9-vector (eigenvectors of the Hessian value) | |||||
| 70 | * evalDiffThresh is the threshold parameter theta (cf. Eq. (4) in the paper) | |||||
| 71 | * ridge is non-zero if we are looking for a ridge (zero for valley) | |||||
| 72 | */ | |||||
| 73 | void | |||||
| 74 | _seekHessder2Tder(double *Tder, const double *hessder, const double *evals, | |||||
| 75 | const double *evecs, const double evalDiffThresh, | |||||
| 76 | const char ridge) { | |||||
| 77 | double evecTrans[9]; | |||||
| 78 | double hessderE[9]; /* Hessian derivative in eigenframe */ | |||||
| 79 | double tmp[9]; | |||||
| 80 | ELL_3M_TRANSPOSE(evecTrans,evecs)((evecTrans)[0] = (evecs)[0], (evecTrans)[1] = (evecs)[3], (evecTrans )[2] = (evecs)[6], (evecTrans)[3] = (evecs)[1], (evecTrans)[4 ] = (evecs)[4], (evecTrans)[5] = (evecs)[7], (evecTrans)[6] = (evecs)[2], (evecTrans)[7] = (evecs)[5], (evecTrans)[8] = (evecs )[8]); | |||||
| 81 | ell_3m_mul_d(tmp,hessder,evecTrans); | |||||
| 82 | ell_3m_mul_d(hessderE,evecs,tmp); | |||||
| 83 | ||||||
| 84 | if (ridge) { | |||||
| 85 | double diff=evals[1]-evals[2]; | |||||
| 86 | double l3; | |||||
| 87 | double l3der; | |||||
| 88 | if (diff<evalDiffThresh) | |||||
| 89 | l3=(1.0-diff/evalDiffThresh)*(1.0-diff/evalDiffThresh); | |||||
| 90 | else l3=0.0; | |||||
| 91 | hessderE[2]*=(1.0-l3)/(evals[0]-evals[2]); | |||||
| 92 | hessderE[6]=hessderE[2]; | |||||
| 93 | hessderE[5]*=(1.0-l3)/(evals[1]-evals[2]); | |||||
| 94 | hessderE[7]=hessderE[5]; | |||||
| 95 | ||||||
| 96 | if (diff<evalDiffThresh) | |||||
| 97 | l3der = 2/evalDiffThresh*(1-diff/evalDiffThresh)* | |||||
| 98 | (hessderE[8]-hessderE[4]); | |||||
| 99 | else | |||||
| 100 | l3der=0; | |||||
| 101 | hessderE[8]=l3der; | |||||
| 102 | hessderE[0]=hessderE[1]=hessderE[3]=hessderE[4]=0.0; | |||||
| 103 | } else { | |||||
| 104 | double diff=evals[0]-evals[1]; | |||||
| 105 | double l1; | |||||
| 106 | double l1der; | |||||
| 107 | if (diff<evalDiffThresh) | |||||
| 108 | l1=(1.0-diff/evalDiffThresh)*(1.0-diff/evalDiffThresh); | |||||
| 109 | else l1=0.0; | |||||
| 110 | hessderE[1]*=(l1-1.0)/(evals[0]-evals[1]); | |||||
| 111 | hessderE[3]=hessderE[1]; | |||||
| 112 | hessderE[2]*=(l1-1.0)/(evals[0]-evals[2]); | |||||
| 113 | hessderE[6]=hessderE[2]; | |||||
| 114 | ||||||
| 115 | if (diff<evalDiffThresh) | |||||
| 116 | l1der = 2/evalDiffThresh*(1-diff/evalDiffThresh)* | |||||
| 117 | (hessderE[4]-hessderE[0]); | |||||
| 118 | else | |||||
| 119 | l1der = 0; | |||||
| 120 | hessderE[0]=l1der; | |||||
| 121 | hessderE[4]=hessderE[5]=hessderE[7]=hessderE[8]=0.0; | |||||
| 122 | } | |||||
| 123 | ||||||
| 124 | ell_3m_mul_d(tmp,hessderE,evecs); | |||||
| 125 | ell_3m_mul_d(Tder,evecTrans,tmp); | |||||
| 126 | } | |||||
| 127 | ||||||
| 128 | static int | |||||
| 129 | findFeatureIntersection(double *results, double *Tleft, | |||||
| 130 | double *hessleft, double *gleft, | |||||
| 131 | double *Tright, double *hessright, | |||||
| 132 | double *gright, double idxleft, | |||||
| 133 | double idxright, char ridge, | |||||
| 134 | const double evalDiffThresh, | |||||
| 135 | const double dotThresh) { | |||||
| 136 | double Tdp = ELL_3V_DOT(Tleft, Tright)((Tleft)[0]*(Tright)[0] + (Tleft)[1]*(Tright)[1] + (Tleft)[2] *(Tright)[2]) + ELL_3V_DOT(Tleft+3,Tright+3)((Tleft+3)[0]*(Tright+3)[0] + (Tleft+3)[1]*(Tright+3)[1] + (Tleft +3)[2]*(Tright+3)[2]) + | |||||
| 137 | ELL_3V_DOT(Tleft+6,Tright+6)((Tleft+6)[0]*(Tright+6)[0] + (Tleft+6)[1]*(Tright+6)[1] + (Tleft +6)[2]*(Tright+6)[2]); | |||||
| 138 | double denom_l = sqrt(ELL_3V_DOT(Tleft, Tleft)((Tleft)[0]*(Tleft)[0] + (Tleft)[1]*(Tleft)[1] + (Tleft)[2]*( Tleft)[2]) + ELL_3V_DOT(Tleft+3, Tleft+3)((Tleft+3)[0]*(Tleft+3)[0] + (Tleft+3)[1]*(Tleft+3)[1] + (Tleft +3)[2]*(Tleft+3)[2]) | |||||
| 139 | + ELL_3V_DOT(Tleft+6, Tleft+6)((Tleft+6)[0]*(Tleft+6)[0] + (Tleft+6)[1]*(Tleft+6)[1] + (Tleft +6)[2]*(Tleft+6)[2])), | |||||
| 140 | denom_r = sqrt(ELL_3V_DOT(Tright,Tright)((Tright)[0]*(Tright)[0] + (Tright)[1]*(Tright)[1] + (Tright) [2]*(Tright)[2]) + ELL_3V_DOT(Tright+3, Tright+3)((Tright+3)[0]*(Tright+3)[0] + (Tright+3)[1]*(Tright+3)[1] + ( Tright+3)[2]*(Tright+3)[2]) | |||||
| 141 | + ELL_3V_DOT(Tright+6, Tright+6)((Tright+6)[0]*(Tright+6)[0] + (Tright+6)[1]*(Tright+6)[1] + ( Tright+6)[2]*(Tright+6)[2])); | |||||
| 142 | ||||||
| 143 | if (Tdp/(denom_l*denom_r)<dotThresh && | |||||
| 144 | idxright-idxleft>0.24) { /* do a recursive step */ | |||||
| 145 | double idxcenter = 0.5*(idxleft+idxright); | |||||
| 146 | /* simply interpolate Hessian linearly */ | |||||
| 147 | double hessnew[9]; | |||||
| 148 | double evals[3],evecs[9]; | |||||
| 149 | double Tnew[9], gradnew[3]; | |||||
| 150 | int retval; | |||||
| 151 | ||||||
| 152 | ELL_3M_LERP(hessnew,0.5,hessleft,hessright)((((hessnew)+0)[0] = ((((0.5)))*((((hessright)+0)[0]) - (((hessleft )+0)[0])) + (((hessleft)+0)[0])), ((hessnew)+0)[1] = ((((0.5) ))*((((hessright)+0)[1]) - (((hessleft)+0)[1])) + (((hessleft )+0)[1])), ((hessnew)+0)[2] = ((((0.5)))*((((hessright)+0)[2] ) - (((hessleft)+0)[2])) + (((hessleft)+0)[2]))), (((hessnew) +3)[0] = ((((0.5)))*((((hessright)+3)[0]) - (((hessleft)+3)[0 ])) + (((hessleft)+3)[0])), ((hessnew)+3)[1] = ((((0.5)))*((( (hessright)+3)[1]) - (((hessleft)+3)[1])) + (((hessleft)+3)[1 ])), ((hessnew)+3)[2] = ((((0.5)))*((((hessright)+3)[2]) - (( (hessleft)+3)[2])) + (((hessleft)+3)[2]))), (((hessnew)+6)[0] = ((((0.5)))*((((hessright)+6)[0]) - (((hessleft)+6)[0])) + ( ((hessleft)+6)[0])), ((hessnew)+6)[1] = ((((0.5)))*((((hessright )+6)[1]) - (((hessleft)+6)[1])) + (((hessleft)+6)[1])), ((hessnew )+6)[2] = ((((0.5)))*((((hessright)+6)[2]) - (((hessleft)+6)[ 2])) + (((hessleft)+6)[2])))); | |||||
| 153 | ell_3m_eigensolve_d(evals, evecs, hessnew, AIR_TRUE1); | |||||
| 154 | ||||||
| 155 | _seekHess2T(Tnew, evals, evecs, evalDiffThresh, ridge); | |||||
| 156 | ||||||
| 157 | ELL_3V_LERP(gradnew,0.5,gleft,gright)((gradnew)[0] = (((0.5))*(((gright)[0]) - ((gleft)[0])) + ((gleft )[0])), (gradnew)[1] = (((0.5))*(((gright)[1]) - ((gleft)[1]) ) + ((gleft)[1])), (gradnew)[2] = (((0.5))*(((gright)[2]) - ( (gleft)[2])) + ((gleft)[2]))); | |||||
| 158 | retval = findFeatureIntersection(results, Tleft, hessleft, | |||||
| 159 | gleft, Tnew, hessnew, gradnew, | |||||
| 160 | idxleft, idxcenter, | |||||
| 161 | ridge, evalDiffThresh, dotThresh); | |||||
| 162 | retval += findFeatureIntersection(results+retval, Tnew, hessnew, | |||||
| 163 | gradnew, Tright, hessright, gright, | |||||
| 164 | idxcenter, idxright, | |||||
| 165 | ridge, evalDiffThresh, dotThresh); | |||||
| 166 | return retval; | |||||
| 167 | } else { | |||||
| 168 | double d1[3], d4[3]; | |||||
| 169 | ell_3mv_mul_d(d1, Tleft, gleft); | |||||
| 170 | ELL_3V_SUB(d1,d1,gleft)((d1)[0] = (d1)[0] - (gleft)[0], (d1)[1] = (d1)[1] - (gleft)[ 1], (d1)[2] = (d1)[2] - (gleft)[2]); | |||||
| 171 | ell_3mv_mul_d(d4, Tright, gright); | |||||
| 172 | ELL_3V_SUB(d4,d4,gright)((d4)[0] = (d4)[0] - (gright)[0], (d4)[1] = (d4)[1] - (gright )[1], (d4)[2] = (d4)[2] - (gright)[2]); | |||||
| 173 | ||||||
| 174 | if (ELL_3V_DOT(d1,d4)((d1)[0]*(d4)[0] + (d1)[1]*(d4)[1] + (d1)[2]*(d4)[2])<0) { /* mark edge as crossed */ | |||||
| 175 | /* find assumed intersection point */ | |||||
| 176 | double diff[3], dlen, alpha; | |||||
| 177 | ELL_3V_SUB(diff,d4,d1)((diff)[0] = (d4)[0] - (d1)[0], (diff)[1] = (d4)[1] - (d1)[1] , (diff)[2] = (d4)[2] - (d1)[2]); | |||||
| 178 | dlen=ELL_3V_LEN(diff)(sqrt((((diff))[0]*((diff))[0] + ((diff))[1]*((diff))[1] + (( diff))[2]*((diff))[2]))); | |||||
| 179 | if (dlen>1e-5) { | |||||
| 180 | double ap=-ELL_3V_DOT(d1,diff)((d1)[0]*(diff)[0] + (d1)[1]*(diff)[1] + (d1)[2]*(diff)[2])/dlen; | |||||
| 181 | alpha = ap/dlen; | |||||
| 182 | } else | |||||
| 183 | alpha = 0.5; | |||||
| 184 | ||||||
| 185 | *results = (1-alpha)*idxleft+alpha*idxright; | |||||
| 186 | return 1; | |||||
| 187 | } | |||||
| 188 | } | |||||
| 189 | return 0; | |||||
| 190 | } | |||||
| 191 | ||||||
| 192 | /* Assuming (simplistic) linearly interpolated Hessians and gradients, | |||||
| 193 | * computes the analytical normal of the crease surface. | |||||
| 194 | * The result is _not_ normalized. */ | |||||
| 195 | static void | |||||
| 196 | computeGradientLin(double *result, double *T, double *g, | |||||
| 197 | double *Txm, double *gxm, double *Txp, double *gxp, | |||||
| 198 | double *Tym, double *gym, double *Typ, double *gyp, | |||||
| 199 | double *Tzm, double *gzm, double *Tzp, double *gzp) { | |||||
| 200 | double Tder[9]; | |||||
| 201 | double gder[3]; | |||||
| 202 | double tmp[3], tmp1[3], tmp2[3]; | |||||
| 203 | double derxv[3], deryv[3], derzv[3]; | |||||
| 204 | ELL_3M_SUB(Tder,Txp,Txm)((Tder)[0] = (Txp)[0] - (Txm)[0], (Tder)[1] = (Txp)[1] - (Txm )[1], (Tder)[2] = (Txp)[2] - (Txm)[2], (Tder)[3] = (Txp)[3] - (Txm)[3], (Tder)[4] = (Txp)[4] - (Txm)[4], (Tder)[5] = (Txp) [5] - (Txm)[5], (Tder)[6] = (Txp)[6] - (Txm)[6], (Tder)[7] = ( Txp)[7] - (Txm)[7], (Tder)[8] = (Txp)[8] - (Txm)[8]); | |||||
| 205 | ELL_3V_SUB(gder,gxp,gxm)((gder)[0] = (gxp)[0] - (gxm)[0], (gder)[1] = (gxp)[1] - (gxm )[1], (gder)[2] = (gxp)[2] - (gxm)[2]); | |||||
| 206 | ell_3mv_mul_d(tmp,T,gder); | |||||
| 207 | ELL_3V_SUB(tmp,tmp,gder)((tmp)[0] = (tmp)[0] - (gder)[0], (tmp)[1] = (tmp)[1] - (gder )[1], (tmp)[2] = (tmp)[2] - (gder)[2]); | |||||
| 208 | ell_3mv_mul_d(derxv,Tder,g); | |||||
| 209 | ELL_3V_ADD2(derxv,derxv,tmp)((derxv)[0] = (derxv)[0] + (tmp)[0], (derxv)[1] = (derxv)[1] + (tmp)[1], (derxv)[2] = (derxv)[2] + (tmp)[2]); | |||||
| 210 | ||||||
| 211 | ELL_3M_SUB(Tder,Typ,Tym)((Tder)[0] = (Typ)[0] - (Tym)[0], (Tder)[1] = (Typ)[1] - (Tym )[1], (Tder)[2] = (Typ)[2] - (Tym)[2], (Tder)[3] = (Typ)[3] - (Tym)[3], (Tder)[4] = (Typ)[4] - (Tym)[4], (Tder)[5] = (Typ) [5] - (Tym)[5], (Tder)[6] = (Typ)[6] - (Tym)[6], (Tder)[7] = ( Typ)[7] - (Tym)[7], (Tder)[8] = (Typ)[8] - (Tym)[8]); | |||||
| ||||||
| 212 | ELL_3V_SUB(gder,gyp,gym)((gder)[0] = (gyp)[0] - (gym)[0], (gder)[1] = (gyp)[1] - (gym )[1], (gder)[2] = (gyp)[2] - (gym)[2]); | |||||
| 213 | ell_3mv_mul_d(tmp,T,gder); | |||||
| 214 | ELL_3V_SUB(tmp,tmp,gder)((tmp)[0] = (tmp)[0] - (gder)[0], (tmp)[1] = (tmp)[1] - (gder )[1], (tmp)[2] = (tmp)[2] - (gder)[2]); | |||||
| 215 | ell_3mv_mul_d(deryv,Tder,g); | |||||
| 216 | ELL_3V_ADD2(deryv,deryv,tmp)((deryv)[0] = (deryv)[0] + (tmp)[0], (deryv)[1] = (deryv)[1] + (tmp)[1], (deryv)[2] = (deryv)[2] + (tmp)[2]); | |||||
| 217 | ||||||
| 218 | ELL_3M_SUB(Tder,Tzp,Tzm)((Tder)[0] = (Tzp)[0] - (Tzm)[0], (Tder)[1] = (Tzp)[1] - (Tzm )[1], (Tder)[2] = (Tzp)[2] - (Tzm)[2], (Tder)[3] = (Tzp)[3] - (Tzm)[3], (Tder)[4] = (Tzp)[4] - (Tzm)[4], (Tder)[5] = (Tzp) [5] - (Tzm)[5], (Tder)[6] = (Tzp)[6] - (Tzm)[6], (Tder)[7] = ( Tzp)[7] - (Tzm)[7], (Tder)[8] = (Tzp)[8] - (Tzm)[8]); | |||||
| 219 | ELL_3V_SUB(gder,gzp,gzm)((gder)[0] = (gzp)[0] - (gzm)[0], (gder)[1] = (gzp)[1] - (gzm )[1], (gder)[2] = (gzp)[2] - (gzm)[2]); | |||||
| 220 | ell_3mv_mul_d(tmp,T,gder); | |||||
| 221 | ELL_3V_SUB(tmp,tmp,gder)((tmp)[0] = (tmp)[0] - (gder)[0], (tmp)[1] = (tmp)[1] - (gder )[1], (tmp)[2] = (tmp)[2] - (gder)[2]); | |||||
| 222 | ell_3mv_mul_d(derzv,Tder,g); | |||||
| 223 | ELL_3V_ADD2(derzv,derzv,tmp)((derzv)[0] = (derzv)[0] + (tmp)[0], (derzv)[1] = (derzv)[1] + (tmp)[1], (derzv)[2] = (derzv)[2] + (tmp)[2]); | |||||
| 224 | ||||||
| 225 | /* accumulate a gradient */ | |||||
| 226 | tmp1[0]=derxv[0]; tmp1[1]=deryv[0]; tmp1[2]=derzv[0]; | |||||
| 227 | tmp2[0]=derxv[1]; tmp2[1]=deryv[1]; tmp2[2]=derzv[1]; | |||||
| 228 | if (ELL_3V_DOT(tmp1,tmp2)((tmp1)[0]*(tmp2)[0] + (tmp1)[1]*(tmp2)[1] + (tmp1)[2]*(tmp2) [2])<0) | |||||
| 229 | ELL_3V_SCALE(tmp2,-1.0,tmp2)((tmp2)[0] = (-1.0)*(tmp2)[0], (tmp2)[1] = (-1.0)*(tmp2)[1], ( tmp2)[2] = (-1.0)*(tmp2)[2]); | |||||
| 230 | ELL_3V_ADD2(tmp1,tmp1,tmp2)((tmp1)[0] = (tmp1)[0] + (tmp2)[0], (tmp1)[1] = (tmp1)[1] + ( tmp2)[1], (tmp1)[2] = (tmp1)[2] + (tmp2)[2]); | |||||
| 231 | tmp2[0]=derxv[2]; tmp2[1]=deryv[2]; tmp2[2]=derzv[2]; | |||||
| 232 | if (ELL_3V_DOT(tmp1,tmp2)((tmp1)[0]*(tmp2)[0] + (tmp1)[1]*(tmp2)[1] + (tmp1)[2]*(tmp2) [2])<0) | |||||
| 233 | ELL_3V_SCALE(tmp2,-1.0,tmp2)((tmp2)[0] = (-1.0)*(tmp2)[0], (tmp2)[1] = (-1.0)*(tmp2)[1], ( tmp2)[2] = (-1.0)*(tmp2)[2]); | |||||
| 234 | ELL_3V_ADD2(result,tmp1,tmp2)((result)[0] = (tmp1)[0] + (tmp2)[0], (result)[1] = (tmp1)[1] + (tmp2)[1], (result)[2] = (tmp1)[2] + (tmp2)[2]); | |||||
| 235 | } | |||||
| 236 | ||||||
| 237 | /* Given a unique edge ID and an intersection point given by some value | |||||
| 238 | * alpha \in [0,1], compute the crease surface normal at that point */ | |||||
| 239 | static void | |||||
| 240 | computeEdgeGradient(seekContext *sctx, baggage *bag, double *res, | |||||
| 241 | unsigned int xi, unsigned int yi, char edgeid, double alpha) | |||||
| 242 | { | |||||
| 243 | double Txm[9], Txp[9], Tym[9], Typ[9], Tzm[9], Tzp[9], T[9], | |||||
| 244 | gxm[3], gxp[3], gym[3], gyp[3], gzm[3], gzp[3], g[3]; | |||||
| 245 | ||||||
| 246 | unsigned int sx = AIR_CAST(unsigned int, sctx->sx)((unsigned int)(sctx->sx)); | |||||
| 247 | unsigned int sy = AIR_CAST(unsigned int, sctx->sy)((unsigned int)(sctx->sy)); | |||||
| 248 | unsigned int sz = AIR_CAST(unsigned int, sctx->sz)((unsigned int)(sctx->sz)); | |||||
| 249 | unsigned int si = xi + sx*yi; | |||||
| 250 | unsigned int six = xi + 1 + sx*yi, siX = xi - 1 + sx*yi; | |||||
| 251 | unsigned int siy = xi + sx*(yi+1), siY = xi + sx*(yi-1); | |||||
| 252 | unsigned int sixy = xi + 1 + sx*(yi+1), | |||||
| 253 | sixY = xi + 1 + sx*(yi-1), | |||||
| 254 | siXy = xi - 1 + sx*(yi+1); | |||||
| 255 | /* many special cases needed to fill Txm, gxm, etc. :-( */ | |||||
| 256 | switch (edgeid) { | |||||
| 257 | case 0: | |||||
| 258 | ELL_3M_LERP(T, alpha, sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*six))((((T)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*six))+0)[ 0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->t + 9 *(0+2*si))+0)[0])), ((T)+0)[1] = ((((alpha)))*((((sctx->t + 9*(0+2*six))+0)[1]) - (((sctx->t + 9*(0+2*si))+0)[1])) + ( ((sctx->t + 9*(0+2*si))+0)[1])), ((T)+0)[2] = ((((alpha))) *((((sctx->t + 9*(0+2*six))+0)[2]) - (((sctx->t + 9*(0+ 2*si))+0)[2])) + (((sctx->t + 9*(0+2*si))+0)[2]))), (((T)+ 3)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*six))+3)[0]) - ( ((sctx->t + 9*(0+2*si))+3)[0])) + (((sctx->t + 9*(0+2*si ))+3)[0])), ((T)+3)[1] = ((((alpha)))*((((sctx->t + 9*(0+2 *six))+3)[1]) - (((sctx->t + 9*(0+2*si))+3)[1])) + (((sctx ->t + 9*(0+2*si))+3)[1])), ((T)+3)[2] = ((((alpha)))*((((sctx ->t + 9*(0+2*six))+3)[2]) - (((sctx->t + 9*(0+2*si))+3) [2])) + (((sctx->t + 9*(0+2*si))+3)[2]))), (((T)+6)[0] = ( (((alpha)))*((((sctx->t + 9*(0+2*six))+6)[0]) - (((sctx-> t + 9*(0+2*si))+6)[0])) + (((sctx->t + 9*(0+2*si))+6)[0])) , ((T)+6)[1] = ((((alpha)))*((((sctx->t + 9*(0+2*six))+6)[ 1]) - (((sctx->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9 *(0+2*si))+6)[1])), ((T)+6)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*six))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + ( ((sctx->t + 9*(0+2*si))+6)[2])))); | |||||
| 259 | ELL_3V_LERP(g, alpha, sctx->grad + 3*(0+2*si), sctx->grad + 3*(0+2*six))((g)[0] = (((alpha))*(((sctx->grad + 3*(0+2*six))[0]) - (( sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*(0+2*si ))[0])), (g)[1] = (((alpha))*(((sctx->grad + 3*(0+2*six))[ 1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx->grad + 3 *(0+2*si))[1])), (g)[2] = (((alpha))*(((sctx->grad + 3*(0+ 2*six))[2]) - ((sctx->grad + 3*(0+2*si))[2])) + ((sctx-> grad + 3*(0+2*si))[2]))); | |||||
| 260 | ELL_3M_LERP(Tzp, alpha, sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*six))((((Tzp)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+0 )[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx->t + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((((alpha)))*((((sctx-> t + 9*(1+2*six))+0)[1]) - (((sctx->t + 9*(1+2*si))+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Tzp)+0)[2] = ((((alpha )))*((((sctx->t + 9*(1+2*six))+0)[2]) - (((sctx->t + 9* (1+2*si))+0)[2])) + (((sctx->t + 9*(1+2*si))+0)[2]))), ((( Tzp)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+3)[0] ) - (((sctx->t + 9*(1+2*si))+3)[0])) + (((sctx->t + 9*( 1+2*si))+3)[0])), ((Tzp)+3)[1] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+3)[1]) - (((sctx->t + 9*(1+2*si))+3)[1])) + ( ((sctx->t + 9*(1+2*si))+3)[1])), ((Tzp)+3)[2] = ((((alpha) ))*((((sctx->t + 9*(1+2*six))+3)[2]) - (((sctx->t + 9*( 1+2*si))+3)[2])) + (((sctx->t + 9*(1+2*si))+3)[2]))), (((Tzp )+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+6)[0]) - (((sctx->t + 9*(1+2*si))+6)[0])) + (((sctx->t + 9*(1+2 *si))+6)[0])), ((Tzp)+6)[1] = ((((alpha)))*((((sctx->t + 9 *(1+2*six))+6)[1]) - (((sctx->t + 9*(1+2*si))+6)[1])) + (( (sctx->t + 9*(1+2*si))+6)[1])), ((Tzp)+6)[2] = ((((alpha)) )*((((sctx->t + 9*(1+2*six))+6)[2]) - (((sctx->t + 9*(1 +2*si))+6)[2])) + (((sctx->t + 9*(1+2*si))+6)[2])))); | |||||
| 261 | ELL_3V_LERP(gzp, alpha, sctx->grad + 3*(1+2*si), sctx->grad + 3*(1+2*six))((gzp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*six))[0]) - ( (sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*(1+2* si))[0])), (gzp)[1] = (((alpha))*(((sctx->grad + 3*(1+2*six ))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx->grad + 3*(1+2*si))[1])), (gzp)[2] = (((alpha))*(((sctx->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(1+2*si))[2])) + ((sctx ->grad + 3*(1+2*si))[2]))); | |||||
| 262 | if (bag->zi==0) { | |||||
| 263 | ELL_3M_COPY(Tzm, T)((((Tzm)+0)[0] = ((T)+0)[0], ((Tzm)+0)[1] = ((T)+0)[1], ((Tzm )+0)[2] = ((T)+0)[2]), (((Tzm)+3)[0] = ((T)+3)[0], ((Tzm)+3)[ 1] = ((T)+3)[1], ((Tzm)+3)[2] = ((T)+3)[2]), (((Tzm)+6)[0] = ( (T)+6)[0], ((Tzm)+6)[1] = ((T)+6)[1], ((Tzm)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gzm, g)((gzm)[0] = (g)[0], (gzm)[1] = (g)[1], (gzm)[2] = (g)[2]); | |||||
| 264 | } else { | |||||
| 265 | ELL_3M_LERP(Tzm, alpha, sctx->tcontext + 9*(0+2*si),((((Tzm)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2* six))+0)[0]) - (((sctx->tcontext + 9*(0+2*si))+0)[0])) + ( ((sctx->tcontext + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(0+2*six))+0)[1]) - (((sctx ->tcontext + 9*(0+2*si))+0)[1])) + (((sctx->tcontext + 9 *(0+2*si))+0)[1])), ((Tzm)+0)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(0+2*six))+0)[2]) - (((sctx->tcontext + 9*(0+ 2*si))+0)[2])) + (((sctx->tcontext + 9*(0+2*si))+0)[2]))), (((Tzm)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2* six))+3)[0]) - (((sctx->tcontext + 9*(0+2*si))+3)[0])) + ( ((sctx->tcontext + 9*(0+2*si))+3)[0])), ((Tzm)+3)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(0+2*six))+3)[1]) - (((sctx ->tcontext + 9*(0+2*si))+3)[1])) + (((sctx->tcontext + 9 *(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(0+2*six))+3)[2]) - (((sctx->tcontext + 9*(0+ 2*si))+3)[2])) + (((sctx->tcontext + 9*(0+2*si))+3)[2]))), (((Tzm)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2* six))+6)[0]) - (((sctx->tcontext + 9*(0+2*si))+6)[0])) + ( ((sctx->tcontext + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(0+2*six))+6)[1]) - (((sctx ->tcontext + 9*(0+2*si))+6)[1])) + (((sctx->tcontext + 9 *(0+2*si))+6)[1])), ((Tzm)+6)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(0+2*six))+6)[2]) - (((sctx->tcontext + 9*(0+ 2*si))+6)[2])) + (((sctx->tcontext + 9*(0+2*si))+6)[2])))) | |||||
| 266 | sctx->tcontext + 9*(0+2*six))((((Tzm)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2* six))+0)[0]) - (((sctx->tcontext + 9*(0+2*si))+0)[0])) + ( ((sctx->tcontext + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(0+2*six))+0)[1]) - (((sctx ->tcontext + 9*(0+2*si))+0)[1])) + (((sctx->tcontext + 9 *(0+2*si))+0)[1])), ((Tzm)+0)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(0+2*six))+0)[2]) - (((sctx->tcontext + 9*(0+ 2*si))+0)[2])) + (((sctx->tcontext + 9*(0+2*si))+0)[2]))), (((Tzm)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2* six))+3)[0]) - (((sctx->tcontext + 9*(0+2*si))+3)[0])) + ( ((sctx->tcontext + 9*(0+2*si))+3)[0])), ((Tzm)+3)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(0+2*six))+3)[1]) - (((sctx ->tcontext + 9*(0+2*si))+3)[1])) + (((sctx->tcontext + 9 *(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(0+2*six))+3)[2]) - (((sctx->tcontext + 9*(0+ 2*si))+3)[2])) + (((sctx->tcontext + 9*(0+2*si))+3)[2]))), (((Tzm)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2* six))+6)[0]) - (((sctx->tcontext + 9*(0+2*si))+6)[0])) + ( ((sctx->tcontext + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(0+2*six))+6)[1]) - (((sctx ->tcontext + 9*(0+2*si))+6)[1])) + (((sctx->tcontext + 9 *(0+2*si))+6)[1])), ((Tzm)+6)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(0+2*six))+6)[2]) - (((sctx->tcontext + 9*(0+ 2*si))+6)[2])) + (((sctx->tcontext + 9*(0+2*si))+6)[2])))); | |||||
| 267 | ELL_3V_LERP(gzm, alpha, sctx->gradcontext + 3*(0+2*si),((gzm)[0] = (((alpha))*(((sctx->gradcontext + 3*(0+2*six)) [0]) - ((sctx->gradcontext + 3*(0+2*si))[0])) + ((sctx-> gradcontext + 3*(0+2*si))[0])), (gzm)[1] = (((alpha))*(((sctx ->gradcontext + 3*(0+2*six))[1]) - ((sctx->gradcontext + 3*(0+2*si))[1])) + ((sctx->gradcontext + 3*(0+2*si))[1])) , (gzm)[2] = (((alpha))*(((sctx->gradcontext + 3*(0+2*six) )[2]) - ((sctx->gradcontext + 3*(0+2*si))[2])) + ((sctx-> gradcontext + 3*(0+2*si))[2]))) | |||||
| 268 | sctx->gradcontext + 3*(0+2*six))((gzm)[0] = (((alpha))*(((sctx->gradcontext + 3*(0+2*six)) [0]) - ((sctx->gradcontext + 3*(0+2*si))[0])) + ((sctx-> gradcontext + 3*(0+2*si))[0])), (gzm)[1] = (((alpha))*(((sctx ->gradcontext + 3*(0+2*six))[1]) - ((sctx->gradcontext + 3*(0+2*si))[1])) + ((sctx->gradcontext + 3*(0+2*si))[1])) , (gzm)[2] = (((alpha))*(((sctx->gradcontext + 3*(0+2*six) )[2]) - ((sctx->gradcontext + 3*(0+2*si))[2])) + ((sctx-> gradcontext + 3*(0+2*si))[2]))); | |||||
| 269 | ELL_3M_SCALE(Tzm, 0.5, Tzm)((((Tzm)+0)[0] = ((0.5))*((Tzm)+0)[0], ((Tzm)+0)[1] = ((0.5)) *((Tzm)+0)[1], ((Tzm)+0)[2] = ((0.5))*((Tzm)+0)[2]), (((Tzm)+ 3)[0] = ((0.5))*((Tzm)+3)[0], ((Tzm)+3)[1] = ((0.5))*((Tzm)+3 )[1], ((Tzm)+3)[2] = ((0.5))*((Tzm)+3)[2]), (((Tzm)+6)[0] = ( (0.5))*((Tzm)+6)[0], ((Tzm)+6)[1] = ((0.5))*((Tzm)+6)[1], ((Tzm )+6)[2] = ((0.5))*((Tzm)+6)[2])); ELL_3M_SCALE(Tzp, 0.5, Tzp)((((Tzp)+0)[0] = ((0.5))*((Tzp)+0)[0], ((Tzp)+0)[1] = ((0.5)) *((Tzp)+0)[1], ((Tzp)+0)[2] = ((0.5))*((Tzp)+0)[2]), (((Tzp)+ 3)[0] = ((0.5))*((Tzp)+3)[0], ((Tzp)+3)[1] = ((0.5))*((Tzp)+3 )[1], ((Tzp)+3)[2] = ((0.5))*((Tzp)+3)[2]), (((Tzp)+6)[0] = ( (0.5))*((Tzp)+6)[0], ((Tzp)+6)[1] = ((0.5))*((Tzp)+6)[1], ((Tzp )+6)[2] = ((0.5))*((Tzp)+6)[2])); | |||||
| 270 | ELL_3V_SCALE(gzm, 0.5, gzm)((gzm)[0] = (0.5)*(gzm)[0], (gzm)[1] = (0.5)*(gzm)[1], (gzm)[ 2] = (0.5)*(gzm)[2]); ELL_3V_SCALE(gzp, 0.5, gzp)((gzp)[0] = (0.5)*(gzp)[0], (gzp)[1] = (0.5)*(gzp)[1], (gzp)[ 2] = (0.5)*(gzp)[2]); | |||||
| 271 | } | |||||
| 272 | if (yi==0) { | |||||
| 273 | ELL_3M_COPY(Tym, T)((((Tym)+0)[0] = ((T)+0)[0], ((Tym)+0)[1] = ((T)+0)[1], ((Tym )+0)[2] = ((T)+0)[2]), (((Tym)+3)[0] = ((T)+3)[0], ((Tym)+3)[ 1] = ((T)+3)[1], ((Tym)+3)[2] = ((T)+3)[2]), (((Tym)+6)[0] = ( (T)+6)[0], ((Tym)+6)[1] = ((T)+6)[1], ((Tym)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gym, g)((gym)[0] = (g)[0], (gym)[1] = (g)[1], (gym)[2] = (g)[2]); | |||||
| 274 | } else { | |||||
| 275 | ELL_3M_LERP(Tym, alpha, sctx->t + 9*(0+2*siY), sctx->t + 9*(0+2*sixY))((((Tym)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*sixY))+ 0)[0]) - (((sctx->t + 9*(0+2*siY))+0)[0])) + (((sctx->t + 9*(0+2*siY))+0)[0])), ((Tym)+0)[1] = ((((alpha)))*((((sctx ->t + 9*(0+2*sixY))+0)[1]) - (((sctx->t + 9*(0+2*siY))+ 0)[1])) + (((sctx->t + 9*(0+2*siY))+0)[1])), ((Tym)+0)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*sixY))+0)[2]) - (((sctx ->t + 9*(0+2*siY))+0)[2])) + (((sctx->t + 9*(0+2*siY))+ 0)[2]))), (((Tym)+3)[0] = ((((alpha)))*((((sctx->t + 9*(0+ 2*sixY))+3)[0]) - (((sctx->t + 9*(0+2*siY))+3)[0])) + (((sctx ->t + 9*(0+2*siY))+3)[0])), ((Tym)+3)[1] = ((((alpha)))*(( ((sctx->t + 9*(0+2*sixY))+3)[1]) - (((sctx->t + 9*(0+2* siY))+3)[1])) + (((sctx->t + 9*(0+2*siY))+3)[1])), ((Tym)+ 3)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*sixY))+3)[2]) - ( ((sctx->t + 9*(0+2*siY))+3)[2])) + (((sctx->t + 9*(0+2* siY))+3)[2]))), (((Tym)+6)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*sixY))+6)[0]) - (((sctx->t + 9*(0+2*siY))+6)[0])) + (((sctx->t + 9*(0+2*siY))+6)[0])), ((Tym)+6)[1] = ((((alpha )))*((((sctx->t + 9*(0+2*sixY))+6)[1]) - (((sctx->t + 9 *(0+2*siY))+6)[1])) + (((sctx->t + 9*(0+2*siY))+6)[1])), ( (Tym)+6)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*sixY))+6)[ 2]) - (((sctx->t + 9*(0+2*siY))+6)[2])) + (((sctx->t + 9 *(0+2*siY))+6)[2])))); | |||||
| 276 | ELL_3V_LERP(gym, alpha, sctx->grad + 3*(0+2*siY),((gym)[0] = (((alpha))*(((sctx->grad + 3*(0+2*sixY))[0]) - ((sctx->grad + 3*(0+2*siY))[0])) + ((sctx->grad + 3*(0 +2*siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(0+ 2*sixY))[1]) - ((sctx->grad + 3*(0+2*siY))[1])) + ((sctx-> grad + 3*(0+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad + 3*(0+2*sixY))[2]) - ((sctx->grad + 3*(0+2*siY))[2])) + ( (sctx->grad + 3*(0+2*siY))[2]))) | |||||
| 277 | sctx->grad + 3*(0+2*sixY))((gym)[0] = (((alpha))*(((sctx->grad + 3*(0+2*sixY))[0]) - ((sctx->grad + 3*(0+2*siY))[0])) + ((sctx->grad + 3*(0 +2*siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(0+ 2*sixY))[1]) - ((sctx->grad + 3*(0+2*siY))[1])) + ((sctx-> grad + 3*(0+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad + 3*(0+2*sixY))[2]) - ((sctx->grad + 3*(0+2*siY))[2])) + ( (sctx->grad + 3*(0+2*siY))[2]))); | |||||
| 278 | } | |||||
| 279 | if (yi==sy-1) { | |||||
| 280 | ELL_3M_COPY(Typ, T)((((Typ)+0)[0] = ((T)+0)[0], ((Typ)+0)[1] = ((T)+0)[1], ((Typ )+0)[2] = ((T)+0)[2]), (((Typ)+3)[0] = ((T)+3)[0], ((Typ)+3)[ 1] = ((T)+3)[1], ((Typ)+3)[2] = ((T)+3)[2]), (((Typ)+6)[0] = ( (T)+6)[0], ((Typ)+6)[1] = ((T)+6)[1], ((Typ)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gyp, g)((gyp)[0] = (g)[0], (gyp)[1] = (g)[1], (gyp)[2] = (g)[2]); | |||||
| 281 | } else { | |||||
| 282 | ELL_3M_LERP(Typ, alpha, sctx->t + 9*(0+2*siy), sctx->t + 9*(0+2*sixy))((((Typ)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+ 0)[0]) - (((sctx->t + 9*(0+2*siy))+0)[0])) + (((sctx->t + 9*(0+2*siy))+0)[0])), ((Typ)+0)[1] = ((((alpha)))*((((sctx ->t + 9*(0+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2*siy))+ 0)[1])) + (((sctx->t + 9*(0+2*siy))+0)[1])), ((Typ)+0)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+0)[2]) - (((sctx ->t + 9*(0+2*siy))+0)[2])) + (((sctx->t + 9*(0+2*siy))+ 0)[2]))), (((Typ)+3)[0] = ((((alpha)))*((((sctx->t + 9*(0+ 2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*siy))+3)[0])) + (((sctx ->t + 9*(0+2*siy))+3)[0])), ((Typ)+3)[1] = ((((alpha)))*(( ((sctx->t + 9*(0+2*sixy))+3)[1]) - (((sctx->t + 9*(0+2* siy))+3)[1])) + (((sctx->t + 9*(0+2*siy))+3)[1])), ((Typ)+ 3)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+3)[2]) - ( ((sctx->t + 9*(0+2*siy))+3)[2])) + (((sctx->t + 9*(0+2* siy))+3)[2]))), (((Typ)+6)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+6)[0]) - (((sctx->t + 9*(0+2*siy))+6)[0])) + (((sctx->t + 9*(0+2*siy))+6)[0])), ((Typ)+6)[1] = ((((alpha )))*((((sctx->t + 9*(0+2*sixy))+6)[1]) - (((sctx->t + 9 *(0+2*siy))+6)[1])) + (((sctx->t + 9*(0+2*siy))+6)[1])), ( (Typ)+6)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+6)[ 2]) - (((sctx->t + 9*(0+2*siy))+6)[2])) + (((sctx->t + 9 *(0+2*siy))+6)[2])))); | |||||
| 283 | ELL_3V_LERP(gyp, alpha, sctx->grad + 3*(0+2*siy),((gyp)[0] = (((alpha))*(((sctx->grad + 3*(0+2*sixy))[0]) - ((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3*(0 +2*siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(0+ 2*sixy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx-> grad + 3*(0+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0+2*siy))[2])) + ( (sctx->grad + 3*(0+2*siy))[2]))) | |||||
| 284 | sctx->grad + 3*(0+2*sixy))((gyp)[0] = (((alpha))*(((sctx->grad + 3*(0+2*sixy))[0]) - ((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3*(0 +2*siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(0+ 2*sixy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx-> grad + 3*(0+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0+2*siy))[2])) + ( (sctx->grad + 3*(0+2*siy))[2]))); | |||||
| 285 | } | |||||
| 286 | if (yi!=0 && yi!=sy-1) { | |||||
| 287 | ELL_3M_SCALE(Tym, 0.5, Tym)((((Tym)+0)[0] = ((0.5))*((Tym)+0)[0], ((Tym)+0)[1] = ((0.5)) *((Tym)+0)[1], ((Tym)+0)[2] = ((0.5))*((Tym)+0)[2]), (((Tym)+ 3)[0] = ((0.5))*((Tym)+3)[0], ((Tym)+3)[1] = ((0.5))*((Tym)+3 )[1], ((Tym)+3)[2] = ((0.5))*((Tym)+3)[2]), (((Tym)+6)[0] = ( (0.5))*((Tym)+6)[0], ((Tym)+6)[1] = ((0.5))*((Tym)+6)[1], ((Tym )+6)[2] = ((0.5))*((Tym)+6)[2])); ELL_3M_SCALE(Typ, 0.5, Typ)((((Typ)+0)[0] = ((0.5))*((Typ)+0)[0], ((Typ)+0)[1] = ((0.5)) *((Typ)+0)[1], ((Typ)+0)[2] = ((0.5))*((Typ)+0)[2]), (((Typ)+ 3)[0] = ((0.5))*((Typ)+3)[0], ((Typ)+3)[1] = ((0.5))*((Typ)+3 )[1], ((Typ)+3)[2] = ((0.5))*((Typ)+3)[2]), (((Typ)+6)[0] = ( (0.5))*((Typ)+6)[0], ((Typ)+6)[1] = ((0.5))*((Typ)+6)[1], ((Typ )+6)[2] = ((0.5))*((Typ)+6)[2])); | |||||
| 288 | ELL_3V_SCALE(gym, 0.5, gym)((gym)[0] = (0.5)*(gym)[0], (gym)[1] = (0.5)*(gym)[1], (gym)[ 2] = (0.5)*(gym)[2]); ELL_3V_SCALE(gyp, 0.5, gyp)((gyp)[0] = (0.5)*(gyp)[0], (gyp)[1] = (0.5)*(gyp)[1], (gyp)[ 2] = (0.5)*(gyp)[2]); | |||||
| 289 | } | |||||
| 290 | computeGradientLin(res, T, g, | |||||
| 291 | sctx->t + 9*(0+2*si), sctx->grad + 3*(0+2*si), | |||||
| 292 | sctx->t + 9*(0+2*six), sctx->grad + 3*(0+2*six), | |||||
| 293 | Tym, gym, Typ, gyp, | |||||
| 294 | Tzm, gzm, Tzp, gzp); | |||||
| 295 | break; | |||||
| 296 | case 1: | |||||
| 297 | ELL_3M_LERP(T, alpha, sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*siy))((((T)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*siy))+0)[ 0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->t + 9 *(0+2*si))+0)[0])), ((T)+0)[1] = ((((alpha)))*((((sctx->t + 9*(0+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*si))+0)[1])) + ( ((sctx->t + 9*(0+2*si))+0)[1])), ((T)+0)[2] = ((((alpha))) *((((sctx->t + 9*(0+2*siy))+0)[2]) - (((sctx->t + 9*(0+ 2*si))+0)[2])) + (((sctx->t + 9*(0+2*si))+0)[2]))), (((T)+ 3)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*siy))+3)[0]) - ( ((sctx->t + 9*(0+2*si))+3)[0])) + (((sctx->t + 9*(0+2*si ))+3)[0])), ((T)+3)[1] = ((((alpha)))*((((sctx->t + 9*(0+2 *siy))+3)[1]) - (((sctx->t + 9*(0+2*si))+3)[1])) + (((sctx ->t + 9*(0+2*si))+3)[1])), ((T)+3)[2] = ((((alpha)))*((((sctx ->t + 9*(0+2*siy))+3)[2]) - (((sctx->t + 9*(0+2*si))+3) [2])) + (((sctx->t + 9*(0+2*si))+3)[2]))), (((T)+6)[0] = ( (((alpha)))*((((sctx->t + 9*(0+2*siy))+6)[0]) - (((sctx-> t + 9*(0+2*si))+6)[0])) + (((sctx->t + 9*(0+2*si))+6)[0])) , ((T)+6)[1] = ((((alpha)))*((((sctx->t + 9*(0+2*siy))+6)[ 1]) - (((sctx->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9 *(0+2*si))+6)[1])), ((T)+6)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*siy))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + ( ((sctx->t + 9*(0+2*si))+6)[2])))); | |||||
| 298 | ELL_3V_LERP(g, alpha, sctx->grad + 3*(0+2*si), sctx->grad + 3*(0+2*siy))((g)[0] = (((alpha))*(((sctx->grad + 3*(0+2*siy))[0]) - (( sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*(0+2*si ))[0])), (g)[1] = (((alpha))*(((sctx->grad + 3*(0+2*siy))[ 1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx->grad + 3 *(0+2*si))[1])), (g)[2] = (((alpha))*(((sctx->grad + 3*(0+ 2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[2])) + ((sctx-> grad + 3*(0+2*si))[2]))); | |||||
| 299 | ELL_3M_LERP(Tzp, alpha, sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*siy))((((Tzp)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+0 )[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx->t + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((((alpha)))*((((sctx-> t + 9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(1+2*si))+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Tzp)+0)[2] = ((((alpha )))*((((sctx->t + 9*(1+2*siy))+0)[2]) - (((sctx->t + 9* (1+2*si))+0)[2])) + (((sctx->t + 9*(1+2*si))+0)[2]))), ((( Tzp)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+3)[0] ) - (((sctx->t + 9*(1+2*si))+3)[0])) + (((sctx->t + 9*( 1+2*si))+3)[0])), ((Tzp)+3)[1] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+3)[1]) - (((sctx->t + 9*(1+2*si))+3)[1])) + ( ((sctx->t + 9*(1+2*si))+3)[1])), ((Tzp)+3)[2] = ((((alpha) ))*((((sctx->t + 9*(1+2*siy))+3)[2]) - (((sctx->t + 9*( 1+2*si))+3)[2])) + (((sctx->t + 9*(1+2*si))+3)[2]))), (((Tzp )+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+6)[0]) - (((sctx->t + 9*(1+2*si))+6)[0])) + (((sctx->t + 9*(1+2 *si))+6)[0])), ((Tzp)+6)[1] = ((((alpha)))*((((sctx->t + 9 *(1+2*siy))+6)[1]) - (((sctx->t + 9*(1+2*si))+6)[1])) + (( (sctx->t + 9*(1+2*si))+6)[1])), ((Tzp)+6)[2] = ((((alpha)) )*((((sctx->t + 9*(1+2*siy))+6)[2]) - (((sctx->t + 9*(1 +2*si))+6)[2])) + (((sctx->t + 9*(1+2*si))+6)[2])))); | |||||
| 300 | ELL_3V_LERP(gzp, alpha, sctx->grad + 3*(1+2*si), sctx->grad + 3*(1+2*siy))((gzp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siy))[0]) - ( (sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*(1+2* si))[0])), (gzp)[1] = (((alpha))*(((sctx->grad + 3*(1+2*siy ))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx->grad + 3*(1+2*si))[1])), (gzp)[2] = (((alpha))*(((sctx->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[2])) + ((sctx ->grad + 3*(1+2*si))[2]))); | |||||
| 301 | if (bag->zi==0) { | |||||
| 302 | ELL_3M_COPY(Tzm, T)((((Tzm)+0)[0] = ((T)+0)[0], ((Tzm)+0)[1] = ((T)+0)[1], ((Tzm )+0)[2] = ((T)+0)[2]), (((Tzm)+3)[0] = ((T)+3)[0], ((Tzm)+3)[ 1] = ((T)+3)[1], ((Tzm)+3)[2] = ((T)+3)[2]), (((Tzm)+6)[0] = ( (T)+6)[0], ((Tzm)+6)[1] = ((T)+6)[1], ((Tzm)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gzm, g)((gzm)[0] = (g)[0], (gzm)[1] = (g)[1], (gzm)[2] = (g)[2]); | |||||
| 303 | } else { | |||||
| 304 | ELL_3M_LERP(Tzm, alpha, sctx->tcontext + 9*(0+2*si),((((Tzm)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2* siy))+0)[0]) - (((sctx->tcontext + 9*(0+2*si))+0)[0])) + ( ((sctx->tcontext + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(0+2*siy))+0)[1]) - (((sctx ->tcontext + 9*(0+2*si))+0)[1])) + (((sctx->tcontext + 9 *(0+2*si))+0)[1])), ((Tzm)+0)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(0+2*siy))+0)[2]) - (((sctx->tcontext + 9*(0+ 2*si))+0)[2])) + (((sctx->tcontext + 9*(0+2*si))+0)[2]))), (((Tzm)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2* siy))+3)[0]) - (((sctx->tcontext + 9*(0+2*si))+3)[0])) + ( ((sctx->tcontext + 9*(0+2*si))+3)[0])), ((Tzm)+3)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(0+2*siy))+3)[1]) - (((sctx ->tcontext + 9*(0+2*si))+3)[1])) + (((sctx->tcontext + 9 *(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(0+2*siy))+3)[2]) - (((sctx->tcontext + 9*(0+ 2*si))+3)[2])) + (((sctx->tcontext + 9*(0+2*si))+3)[2]))), (((Tzm)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2* siy))+6)[0]) - (((sctx->tcontext + 9*(0+2*si))+6)[0])) + ( ((sctx->tcontext + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(0+2*siy))+6)[1]) - (((sctx ->tcontext + 9*(0+2*si))+6)[1])) + (((sctx->tcontext + 9 *(0+2*si))+6)[1])), ((Tzm)+6)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(0+2*siy))+6)[2]) - (((sctx->tcontext + 9*(0+ 2*si))+6)[2])) + (((sctx->tcontext + 9*(0+2*si))+6)[2])))) | |||||
| 305 | sctx->tcontext + 9*(0+2*siy))((((Tzm)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2* siy))+0)[0]) - (((sctx->tcontext + 9*(0+2*si))+0)[0])) + ( ((sctx->tcontext + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(0+2*siy))+0)[1]) - (((sctx ->tcontext + 9*(0+2*si))+0)[1])) + (((sctx->tcontext + 9 *(0+2*si))+0)[1])), ((Tzm)+0)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(0+2*siy))+0)[2]) - (((sctx->tcontext + 9*(0+ 2*si))+0)[2])) + (((sctx->tcontext + 9*(0+2*si))+0)[2]))), (((Tzm)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2* siy))+3)[0]) - (((sctx->tcontext + 9*(0+2*si))+3)[0])) + ( ((sctx->tcontext + 9*(0+2*si))+3)[0])), ((Tzm)+3)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(0+2*siy))+3)[1]) - (((sctx ->tcontext + 9*(0+2*si))+3)[1])) + (((sctx->tcontext + 9 *(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(0+2*siy))+3)[2]) - (((sctx->tcontext + 9*(0+ 2*si))+3)[2])) + (((sctx->tcontext + 9*(0+2*si))+3)[2]))), (((Tzm)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2* siy))+6)[0]) - (((sctx->tcontext + 9*(0+2*si))+6)[0])) + ( ((sctx->tcontext + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(0+2*siy))+6)[1]) - (((sctx ->tcontext + 9*(0+2*si))+6)[1])) + (((sctx->tcontext + 9 *(0+2*si))+6)[1])), ((Tzm)+6)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(0+2*siy))+6)[2]) - (((sctx->tcontext + 9*(0+ 2*si))+6)[2])) + (((sctx->tcontext + 9*(0+2*si))+6)[2])))); | |||||
| 306 | ELL_3V_LERP(gzm, alpha, sctx->gradcontext + 3*(0+2*si),((gzm)[0] = (((alpha))*(((sctx->gradcontext + 3*(0+2*siy)) [0]) - ((sctx->gradcontext + 3*(0+2*si))[0])) + ((sctx-> gradcontext + 3*(0+2*si))[0])), (gzm)[1] = (((alpha))*(((sctx ->gradcontext + 3*(0+2*siy))[1]) - ((sctx->gradcontext + 3*(0+2*si))[1])) + ((sctx->gradcontext + 3*(0+2*si))[1])) , (gzm)[2] = (((alpha))*(((sctx->gradcontext + 3*(0+2*siy) )[2]) - ((sctx->gradcontext + 3*(0+2*si))[2])) + ((sctx-> gradcontext + 3*(0+2*si))[2]))) | |||||
| 307 | sctx->gradcontext + 3*(0+2*siy))((gzm)[0] = (((alpha))*(((sctx->gradcontext + 3*(0+2*siy)) [0]) - ((sctx->gradcontext + 3*(0+2*si))[0])) + ((sctx-> gradcontext + 3*(0+2*si))[0])), (gzm)[1] = (((alpha))*(((sctx ->gradcontext + 3*(0+2*siy))[1]) - ((sctx->gradcontext + 3*(0+2*si))[1])) + ((sctx->gradcontext + 3*(0+2*si))[1])) , (gzm)[2] = (((alpha))*(((sctx->gradcontext + 3*(0+2*siy) )[2]) - ((sctx->gradcontext + 3*(0+2*si))[2])) + ((sctx-> gradcontext + 3*(0+2*si))[2]))); | |||||
| 308 | ELL_3M_SCALE(Tzm, 0.5, Tzm)((((Tzm)+0)[0] = ((0.5))*((Tzm)+0)[0], ((Tzm)+0)[1] = ((0.5)) *((Tzm)+0)[1], ((Tzm)+0)[2] = ((0.5))*((Tzm)+0)[2]), (((Tzm)+ 3)[0] = ((0.5))*((Tzm)+3)[0], ((Tzm)+3)[1] = ((0.5))*((Tzm)+3 )[1], ((Tzm)+3)[2] = ((0.5))*((Tzm)+3)[2]), (((Tzm)+6)[0] = ( (0.5))*((Tzm)+6)[0], ((Tzm)+6)[1] = ((0.5))*((Tzm)+6)[1], ((Tzm )+6)[2] = ((0.5))*((Tzm)+6)[2])); ELL_3M_SCALE(Tzp, 0.5, Tzp)((((Tzp)+0)[0] = ((0.5))*((Tzp)+0)[0], ((Tzp)+0)[1] = ((0.5)) *((Tzp)+0)[1], ((Tzp)+0)[2] = ((0.5))*((Tzp)+0)[2]), (((Tzp)+ 3)[0] = ((0.5))*((Tzp)+3)[0], ((Tzp)+3)[1] = ((0.5))*((Tzp)+3 )[1], ((Tzp)+3)[2] = ((0.5))*((Tzp)+3)[2]), (((Tzp)+6)[0] = ( (0.5))*((Tzp)+6)[0], ((Tzp)+6)[1] = ((0.5))*((Tzp)+6)[1], ((Tzp )+6)[2] = ((0.5))*((Tzp)+6)[2])); | |||||
| 309 | ELL_3V_SCALE(gzm, 0.5, gzm)((gzm)[0] = (0.5)*(gzm)[0], (gzm)[1] = (0.5)*(gzm)[1], (gzm)[ 2] = (0.5)*(gzm)[2]); ELL_3V_SCALE(gzp, 0.5, gzp)((gzp)[0] = (0.5)*(gzp)[0], (gzp)[1] = (0.5)*(gzp)[1], (gzp)[ 2] = (0.5)*(gzp)[2]); | |||||
| 310 | } | |||||
| 311 | if (xi==0) { | |||||
| 312 | ELL_3M_COPY(Txm, T)((((Txm)+0)[0] = ((T)+0)[0], ((Txm)+0)[1] = ((T)+0)[1], ((Txm )+0)[2] = ((T)+0)[2]), (((Txm)+3)[0] = ((T)+3)[0], ((Txm)+3)[ 1] = ((T)+3)[1], ((Txm)+3)[2] = ((T)+3)[2]), (((Txm)+6)[0] = ( (T)+6)[0], ((Txm)+6)[1] = ((T)+6)[1], ((Txm)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gxm, g)((gxm)[0] = (g)[0], (gxm)[1] = (g)[1], (gxm)[2] = (g)[2]); | |||||
| 313 | } else { | |||||
| 314 | ELL_3M_LERP(Txm, alpha, sctx->t + 9*(0+2*siX), sctx->t + 9*(0+2*siXy))((((Txm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*siXy))+ 0)[0]) - (((sctx->t + 9*(0+2*siX))+0)[0])) + (((sctx->t + 9*(0+2*siX))+0)[0])), ((Txm)+0)[1] = ((((alpha)))*((((sctx ->t + 9*(0+2*siXy))+0)[1]) - (((sctx->t + 9*(0+2*siX))+ 0)[1])) + (((sctx->t + 9*(0+2*siX))+0)[1])), ((Txm)+0)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*siXy))+0)[2]) - (((sctx ->t + 9*(0+2*siX))+0)[2])) + (((sctx->t + 9*(0+2*siX))+ 0)[2]))), (((Txm)+3)[0] = ((((alpha)))*((((sctx->t + 9*(0+ 2*siXy))+3)[0]) - (((sctx->t + 9*(0+2*siX))+3)[0])) + (((sctx ->t + 9*(0+2*siX))+3)[0])), ((Txm)+3)[1] = ((((alpha)))*(( ((sctx->t + 9*(0+2*siXy))+3)[1]) - (((sctx->t + 9*(0+2* siX))+3)[1])) + (((sctx->t + 9*(0+2*siX))+3)[1])), ((Txm)+ 3)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*siXy))+3)[2]) - ( ((sctx->t + 9*(0+2*siX))+3)[2])) + (((sctx->t + 9*(0+2* siX))+3)[2]))), (((Txm)+6)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*siXy))+6)[0]) - (((sctx->t + 9*(0+2*siX))+6)[0])) + (((sctx->t + 9*(0+2*siX))+6)[0])), ((Txm)+6)[1] = ((((alpha )))*((((sctx->t + 9*(0+2*siXy))+6)[1]) - (((sctx->t + 9 *(0+2*siX))+6)[1])) + (((sctx->t + 9*(0+2*siX))+6)[1])), ( (Txm)+6)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*siXy))+6)[ 2]) - (((sctx->t + 9*(0+2*siX))+6)[2])) + (((sctx->t + 9 *(0+2*siX))+6)[2])))); | |||||
| 315 | ELL_3V_LERP(gxm, alpha, sctx->grad + 3*(0+2*siX),((gxm)[0] = (((alpha))*(((sctx->grad + 3*(0+2*siXy))[0]) - ((sctx->grad + 3*(0+2*siX))[0])) + ((sctx->grad + 3*(0 +2*siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(0+ 2*siXy))[1]) - ((sctx->grad + 3*(0+2*siX))[1])) + ((sctx-> grad + 3*(0+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad + 3*(0+2*siXy))[2]) - ((sctx->grad + 3*(0+2*siX))[2])) + ( (sctx->grad + 3*(0+2*siX))[2]))) | |||||
| 316 | sctx->grad + 3*(0+2*siXy))((gxm)[0] = (((alpha))*(((sctx->grad + 3*(0+2*siXy))[0]) - ((sctx->grad + 3*(0+2*siX))[0])) + ((sctx->grad + 3*(0 +2*siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(0+ 2*siXy))[1]) - ((sctx->grad + 3*(0+2*siX))[1])) + ((sctx-> grad + 3*(0+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad + 3*(0+2*siXy))[2]) - ((sctx->grad + 3*(0+2*siX))[2])) + ( (sctx->grad + 3*(0+2*siX))[2]))); | |||||
| 317 | } | |||||
| 318 | if (xi==sx-1) { | |||||
| 319 | ELL_3M_COPY(Txp, T)((((Txp)+0)[0] = ((T)+0)[0], ((Txp)+0)[1] = ((T)+0)[1], ((Txp )+0)[2] = ((T)+0)[2]), (((Txp)+3)[0] = ((T)+3)[0], ((Txp)+3)[ 1] = ((T)+3)[1], ((Txp)+3)[2] = ((T)+3)[2]), (((Txp)+6)[0] = ( (T)+6)[0], ((Txp)+6)[1] = ((T)+6)[1], ((Txp)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gxm, g)((gxm)[0] = (g)[0], (gxm)[1] = (g)[1], (gxm)[2] = (g)[2]); | |||||
| 320 | } else { | |||||
| 321 | ELL_3M_LERP(Txp, alpha, sctx->t + 9*(0+2*six), sctx->t + 9*(0+2*sixy))((((Txp)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+ 0)[0]) - (((sctx->t + 9*(0+2*six))+0)[0])) + (((sctx->t + 9*(0+2*six))+0)[0])), ((Txp)+0)[1] = ((((alpha)))*((((sctx ->t + 9*(0+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2*six))+ 0)[1])) + (((sctx->t + 9*(0+2*six))+0)[1])), ((Txp)+0)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+0)[2]) - (((sctx ->t + 9*(0+2*six))+0)[2])) + (((sctx->t + 9*(0+2*six))+ 0)[2]))), (((Txp)+3)[0] = ((((alpha)))*((((sctx->t + 9*(0+ 2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*six))+3)[0])) + (((sctx ->t + 9*(0+2*six))+3)[0])), ((Txp)+3)[1] = ((((alpha)))*(( ((sctx->t + 9*(0+2*sixy))+3)[1]) - (((sctx->t + 9*(0+2* six))+3)[1])) + (((sctx->t + 9*(0+2*six))+3)[1])), ((Txp)+ 3)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+3)[2]) - ( ((sctx->t + 9*(0+2*six))+3)[2])) + (((sctx->t + 9*(0+2* six))+3)[2]))), (((Txp)+6)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+6)[0]) - (((sctx->t + 9*(0+2*six))+6)[0])) + (((sctx->t + 9*(0+2*six))+6)[0])), ((Txp)+6)[1] = ((((alpha )))*((((sctx->t + 9*(0+2*sixy))+6)[1]) - (((sctx->t + 9 *(0+2*six))+6)[1])) + (((sctx->t + 9*(0+2*six))+6)[1])), ( (Txp)+6)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+6)[ 2]) - (((sctx->t + 9*(0+2*six))+6)[2])) + (((sctx->t + 9 *(0+2*six))+6)[2])))); | |||||
| 322 | ELL_3V_LERP(gxp, alpha, sctx->grad + 3*(0+2*six),((gxp)[0] = (((alpha))*(((sctx->grad + 3*(0+2*sixy))[0]) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3*(0 +2*six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(0+ 2*sixy))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx-> grad + 3*(0+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0+2*six))[2])) + ( (sctx->grad + 3*(0+2*six))[2]))) | |||||
| 323 | sctx->grad + 3*(0+2*sixy))((gxp)[0] = (((alpha))*(((sctx->grad + 3*(0+2*sixy))[0]) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3*(0 +2*six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(0+ 2*sixy))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx-> grad + 3*(0+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0+2*six))[2])) + ( (sctx->grad + 3*(0+2*six))[2]))); | |||||
| 324 | } | |||||
| 325 | if (xi!=0 && xi!=sx-1) { | |||||
| 326 | ELL_3M_SCALE(Txm, 0.5, Txm)((((Txm)+0)[0] = ((0.5))*((Txm)+0)[0], ((Txm)+0)[1] = ((0.5)) *((Txm)+0)[1], ((Txm)+0)[2] = ((0.5))*((Txm)+0)[2]), (((Txm)+ 3)[0] = ((0.5))*((Txm)+3)[0], ((Txm)+3)[1] = ((0.5))*((Txm)+3 )[1], ((Txm)+3)[2] = ((0.5))*((Txm)+3)[2]), (((Txm)+6)[0] = ( (0.5))*((Txm)+6)[0], ((Txm)+6)[1] = ((0.5))*((Txm)+6)[1], ((Txm )+6)[2] = ((0.5))*((Txm)+6)[2])); ELL_3M_SCALE(Txp, 0.5, Txp)((((Txp)+0)[0] = ((0.5))*((Txp)+0)[0], ((Txp)+0)[1] = ((0.5)) *((Txp)+0)[1], ((Txp)+0)[2] = ((0.5))*((Txp)+0)[2]), (((Txp)+ 3)[0] = ((0.5))*((Txp)+3)[0], ((Txp)+3)[1] = ((0.5))*((Txp)+3 )[1], ((Txp)+3)[2] = ((0.5))*((Txp)+3)[2]), (((Txp)+6)[0] = ( (0.5))*((Txp)+6)[0], ((Txp)+6)[1] = ((0.5))*((Txp)+6)[1], ((Txp )+6)[2] = ((0.5))*((Txp)+6)[2])); | |||||
| 327 | ELL_3V_SCALE(gxm, 0.5, gxm)((gxm)[0] = (0.5)*(gxm)[0], (gxm)[1] = (0.5)*(gxm)[1], (gxm)[ 2] = (0.5)*(gxm)[2]); ELL_3V_SCALE(gxp, 0.5, gxp)((gxp)[0] = (0.5)*(gxp)[0], (gxp)[1] = (0.5)*(gxp)[1], (gxp)[ 2] = (0.5)*(gxp)[2]); | |||||
| 328 | } | |||||
| 329 | computeGradientLin(res, T, g, | |||||
| 330 | Txm, gxm, Txp, gxp, | |||||
| 331 | sctx->t + 9*(0+2*si), sctx->grad + 3*(0+2*si), | |||||
| 332 | sctx->t + 9*(0+2*siy), sctx->grad + 3*(0+2*siy), | |||||
| 333 | T, g, Tzp, gzp); | |||||
| 334 | break; | |||||
| 335 | case 2: | |||||
| 336 | ELL_3M_LERP(T, alpha, sctx->t + 9*(0+2*si), sctx->t + 9*(1+2*si))((((T)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+0)[0 ]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->t + 9* (0+2*si))+0)[0])), ((T)+0)[1] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+0)[1]) - (((sctx->t + 9*(0+2*si))+0)[1])) + ( ((sctx->t + 9*(0+2*si))+0)[1])), ((T)+0)[2] = ((((alpha))) *((((sctx->t + 9*(1+2*si))+0)[2]) - (((sctx->t + 9*(0+2 *si))+0)[2])) + (((sctx->t + 9*(0+2*si))+0)[2]))), (((T)+3 )[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+3)[0]) - ((( sctx->t + 9*(0+2*si))+3)[0])) + (((sctx->t + 9*(0+2*si) )+3)[0])), ((T)+3)[1] = ((((alpha)))*((((sctx->t + 9*(1+2* si))+3)[1]) - (((sctx->t + 9*(0+2*si))+3)[1])) + (((sctx-> t + 9*(0+2*si))+3)[1])), ((T)+3)[2] = ((((alpha)))*((((sctx-> t + 9*(1+2*si))+3)[2]) - (((sctx->t + 9*(0+2*si))+3)[2])) + (((sctx->t + 9*(0+2*si))+3)[2]))), (((T)+6)[0] = ((((alpha )))*((((sctx->t + 9*(1+2*si))+6)[0]) - (((sctx->t + 9*( 0+2*si))+6)[0])) + (((sctx->t + 9*(0+2*si))+6)[0])), ((T)+ 6)[1] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+6)[1]) - (( (sctx->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si ))+6)[1])), ((T)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2 *si))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx-> t + 9*(0+2*si))+6)[2])))); | |||||
| 337 | ELL_3V_LERP(g, alpha, sctx->grad + 3*(0+2*si), sctx->grad + 3*(1+2*si))((g)[0] = (((alpha))*(((sctx->grad + 3*(1+2*si))[0]) - ((sctx ->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*(0+2*si))[ 0])), (g)[1] = (((alpha))*(((sctx->grad + 3*(1+2*si))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx->grad + 3*(0+ 2*si))[1])), (g)[2] = (((alpha))*(((sctx->grad + 3*(1+2*si ))[2]) - ((sctx->grad + 3*(0+2*si))[2])) + ((sctx->grad + 3*(0+2*si))[2]))); | |||||
| 338 | if (xi==0) { | |||||
| 339 | ELL_3M_COPY(Txm, T)((((Txm)+0)[0] = ((T)+0)[0], ((Txm)+0)[1] = ((T)+0)[1], ((Txm )+0)[2] = ((T)+0)[2]), (((Txm)+3)[0] = ((T)+3)[0], ((Txm)+3)[ 1] = ((T)+3)[1], ((Txm)+3)[2] = ((T)+3)[2]), (((Txm)+6)[0] = ( (T)+6)[0], ((Txm)+6)[1] = ((T)+6)[1], ((Txm)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gxm, g)((gxm)[0] = (g)[0], (gxm)[1] = (g)[1], (gxm)[2] = (g)[2]); | |||||
| 340 | } else { | |||||
| 341 | ELL_3M_LERP(Txm, alpha, sctx->t + 9*(0+2*siX), sctx->t + 9*(1+2*siX))((((Txm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siX))+0 )[0]) - (((sctx->t + 9*(0+2*siX))+0)[0])) + (((sctx->t + 9*(0+2*siX))+0)[0])), ((Txm)+0)[1] = ((((alpha)))*((((sctx-> t + 9*(1+2*siX))+0)[1]) - (((sctx->t + 9*(0+2*siX))+0)[1]) ) + (((sctx->t + 9*(0+2*siX))+0)[1])), ((Txm)+0)[2] = (((( alpha)))*((((sctx->t + 9*(1+2*siX))+0)[2]) - (((sctx->t + 9*(0+2*siX))+0)[2])) + (((sctx->t + 9*(0+2*siX))+0)[2]) )), (((Txm)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siX) )+3)[0]) - (((sctx->t + 9*(0+2*siX))+3)[0])) + (((sctx-> t + 9*(0+2*siX))+3)[0])), ((Txm)+3)[1] = ((((alpha)))*((((sctx ->t + 9*(1+2*siX))+3)[1]) - (((sctx->t + 9*(0+2*siX))+3 )[1])) + (((sctx->t + 9*(0+2*siX))+3)[1])), ((Txm)+3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siX))+3)[2]) - (((sctx-> t + 9*(0+2*siX))+3)[2])) + (((sctx->t + 9*(0+2*siX))+3)[2] ))), (((Txm)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siX ))+6)[0]) - (((sctx->t + 9*(0+2*siX))+6)[0])) + (((sctx-> t + 9*(0+2*siX))+6)[0])), ((Txm)+6)[1] = ((((alpha)))*((((sctx ->t + 9*(1+2*siX))+6)[1]) - (((sctx->t + 9*(0+2*siX))+6 )[1])) + (((sctx->t + 9*(0+2*siX))+6)[1])), ((Txm)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siX))+6)[2]) - (((sctx-> t + 9*(0+2*siX))+6)[2])) + (((sctx->t + 9*(0+2*siX))+6)[2] )))); | |||||
| 342 | ELL_3V_LERP(gxm, alpha, sctx->grad + 3*(0+2*siX),((gxm)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siX))[0]) - ( (sctx->grad + 3*(0+2*siX))[0])) + ((sctx->grad + 3*(0+2 *siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(1+2* siX))[1]) - ((sctx->grad + 3*(0+2*siX))[1])) + ((sctx-> grad + 3*(0+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad + 3*(1+2*siX))[2]) - ((sctx->grad + 3*(0+2*siX))[2])) + ( (sctx->grad + 3*(0+2*siX))[2]))) | |||||
| 343 | sctx->grad + 3*(1+2*siX))((gxm)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siX))[0]) - ( (sctx->grad + 3*(0+2*siX))[0])) + ((sctx->grad + 3*(0+2 *siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(1+2* siX))[1]) - ((sctx->grad + 3*(0+2*siX))[1])) + ((sctx-> grad + 3*(0+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad + 3*(1+2*siX))[2]) - ((sctx->grad + 3*(0+2*siX))[2])) + ( (sctx->grad + 3*(0+2*siX))[2]))); | |||||
| 344 | } | |||||
| 345 | if (xi==sx-1) { | |||||
| 346 | ELL_3M_COPY(Txp, T)((((Txp)+0)[0] = ((T)+0)[0], ((Txp)+0)[1] = ((T)+0)[1], ((Txp )+0)[2] = ((T)+0)[2]), (((Txp)+3)[0] = ((T)+3)[0], ((Txp)+3)[ 1] = ((T)+3)[1], ((Txp)+3)[2] = ((T)+3)[2]), (((Txp)+6)[0] = ( (T)+6)[0], ((Txp)+6)[1] = ((T)+6)[1], ((Txp)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gxp, g)((gxp)[0] = (g)[0], (gxp)[1] = (g)[1], (gxp)[2] = (g)[2]); | |||||
| 347 | } else { | |||||
| 348 | ELL_3M_LERP(Txp, alpha, sctx->t + 9*(0+2*six), sctx->t + 9*(1+2*six))((((Txp)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+0 )[0]) - (((sctx->t + 9*(0+2*six))+0)[0])) + (((sctx->t + 9*(0+2*six))+0)[0])), ((Txp)+0)[1] = ((((alpha)))*((((sctx-> t + 9*(1+2*six))+0)[1]) - (((sctx->t + 9*(0+2*six))+0)[1]) ) + (((sctx->t + 9*(0+2*six))+0)[1])), ((Txp)+0)[2] = (((( alpha)))*((((sctx->t + 9*(1+2*six))+0)[2]) - (((sctx->t + 9*(0+2*six))+0)[2])) + (((sctx->t + 9*(0+2*six))+0)[2]) )), (((Txp)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six) )+3)[0]) - (((sctx->t + 9*(0+2*six))+3)[0])) + (((sctx-> t + 9*(0+2*six))+3)[0])), ((Txp)+3)[1] = ((((alpha)))*((((sctx ->t + 9*(1+2*six))+3)[1]) - (((sctx->t + 9*(0+2*six))+3 )[1])) + (((sctx->t + 9*(0+2*six))+3)[1])), ((Txp)+3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+3)[2]) - (((sctx-> t + 9*(0+2*six))+3)[2])) + (((sctx->t + 9*(0+2*six))+3)[2] ))), (((Txp)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six ))+6)[0]) - (((sctx->t + 9*(0+2*six))+6)[0])) + (((sctx-> t + 9*(0+2*six))+6)[0])), ((Txp)+6)[1] = ((((alpha)))*((((sctx ->t + 9*(1+2*six))+6)[1]) - (((sctx->t + 9*(0+2*six))+6 )[1])) + (((sctx->t + 9*(0+2*six))+6)[1])), ((Txp)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+6)[2]) - (((sctx-> t + 9*(0+2*six))+6)[2])) + (((sctx->t + 9*(0+2*six))+6)[2] )))); | |||||
| 349 | ELL_3V_LERP(gxp, alpha, sctx->grad + 3*(0+2*six),((gxp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*six))[0]) - ( (sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3*(0+2 *six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(1+2* six))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx-> grad + 3*(0+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(0+2*six))[2])) + ( (sctx->grad + 3*(0+2*six))[2]))) | |||||
| 350 | sctx->grad + 3*(1+2*six))((gxp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*six))[0]) - ( (sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3*(0+2 *six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(1+2* six))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx-> grad + 3*(0+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(0+2*six))[2])) + ( (sctx->grad + 3*(0+2*six))[2]))); | |||||
| 351 | } | |||||
| 352 | if (xi!=0 && xi!=sx-1) { | |||||
| 353 | ELL_3M_SCALE(Txm, 0.5, Txm)((((Txm)+0)[0] = ((0.5))*((Txm)+0)[0], ((Txm)+0)[1] = ((0.5)) *((Txm)+0)[1], ((Txm)+0)[2] = ((0.5))*((Txm)+0)[2]), (((Txm)+ 3)[0] = ((0.5))*((Txm)+3)[0], ((Txm)+3)[1] = ((0.5))*((Txm)+3 )[1], ((Txm)+3)[2] = ((0.5))*((Txm)+3)[2]), (((Txm)+6)[0] = ( (0.5))*((Txm)+6)[0], ((Txm)+6)[1] = ((0.5))*((Txm)+6)[1], ((Txm )+6)[2] = ((0.5))*((Txm)+6)[2])); ELL_3M_SCALE(Txp, 0.5, Txp)((((Txp)+0)[0] = ((0.5))*((Txp)+0)[0], ((Txp)+0)[1] = ((0.5)) *((Txp)+0)[1], ((Txp)+0)[2] = ((0.5))*((Txp)+0)[2]), (((Txp)+ 3)[0] = ((0.5))*((Txp)+3)[0], ((Txp)+3)[1] = ((0.5))*((Txp)+3 )[1], ((Txp)+3)[2] = ((0.5))*((Txp)+3)[2]), (((Txp)+6)[0] = ( (0.5))*((Txp)+6)[0], ((Txp)+6)[1] = ((0.5))*((Txp)+6)[1], ((Txp )+6)[2] = ((0.5))*((Txp)+6)[2])); | |||||
| 354 | ELL_3V_SCALE(gxm, 0.5, gxm)((gxm)[0] = (0.5)*(gxm)[0], (gxm)[1] = (0.5)*(gxm)[1], (gxm)[ 2] = (0.5)*(gxm)[2]); ELL_3V_SCALE(gxp, 0.5, gxp)((gxp)[0] = (0.5)*(gxp)[0], (gxp)[1] = (0.5)*(gxp)[1], (gxp)[ 2] = (0.5)*(gxp)[2]); | |||||
| 355 | } | |||||
| 356 | if (yi==0) { | |||||
| 357 | ELL_3M_COPY(Tym, T)((((Tym)+0)[0] = ((T)+0)[0], ((Tym)+0)[1] = ((T)+0)[1], ((Tym )+0)[2] = ((T)+0)[2]), (((Tym)+3)[0] = ((T)+3)[0], ((Tym)+3)[ 1] = ((T)+3)[1], ((Tym)+3)[2] = ((T)+3)[2]), (((Tym)+6)[0] = ( (T)+6)[0], ((Tym)+6)[1] = ((T)+6)[1], ((Tym)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gym, g)((gym)[0] = (g)[0], (gym)[1] = (g)[1], (gym)[2] = (g)[2]); | |||||
| 358 | } else { | |||||
| 359 | ELL_3M_LERP(Tym, alpha, sctx->t + 9*(0+2*siY), sctx->t + 9*(1+2*siY))((((Tym)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siY))+0 )[0]) - (((sctx->t + 9*(0+2*siY))+0)[0])) + (((sctx->t + 9*(0+2*siY))+0)[0])), ((Tym)+0)[1] = ((((alpha)))*((((sctx-> t + 9*(1+2*siY))+0)[1]) - (((sctx->t + 9*(0+2*siY))+0)[1]) ) + (((sctx->t + 9*(0+2*siY))+0)[1])), ((Tym)+0)[2] = (((( alpha)))*((((sctx->t + 9*(1+2*siY))+0)[2]) - (((sctx->t + 9*(0+2*siY))+0)[2])) + (((sctx->t + 9*(0+2*siY))+0)[2]) )), (((Tym)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siY) )+3)[0]) - (((sctx->t + 9*(0+2*siY))+3)[0])) + (((sctx-> t + 9*(0+2*siY))+3)[0])), ((Tym)+3)[1] = ((((alpha)))*((((sctx ->t + 9*(1+2*siY))+3)[1]) - (((sctx->t + 9*(0+2*siY))+3 )[1])) + (((sctx->t + 9*(0+2*siY))+3)[1])), ((Tym)+3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siY))+3)[2]) - (((sctx-> t + 9*(0+2*siY))+3)[2])) + (((sctx->t + 9*(0+2*siY))+3)[2] ))), (((Tym)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siY ))+6)[0]) - (((sctx->t + 9*(0+2*siY))+6)[0])) + (((sctx-> t + 9*(0+2*siY))+6)[0])), ((Tym)+6)[1] = ((((alpha)))*((((sctx ->t + 9*(1+2*siY))+6)[1]) - (((sctx->t + 9*(0+2*siY))+6 )[1])) + (((sctx->t + 9*(0+2*siY))+6)[1])), ((Tym)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siY))+6)[2]) - (((sctx-> t + 9*(0+2*siY))+6)[2])) + (((sctx->t + 9*(0+2*siY))+6)[2] )))); | |||||
| 360 | ELL_3V_LERP(gym, alpha, sctx->grad + 3*(0+2*siY),((gym)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siY))[0]) - ( (sctx->grad + 3*(0+2*siY))[0])) + ((sctx->grad + 3*(0+2 *siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(1+2* siY))[1]) - ((sctx->grad + 3*(0+2*siY))[1])) + ((sctx-> grad + 3*(0+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad + 3*(1+2*siY))[2]) - ((sctx->grad + 3*(0+2*siY))[2])) + ( (sctx->grad + 3*(0+2*siY))[2]))) | |||||
| 361 | sctx->grad + 3*(1+2*siY))((gym)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siY))[0]) - ( (sctx->grad + 3*(0+2*siY))[0])) + ((sctx->grad + 3*(0+2 *siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(1+2* siY))[1]) - ((sctx->grad + 3*(0+2*siY))[1])) + ((sctx-> grad + 3*(0+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad + 3*(1+2*siY))[2]) - ((sctx->grad + 3*(0+2*siY))[2])) + ( (sctx->grad + 3*(0+2*siY))[2]))); | |||||
| 362 | } | |||||
| 363 | if (yi==sy-1) { | |||||
| 364 | ELL_3M_COPY(Typ, T)((((Typ)+0)[0] = ((T)+0)[0], ((Typ)+0)[1] = ((T)+0)[1], ((Typ )+0)[2] = ((T)+0)[2]), (((Typ)+3)[0] = ((T)+3)[0], ((Typ)+3)[ 1] = ((T)+3)[1], ((Typ)+3)[2] = ((T)+3)[2]), (((Typ)+6)[0] = ( (T)+6)[0], ((Typ)+6)[1] = ((T)+6)[1], ((Typ)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gyp, g)((gyp)[0] = (g)[0], (gyp)[1] = (g)[1], (gyp)[2] = (g)[2]); | |||||
| 365 | } else { | |||||
| 366 | ELL_3M_LERP(Typ, alpha, sctx->t + 9*(0+2*siy), sctx->t + 9*(1+2*siy))((((Typ)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+0 )[0]) - (((sctx->t + 9*(0+2*siy))+0)[0])) + (((sctx->t + 9*(0+2*siy))+0)[0])), ((Typ)+0)[1] = ((((alpha)))*((((sctx-> t + 9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*siy))+0)[1]) ) + (((sctx->t + 9*(0+2*siy))+0)[1])), ((Typ)+0)[2] = (((( alpha)))*((((sctx->t + 9*(1+2*siy))+0)[2]) - (((sctx->t + 9*(0+2*siy))+0)[2])) + (((sctx->t + 9*(0+2*siy))+0)[2]) )), (((Typ)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy) )+3)[0]) - (((sctx->t + 9*(0+2*siy))+3)[0])) + (((sctx-> t + 9*(0+2*siy))+3)[0])), ((Typ)+3)[1] = ((((alpha)))*((((sctx ->t + 9*(1+2*siy))+3)[1]) - (((sctx->t + 9*(0+2*siy))+3 )[1])) + (((sctx->t + 9*(0+2*siy))+3)[1])), ((Typ)+3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+3)[2]) - (((sctx-> t + 9*(0+2*siy))+3)[2])) + (((sctx->t + 9*(0+2*siy))+3)[2] ))), (((Typ)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy ))+6)[0]) - (((sctx->t + 9*(0+2*siy))+6)[0])) + (((sctx-> t + 9*(0+2*siy))+6)[0])), ((Typ)+6)[1] = ((((alpha)))*((((sctx ->t + 9*(1+2*siy))+6)[1]) - (((sctx->t + 9*(0+2*siy))+6 )[1])) + (((sctx->t + 9*(0+2*siy))+6)[1])), ((Typ)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+6)[2]) - (((sctx-> t + 9*(0+2*siy))+6)[2])) + (((sctx->t + 9*(0+2*siy))+6)[2] )))); | |||||
| 367 | ELL_3V_LERP(gyp, alpha, sctx->grad + 3*(0+2*siy),((gyp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siy))[0]) - ( (sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3*(0+2 *siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(1+2* siy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx-> grad + 3*(0+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(0+2*siy))[2])) + ( (sctx->grad + 3*(0+2*siy))[2]))) | |||||
| 368 | sctx->grad + 3*(1+2*siy))((gyp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siy))[0]) - ( (sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3*(0+2 *siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(1+2* siy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx-> grad + 3*(0+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(0+2*siy))[2])) + ( (sctx->grad + 3*(0+2*siy))[2]))); | |||||
| 369 | } | |||||
| 370 | if (yi!=0 && yi!=sy-1) { | |||||
| 371 | ELL_3M_SCALE(Tym, 0.5, Tym)((((Tym)+0)[0] = ((0.5))*((Tym)+0)[0], ((Tym)+0)[1] = ((0.5)) *((Tym)+0)[1], ((Tym)+0)[2] = ((0.5))*((Tym)+0)[2]), (((Tym)+ 3)[0] = ((0.5))*((Tym)+3)[0], ((Tym)+3)[1] = ((0.5))*((Tym)+3 )[1], ((Tym)+3)[2] = ((0.5))*((Tym)+3)[2]), (((Tym)+6)[0] = ( (0.5))*((Tym)+6)[0], ((Tym)+6)[1] = ((0.5))*((Tym)+6)[1], ((Tym )+6)[2] = ((0.5))*((Tym)+6)[2])); ELL_3M_SCALE(Typ, 0.5, Typ)((((Typ)+0)[0] = ((0.5))*((Typ)+0)[0], ((Typ)+0)[1] = ((0.5)) *((Typ)+0)[1], ((Typ)+0)[2] = ((0.5))*((Typ)+0)[2]), (((Typ)+ 3)[0] = ((0.5))*((Typ)+3)[0], ((Typ)+3)[1] = ((0.5))*((Typ)+3 )[1], ((Typ)+3)[2] = ((0.5))*((Typ)+3)[2]), (((Typ)+6)[0] = ( (0.5))*((Typ)+6)[0], ((Typ)+6)[1] = ((0.5))*((Typ)+6)[1], ((Typ )+6)[2] = ((0.5))*((Typ)+6)[2])); | |||||
| 372 | ELL_3V_SCALE(gym, 0.5, gym)((gym)[0] = (0.5)*(gym)[0], (gym)[1] = (0.5)*(gym)[1], (gym)[ 2] = (0.5)*(gym)[2]); ELL_3V_SCALE(gyp, 0.5, gyp)((gyp)[0] = (0.5)*(gyp)[0], (gyp)[1] = (0.5)*(gyp)[1], (gyp)[ 2] = (0.5)*(gyp)[2]); | |||||
| 373 | } | |||||
| 374 | if (bag->zi>0 && bag->zi<sz-2) { | |||||
| 375 | ELL_3M_LERP(Tzm, alpha, sctx->tcontext + 9*(0+2*si),((((Tzm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*si))+0) [0]) - (((sctx->tcontext + 9*(0+2*si))+0)[0])) + (((sctx-> tcontext + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((((alpha)))*( (((sctx->t + 9*(0+2*si))+0)[1]) - (((sctx->tcontext + 9 *(0+2*si))+0)[1])) + (((sctx->tcontext + 9*(0+2*si))+0)[1] )), ((Tzm)+0)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*si))+ 0)[2]) - (((sctx->tcontext + 9*(0+2*si))+0)[2])) + (((sctx ->tcontext + 9*(0+2*si))+0)[2]))), (((Tzm)+3)[0] = ((((alpha )))*((((sctx->t + 9*(0+2*si))+3)[0]) - (((sctx->tcontext + 9*(0+2*si))+3)[0])) + (((sctx->tcontext + 9*(0+2*si))+3 )[0])), ((Tzm)+3)[1] = ((((alpha)))*((((sctx->t + 9*(0+2*si ))+3)[1]) - (((sctx->tcontext + 9*(0+2*si))+3)[1])) + (((sctx ->tcontext + 9*(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha )))*((((sctx->t + 9*(0+2*si))+3)[2]) - (((sctx->tcontext + 9*(0+2*si))+3)[2])) + (((sctx->tcontext + 9*(0+2*si))+3 )[2]))), (((Tzm)+6)[0] = ((((alpha)))*((((sctx->t + 9*(0+2 *si))+6)[0]) - (((sctx->tcontext + 9*(0+2*si))+6)[0])) + ( ((sctx->tcontext + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = ((( (alpha)))*((((sctx->t + 9*(0+2*si))+6)[1]) - (((sctx->tcontext + 9*(0+2*si))+6)[1])) + (((sctx->tcontext + 9*(0+2*si))+6 )[1])), ((Tzm)+6)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*si ))+6)[2]) - (((sctx->tcontext + 9*(0+2*si))+6)[2])) + (((sctx ->tcontext + 9*(0+2*si))+6)[2])))) | |||||
| 376 | sctx->t + 9*(0+2*si))((((Tzm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*si))+0) [0]) - (((sctx->tcontext + 9*(0+2*si))+0)[0])) + (((sctx-> tcontext + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((((alpha)))*( (((sctx->t + 9*(0+2*si))+0)[1]) - (((sctx->tcontext + 9 *(0+2*si))+0)[1])) + (((sctx->tcontext + 9*(0+2*si))+0)[1] )), ((Tzm)+0)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*si))+ 0)[2]) - (((sctx->tcontext + 9*(0+2*si))+0)[2])) + (((sctx ->tcontext + 9*(0+2*si))+0)[2]))), (((Tzm)+3)[0] = ((((alpha )))*((((sctx->t + 9*(0+2*si))+3)[0]) - (((sctx->tcontext + 9*(0+2*si))+3)[0])) + (((sctx->tcontext + 9*(0+2*si))+3 )[0])), ((Tzm)+3)[1] = ((((alpha)))*((((sctx->t + 9*(0+2*si ))+3)[1]) - (((sctx->tcontext + 9*(0+2*si))+3)[1])) + (((sctx ->tcontext + 9*(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha )))*((((sctx->t + 9*(0+2*si))+3)[2]) - (((sctx->tcontext + 9*(0+2*si))+3)[2])) + (((sctx->tcontext + 9*(0+2*si))+3 )[2]))), (((Tzm)+6)[0] = ((((alpha)))*((((sctx->t + 9*(0+2 *si))+6)[0]) - (((sctx->tcontext + 9*(0+2*si))+6)[0])) + ( ((sctx->tcontext + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = ((( (alpha)))*((((sctx->t + 9*(0+2*si))+6)[1]) - (((sctx->tcontext + 9*(0+2*si))+6)[1])) + (((sctx->tcontext + 9*(0+2*si))+6 )[1])), ((Tzm)+6)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*si ))+6)[2]) - (((sctx->tcontext + 9*(0+2*si))+6)[2])) + (((sctx ->tcontext + 9*(0+2*si))+6)[2])))); | |||||
| 377 | ELL_3V_LERP(gzm, alpha, sctx->gradcontext + 3*(0+2*si),((gzm)[0] = (((alpha))*(((sctx->grad + 3*(0+2*si))[0]) - ( (sctx->gradcontext + 3*(0+2*si))[0])) + ((sctx->gradcontext + 3*(0+2*si))[0])), (gzm)[1] = (((alpha))*(((sctx->grad + 3*(0+2*si))[1]) - ((sctx->gradcontext + 3*(0+2*si))[1])) + ((sctx->gradcontext + 3*(0+2*si))[1])), (gzm)[2] = (((alpha ))*(((sctx->grad + 3*(0+2*si))[2]) - ((sctx->gradcontext + 3*(0+2*si))[2])) + ((sctx->gradcontext + 3*(0+2*si))[2] ))) | |||||
| 378 | sctx->grad + 3*(0+2*si))((gzm)[0] = (((alpha))*(((sctx->grad + 3*(0+2*si))[0]) - ( (sctx->gradcontext + 3*(0+2*si))[0])) + ((sctx->gradcontext + 3*(0+2*si))[0])), (gzm)[1] = (((alpha))*(((sctx->grad + 3*(0+2*si))[1]) - ((sctx->gradcontext + 3*(0+2*si))[1])) + ((sctx->gradcontext + 3*(0+2*si))[1])), (gzm)[2] = (((alpha ))*(((sctx->grad + 3*(0+2*si))[2]) - ((sctx->gradcontext + 3*(0+2*si))[2])) + ((sctx->gradcontext + 3*(0+2*si))[2] ))); | |||||
| 379 | ELL_3M_LERP(Tzp, alpha, sctx->t + 9*(1+2*si),((((Tzp)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* si))+0)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx-> t + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((((alpha)))*((((sctx ->tcontext + 9*(1+2*si))+0)[1]) - (((sctx->t + 9*(1+2*si ))+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Tzp)+0)[2 ] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*si))+0)[2]) - (((sctx->t + 9*(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2 *si))+0)[2]))), (((Tzp)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*si))+3)[0]) - (((sctx->t + 9*(1+2*si))+3)[0])) + (((sctx->t + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = ((((alpha )))*((((sctx->tcontext + 9*(1+2*si))+3)[1]) - (((sctx-> t + 9*(1+2*si))+3)[1])) + (((sctx->t + 9*(1+2*si))+3)[1])) , ((Tzp)+3)[2] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* si))+3)[2]) - (((sctx->t + 9*(1+2*si))+3)[2])) + (((sctx-> t + 9*(1+2*si))+3)[2]))), (((Tzp)+6)[0] = ((((alpha)))*((((sctx ->tcontext + 9*(1+2*si))+6)[0]) - (((sctx->t + 9*(1+2*si ))+6)[0])) + (((sctx->t + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1 ] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*si))+6)[1]) - (((sctx->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9*(1+2 *si))+6)[1])), ((Tzp)+6)[2] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*si))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + (((sctx->t + 9*(1+2*si))+6)[2])))) | |||||
| 380 | sctx->tcontext + 9*(1+2*si))((((Tzp)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* si))+0)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx-> t + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((((alpha)))*((((sctx ->tcontext + 9*(1+2*si))+0)[1]) - (((sctx->t + 9*(1+2*si ))+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Tzp)+0)[2 ] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*si))+0)[2]) - (((sctx->t + 9*(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2 *si))+0)[2]))), (((Tzp)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*si))+3)[0]) - (((sctx->t + 9*(1+2*si))+3)[0])) + (((sctx->t + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = ((((alpha )))*((((sctx->tcontext + 9*(1+2*si))+3)[1]) - (((sctx-> t + 9*(1+2*si))+3)[1])) + (((sctx->t + 9*(1+2*si))+3)[1])) , ((Tzp)+3)[2] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* si))+3)[2]) - (((sctx->t + 9*(1+2*si))+3)[2])) + (((sctx-> t + 9*(1+2*si))+3)[2]))), (((Tzp)+6)[0] = ((((alpha)))*((((sctx ->tcontext + 9*(1+2*si))+6)[0]) - (((sctx->t + 9*(1+2*si ))+6)[0])) + (((sctx->t + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1 ] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*si))+6)[1]) - (((sctx->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9*(1+2 *si))+6)[1])), ((Tzp)+6)[2] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*si))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + (((sctx->t + 9*(1+2*si))+6)[2])))); | |||||
| 381 | ELL_3V_LERP(gzp, alpha, sctx->grad + 3*(1+2*si),((gzp)[0] = (((alpha))*(((sctx->gradcontext + 3*(1+2*si))[ 0]) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3 *(1+2*si))[0])), (gzp)[1] = (((alpha))*(((sctx->gradcontext + 3*(1+2*si))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx ->grad + 3*(1+2*si))[1])), (gzp)[2] = (((alpha))*(((sctx-> gradcontext + 3*(1+2*si))[2]) - ((sctx->grad + 3*(1+2*si)) [2])) + ((sctx->grad + 3*(1+2*si))[2]))) | |||||
| 382 | sctx->gradcontext + 3*(1+2*si))((gzp)[0] = (((alpha))*(((sctx->gradcontext + 3*(1+2*si))[ 0]) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3 *(1+2*si))[0])), (gzp)[1] = (((alpha))*(((sctx->gradcontext + 3*(1+2*si))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx ->grad + 3*(1+2*si))[1])), (gzp)[2] = (((alpha))*(((sctx-> gradcontext + 3*(1+2*si))[2]) - ((sctx->grad + 3*(1+2*si)) [2])) + ((sctx->grad + 3*(1+2*si))[2]))); | |||||
| 383 | ELL_3M_SCALE(Tzm, 0.5, Tzm)((((Tzm)+0)[0] = ((0.5))*((Tzm)+0)[0], ((Tzm)+0)[1] = ((0.5)) *((Tzm)+0)[1], ((Tzm)+0)[2] = ((0.5))*((Tzm)+0)[2]), (((Tzm)+ 3)[0] = ((0.5))*((Tzm)+3)[0], ((Tzm)+3)[1] = ((0.5))*((Tzm)+3 )[1], ((Tzm)+3)[2] = ((0.5))*((Tzm)+3)[2]), (((Tzm)+6)[0] = ( (0.5))*((Tzm)+6)[0], ((Tzm)+6)[1] = ((0.5))*((Tzm)+6)[1], ((Tzm )+6)[2] = ((0.5))*((Tzm)+6)[2])); ELL_3M_SCALE(Tzp, 0.5, Tzp)((((Tzp)+0)[0] = ((0.5))*((Tzp)+0)[0], ((Tzp)+0)[1] = ((0.5)) *((Tzp)+0)[1], ((Tzp)+0)[2] = ((0.5))*((Tzp)+0)[2]), (((Tzp)+ 3)[0] = ((0.5))*((Tzp)+3)[0], ((Tzp)+3)[1] = ((0.5))*((Tzp)+3 )[1], ((Tzp)+3)[2] = ((0.5))*((Tzp)+3)[2]), (((Tzp)+6)[0] = ( (0.5))*((Tzp)+6)[0], ((Tzp)+6)[1] = ((0.5))*((Tzp)+6)[1], ((Tzp )+6)[2] = ((0.5))*((Tzp)+6)[2])); | |||||
| 384 | ELL_3V_SCALE(gzm, 0.5, gzm)((gzm)[0] = (0.5)*(gzm)[0], (gzm)[1] = (0.5)*(gzm)[1], (gzm)[ 2] = (0.5)*(gzm)[2]); ELL_3V_SCALE(gzp, 0.5, gzp)((gzp)[0] = (0.5)*(gzp)[0], (gzp)[1] = (0.5)*(gzp)[1], (gzp)[ 2] = (0.5)*(gzp)[2]); | |||||
| 385 | } else { | |||||
| 386 | ELL_3M_COPY(Tzm, sctx->t + 9*(0+2*si))((((Tzm)+0)[0] = ((sctx->t + 9*(0+2*si))+0)[0], ((Tzm)+0)[ 1] = ((sctx->t + 9*(0+2*si))+0)[1], ((Tzm)+0)[2] = ((sctx-> t + 9*(0+2*si))+0)[2]), (((Tzm)+3)[0] = ((sctx->t + 9*(0+2 *si))+3)[0], ((Tzm)+3)[1] = ((sctx->t + 9*(0+2*si))+3)[1], ((Tzm)+3)[2] = ((sctx->t + 9*(0+2*si))+3)[2]), (((Tzm)+6) [0] = ((sctx->t + 9*(0+2*si))+6)[0], ((Tzm)+6)[1] = ((sctx ->t + 9*(0+2*si))+6)[1], ((Tzm)+6)[2] = ((sctx->t + 9*( 0+2*si))+6)[2])); | |||||
| 387 | ELL_3V_COPY(gzm, sctx->grad + 3*(0+2*si))((gzm)[0] = (sctx->grad + 3*(0+2*si))[0], (gzm)[1] = (sctx ->grad + 3*(0+2*si))[1], (gzm)[2] = (sctx->grad + 3*(0+ 2*si))[2]); | |||||
| 388 | ELL_3M_COPY(Tzp, sctx->t + 9*(1+2*si))((((Tzp)+0)[0] = ((sctx->t + 9*(1+2*si))+0)[0], ((Tzp)+0)[ 1] = ((sctx->t + 9*(1+2*si))+0)[1], ((Tzp)+0)[2] = ((sctx-> t + 9*(1+2*si))+0)[2]), (((Tzp)+3)[0] = ((sctx->t + 9*(1+2 *si))+3)[0], ((Tzp)+3)[1] = ((sctx->t + 9*(1+2*si))+3)[1], ((Tzp)+3)[2] = ((sctx->t + 9*(1+2*si))+3)[2]), (((Tzp)+6) [0] = ((sctx->t + 9*(1+2*si))+6)[0], ((Tzp)+6)[1] = ((sctx ->t + 9*(1+2*si))+6)[1], ((Tzp)+6)[2] = ((sctx->t + 9*( 1+2*si))+6)[2])); | |||||
| 389 | ELL_3V_COPY(gzp, sctx->grad + 3*(1+2*si))((gzp)[0] = (sctx->grad + 3*(1+2*si))[0], (gzp)[1] = (sctx ->grad + 3*(1+2*si))[1], (gzp)[2] = (sctx->grad + 3*(1+ 2*si))[2]); | |||||
| 390 | } | |||||
| 391 | computeGradientLin(res, T, g, | |||||
| 392 | Txm, gxm, Txp, gxp, | |||||
| 393 | Tym, gym, Typ, gyp, | |||||
| 394 | Tzm, gzm, Tzp, gzp); | |||||
| 395 | break; | |||||
| 396 | case 3: | |||||
| 397 | ELL_3M_LERP(T, alpha, sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*six))((((T)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+0)[ 0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx->t + 9 *(1+2*si))+0)[0])), ((T)+0)[1] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+0)[1]) - (((sctx->t + 9*(1+2*si))+0)[1])) + ( ((sctx->t + 9*(1+2*si))+0)[1])), ((T)+0)[2] = ((((alpha))) *((((sctx->t + 9*(1+2*six))+0)[2]) - (((sctx->t + 9*(1+ 2*si))+0)[2])) + (((sctx->t + 9*(1+2*si))+0)[2]))), (((T)+ 3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+3)[0]) - ( ((sctx->t + 9*(1+2*si))+3)[0])) + (((sctx->t + 9*(1+2*si ))+3)[0])), ((T)+3)[1] = ((((alpha)))*((((sctx->t + 9*(1+2 *six))+3)[1]) - (((sctx->t + 9*(1+2*si))+3)[1])) + (((sctx ->t + 9*(1+2*si))+3)[1])), ((T)+3)[2] = ((((alpha)))*((((sctx ->t + 9*(1+2*six))+3)[2]) - (((sctx->t + 9*(1+2*si))+3) [2])) + (((sctx->t + 9*(1+2*si))+3)[2]))), (((T)+6)[0] = ( (((alpha)))*((((sctx->t + 9*(1+2*six))+6)[0]) - (((sctx-> t + 9*(1+2*si))+6)[0])) + (((sctx->t + 9*(1+2*si))+6)[0])) , ((T)+6)[1] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+6)[ 1]) - (((sctx->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9 *(1+2*si))+6)[1])), ((T)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + ( ((sctx->t + 9*(1+2*si))+6)[2])))); | |||||
| 398 | ELL_3V_LERP(g, alpha, sctx->grad + 3*(1+2*si), sctx->grad + 3*(1+2*six))((g)[0] = (((alpha))*(((sctx->grad + 3*(1+2*six))[0]) - (( sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*(1+2*si ))[0])), (g)[1] = (((alpha))*(((sctx->grad + 3*(1+2*six))[ 1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx->grad + 3 *(1+2*si))[1])), (g)[2] = (((alpha))*(((sctx->grad + 3*(1+ 2*six))[2]) - ((sctx->grad + 3*(1+2*si))[2])) + ((sctx-> grad + 3*(1+2*si))[2]))); | |||||
| 399 | ELL_3M_LERP(Tzm, alpha, sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*six))((((Tzm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*six))+0 )[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->t + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((((alpha)))*((((sctx-> t + 9*(0+2*six))+0)[1]) - (((sctx->t + 9*(0+2*si))+0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Tzm)+0)[2] = ((((alpha )))*((((sctx->t + 9*(0+2*six))+0)[2]) - (((sctx->t + 9* (0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si))+0)[2]))), ((( Tzm)+3)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*six))+3)[0] ) - (((sctx->t + 9*(0+2*si))+3)[0])) + (((sctx->t + 9*( 0+2*si))+3)[0])), ((Tzm)+3)[1] = ((((alpha)))*((((sctx->t + 9*(0+2*six))+3)[1]) - (((sctx->t + 9*(0+2*si))+3)[1])) + ( ((sctx->t + 9*(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha) ))*((((sctx->t + 9*(0+2*six))+3)[2]) - (((sctx->t + 9*( 0+2*si))+3)[2])) + (((sctx->t + 9*(0+2*si))+3)[2]))), (((Tzm )+6)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*six))+6)[0]) - (((sctx->t + 9*(0+2*si))+6)[0])) + (((sctx->t + 9*(0+2 *si))+6)[0])), ((Tzm)+6)[1] = ((((alpha)))*((((sctx->t + 9 *(0+2*six))+6)[1]) - (((sctx->t + 9*(0+2*si))+6)[1])) + (( (sctx->t + 9*(0+2*si))+6)[1])), ((Tzm)+6)[2] = ((((alpha)) )*((((sctx->t + 9*(0+2*six))+6)[2]) - (((sctx->t + 9*(0 +2*si))+6)[2])) + (((sctx->t + 9*(0+2*si))+6)[2])))); | |||||
| 400 | ELL_3V_LERP(gzm, alpha, sctx->grad + 3*(0+2*si), sctx->grad + 3*(0+2*six))((gzm)[0] = (((alpha))*(((sctx->grad + 3*(0+2*six))[0]) - ( (sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*(0+2* si))[0])), (gzm)[1] = (((alpha))*(((sctx->grad + 3*(0+2*six ))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx->grad + 3*(0+2*si))[1])), (gzm)[2] = (((alpha))*(((sctx->grad + 3*(0+2*six))[2]) - ((sctx->grad + 3*(0+2*si))[2])) + ((sctx ->grad + 3*(0+2*si))[2]))); | |||||
| 401 | if (bag->zi==sz-2) { | |||||
| 402 | ELL_3M_COPY(Tzp, T)((((Tzp)+0)[0] = ((T)+0)[0], ((Tzp)+0)[1] = ((T)+0)[1], ((Tzp )+0)[2] = ((T)+0)[2]), (((Tzp)+3)[0] = ((T)+3)[0], ((Tzp)+3)[ 1] = ((T)+3)[1], ((Tzp)+3)[2] = ((T)+3)[2]), (((Tzp)+6)[0] = ( (T)+6)[0], ((Tzp)+6)[1] = ((T)+6)[1], ((Tzp)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gzp, g)((gzp)[0] = (g)[0], (gzp)[1] = (g)[1], (gzp)[2] = (g)[2]); | |||||
| 403 | } else { | |||||
| 404 | ELL_3M_LERP(Tzp, alpha, sctx->tcontext + 9*(1+2*si),((((Tzp)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* six))+0)[0]) - (((sctx->tcontext + 9*(1+2*si))+0)[0])) + ( ((sctx->tcontext + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(1+2*six))+0)[1]) - (((sctx ->tcontext + 9*(1+2*si))+0)[1])) + (((sctx->tcontext + 9 *(1+2*si))+0)[1])), ((Tzp)+0)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(1+2*six))+0)[2]) - (((sctx->tcontext + 9*(1+ 2*si))+0)[2])) + (((sctx->tcontext + 9*(1+2*si))+0)[2]))), (((Tzp)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* six))+3)[0]) - (((sctx->tcontext + 9*(1+2*si))+3)[0])) + ( ((sctx->tcontext + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(1+2*six))+3)[1]) - (((sctx ->tcontext + 9*(1+2*si))+3)[1])) + (((sctx->tcontext + 9 *(1+2*si))+3)[1])), ((Tzp)+3)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(1+2*six))+3)[2]) - (((sctx->tcontext + 9*(1+ 2*si))+3)[2])) + (((sctx->tcontext + 9*(1+2*si))+3)[2]))), (((Tzp)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* six))+6)[0]) - (((sctx->tcontext + 9*(1+2*si))+6)[0])) + ( ((sctx->tcontext + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(1+2*six))+6)[1]) - (((sctx ->tcontext + 9*(1+2*si))+6)[1])) + (((sctx->tcontext + 9 *(1+2*si))+6)[1])), ((Tzp)+6)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(1+2*six))+6)[2]) - (((sctx->tcontext + 9*(1+ 2*si))+6)[2])) + (((sctx->tcontext + 9*(1+2*si))+6)[2])))) | |||||
| 405 | sctx->tcontext + 9*(1+2*six))((((Tzp)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* six))+0)[0]) - (((sctx->tcontext + 9*(1+2*si))+0)[0])) + ( ((sctx->tcontext + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(1+2*six))+0)[1]) - (((sctx ->tcontext + 9*(1+2*si))+0)[1])) + (((sctx->tcontext + 9 *(1+2*si))+0)[1])), ((Tzp)+0)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(1+2*six))+0)[2]) - (((sctx->tcontext + 9*(1+ 2*si))+0)[2])) + (((sctx->tcontext + 9*(1+2*si))+0)[2]))), (((Tzp)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* six))+3)[0]) - (((sctx->tcontext + 9*(1+2*si))+3)[0])) + ( ((sctx->tcontext + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(1+2*six))+3)[1]) - (((sctx ->tcontext + 9*(1+2*si))+3)[1])) + (((sctx->tcontext + 9 *(1+2*si))+3)[1])), ((Tzp)+3)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(1+2*six))+3)[2]) - (((sctx->tcontext + 9*(1+ 2*si))+3)[2])) + (((sctx->tcontext + 9*(1+2*si))+3)[2]))), (((Tzp)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* six))+6)[0]) - (((sctx->tcontext + 9*(1+2*si))+6)[0])) + ( ((sctx->tcontext + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(1+2*six))+6)[1]) - (((sctx ->tcontext + 9*(1+2*si))+6)[1])) + (((sctx->tcontext + 9 *(1+2*si))+6)[1])), ((Tzp)+6)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(1+2*six))+6)[2]) - (((sctx->tcontext + 9*(1+ 2*si))+6)[2])) + (((sctx->tcontext + 9*(1+2*si))+6)[2])))); | |||||
| 406 | ELL_3V_LERP(gzp, alpha, sctx->gradcontext + 3*(1+2*si),((gzp)[0] = (((alpha))*(((sctx->gradcontext + 3*(1+2*six)) [0]) - ((sctx->gradcontext + 3*(1+2*si))[0])) + ((sctx-> gradcontext + 3*(1+2*si))[0])), (gzp)[1] = (((alpha))*(((sctx ->gradcontext + 3*(1+2*six))[1]) - ((sctx->gradcontext + 3*(1+2*si))[1])) + ((sctx->gradcontext + 3*(1+2*si))[1])) , (gzp)[2] = (((alpha))*(((sctx->gradcontext + 3*(1+2*six) )[2]) - ((sctx->gradcontext + 3*(1+2*si))[2])) + ((sctx-> gradcontext + 3*(1+2*si))[2]))) | |||||
| 407 | sctx->gradcontext + 3*(1+2*six))((gzp)[0] = (((alpha))*(((sctx->gradcontext + 3*(1+2*six)) [0]) - ((sctx->gradcontext + 3*(1+2*si))[0])) + ((sctx-> gradcontext + 3*(1+2*si))[0])), (gzp)[1] = (((alpha))*(((sctx ->gradcontext + 3*(1+2*six))[1]) - ((sctx->gradcontext + 3*(1+2*si))[1])) + ((sctx->gradcontext + 3*(1+2*si))[1])) , (gzp)[2] = (((alpha))*(((sctx->gradcontext + 3*(1+2*six) )[2]) - ((sctx->gradcontext + 3*(1+2*si))[2])) + ((sctx-> gradcontext + 3*(1+2*si))[2]))); | |||||
| 408 | ELL_3M_SCALE(Tzm, 0.5, Tzm)((((Tzm)+0)[0] = ((0.5))*((Tzm)+0)[0], ((Tzm)+0)[1] = ((0.5)) *((Tzm)+0)[1], ((Tzm)+0)[2] = ((0.5))*((Tzm)+0)[2]), (((Tzm)+ 3)[0] = ((0.5))*((Tzm)+3)[0], ((Tzm)+3)[1] = ((0.5))*((Tzm)+3 )[1], ((Tzm)+3)[2] = ((0.5))*((Tzm)+3)[2]), (((Tzm)+6)[0] = ( (0.5))*((Tzm)+6)[0], ((Tzm)+6)[1] = ((0.5))*((Tzm)+6)[1], ((Tzm )+6)[2] = ((0.5))*((Tzm)+6)[2])); ELL_3M_SCALE(Tzp, 0.5, Tzp)((((Tzp)+0)[0] = ((0.5))*((Tzp)+0)[0], ((Tzp)+0)[1] = ((0.5)) *((Tzp)+0)[1], ((Tzp)+0)[2] = ((0.5))*((Tzp)+0)[2]), (((Tzp)+ 3)[0] = ((0.5))*((Tzp)+3)[0], ((Tzp)+3)[1] = ((0.5))*((Tzp)+3 )[1], ((Tzp)+3)[2] = ((0.5))*((Tzp)+3)[2]), (((Tzp)+6)[0] = ( (0.5))*((Tzp)+6)[0], ((Tzp)+6)[1] = ((0.5))*((Tzp)+6)[1], ((Tzp )+6)[2] = ((0.5))*((Tzp)+6)[2])); | |||||
| 409 | ELL_3V_SCALE(gzm, 0.5, gzm)((gzm)[0] = (0.5)*(gzm)[0], (gzm)[1] = (0.5)*(gzm)[1], (gzm)[ 2] = (0.5)*(gzm)[2]); ELL_3V_SCALE(gzp, 0.5, gzp)((gzp)[0] = (0.5)*(gzp)[0], (gzp)[1] = (0.5)*(gzp)[1], (gzp)[ 2] = (0.5)*(gzp)[2]); | |||||
| 410 | } | |||||
| 411 | if (xi>0 && xi<sx-2) { | |||||
| 412 | unsigned int sixx = xi + 2 + sx*yi; | |||||
| 413 | ELL_3M_LERP(Txm, alpha, sctx->t + 9*(1+2*siX), sctx->t + 9*(1+2*si))((((Txm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+0) [0]) - (((sctx->t + 9*(1+2*siX))+0)[0])) + (((sctx->t + 9*(1+2*siX))+0)[0])), ((Txm)+0)[1] = ((((alpha)))*((((sctx-> t + 9*(1+2*si))+0)[1]) - (((sctx->t + 9*(1+2*siX))+0)[1])) + (((sctx->t + 9*(1+2*siX))+0)[1])), ((Txm)+0)[2] = ((((alpha )))*((((sctx->t + 9*(1+2*si))+0)[2]) - (((sctx->t + 9*( 1+2*siX))+0)[2])) + (((sctx->t + 9*(1+2*siX))+0)[2]))), (( (Txm)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+3)[0] ) - (((sctx->t + 9*(1+2*siX))+3)[0])) + (((sctx->t + 9* (1+2*siX))+3)[0])), ((Txm)+3)[1] = ((((alpha)))*((((sctx-> t + 9*(1+2*si))+3)[1]) - (((sctx->t + 9*(1+2*siX))+3)[1])) + (((sctx->t + 9*(1+2*siX))+3)[1])), ((Txm)+3)[2] = ((((alpha )))*((((sctx->t + 9*(1+2*si))+3)[2]) - (((sctx->t + 9*( 1+2*siX))+3)[2])) + (((sctx->t + 9*(1+2*siX))+3)[2]))), (( (Txm)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+6)[0] ) - (((sctx->t + 9*(1+2*siX))+6)[0])) + (((sctx->t + 9* (1+2*siX))+6)[0])), ((Txm)+6)[1] = ((((alpha)))*((((sctx-> t + 9*(1+2*si))+6)[1]) - (((sctx->t + 9*(1+2*siX))+6)[1])) + (((sctx->t + 9*(1+2*siX))+6)[1])), ((Txm)+6)[2] = ((((alpha )))*((((sctx->t + 9*(1+2*si))+6)[2]) - (((sctx->t + 9*( 1+2*siX))+6)[2])) + (((sctx->t + 9*(1+2*siX))+6)[2])))); | |||||
| 414 | ELL_3V_LERP(gxm, alpha, sctx->grad + 3*(1+2*siX),((gxm)[0] = (((alpha))*(((sctx->grad + 3*(1+2*si))[0]) - ( (sctx->grad + 3*(1+2*siX))[0])) + ((sctx->grad + 3*(1+2 *siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(1+2* si))[1]) - ((sctx->grad + 3*(1+2*siX))[1])) + ((sctx->grad + 3*(1+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad + 3*(1+2*si))[2]) - ((sctx->grad + 3*(1+2*siX))[2])) + ((sctx ->grad + 3*(1+2*siX))[2]))) | |||||
| 415 | sctx->grad + 3*(1+2*si))((gxm)[0] = (((alpha))*(((sctx->grad + 3*(1+2*si))[0]) - ( (sctx->grad + 3*(1+2*siX))[0])) + ((sctx->grad + 3*(1+2 *siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(1+2* si))[1]) - ((sctx->grad + 3*(1+2*siX))[1])) + ((sctx->grad + 3*(1+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad + 3*(1+2*si))[2]) - ((sctx->grad + 3*(1+2*siX))[2])) + ((sctx ->grad + 3*(1+2*siX))[2]))); | |||||
| 416 | ELL_3M_LERP(Txp, alpha, sctx->t + 9*(1+2*six), sctx->t + 9*(1+2*sixx))((((Txp)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*sixx))+ 0)[0]) - (((sctx->t + 9*(1+2*six))+0)[0])) + (((sctx->t + 9*(1+2*six))+0)[0])), ((Txp)+0)[1] = ((((alpha)))*((((sctx ->t + 9*(1+2*sixx))+0)[1]) - (((sctx->t + 9*(1+2*six))+ 0)[1])) + (((sctx->t + 9*(1+2*six))+0)[1])), ((Txp)+0)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixx))+0)[2]) - (((sctx ->t + 9*(1+2*six))+0)[2])) + (((sctx->t + 9*(1+2*six))+ 0)[2]))), (((Txp)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+ 2*sixx))+3)[0]) - (((sctx->t + 9*(1+2*six))+3)[0])) + (((sctx ->t + 9*(1+2*six))+3)[0])), ((Txp)+3)[1] = ((((alpha)))*(( ((sctx->t + 9*(1+2*sixx))+3)[1]) - (((sctx->t + 9*(1+2* six))+3)[1])) + (((sctx->t + 9*(1+2*six))+3)[1])), ((Txp)+ 3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixx))+3)[2]) - ( ((sctx->t + 9*(1+2*six))+3)[2])) + (((sctx->t + 9*(1+2* six))+3)[2]))), (((Txp)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*sixx))+6)[0]) - (((sctx->t + 9*(1+2*six))+6)[0])) + (((sctx->t + 9*(1+2*six))+6)[0])), ((Txp)+6)[1] = ((((alpha )))*((((sctx->t + 9*(1+2*sixx))+6)[1]) - (((sctx->t + 9 *(1+2*six))+6)[1])) + (((sctx->t + 9*(1+2*six))+6)[1])), ( (Txp)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixx))+6)[ 2]) - (((sctx->t + 9*(1+2*six))+6)[2])) + (((sctx->t + 9 *(1+2*six))+6)[2])))); | |||||
| 417 | ELL_3V_LERP(gxp, alpha, sctx->grad + 3*(1+2*six),((gxp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixx))[0]) - ((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3*(1 +2*six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(1+ 2*sixx))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + ((sctx-> grad + 3*(1+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad + 3*(1+2*sixx))[2]) - ((sctx->grad + 3*(1+2*six))[2])) + ( (sctx->grad + 3*(1+2*six))[2]))) | |||||
| 418 | sctx->grad + 3*(1+2*sixx))((gxp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixx))[0]) - ((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3*(1 +2*six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(1+ 2*sixx))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + ((sctx-> grad + 3*(1+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad + 3*(1+2*sixx))[2]) - ((sctx->grad + 3*(1+2*six))[2])) + ( (sctx->grad + 3*(1+2*six))[2]))); | |||||
| 419 | ELL_3M_SCALE(Txm, 0.5, Txm)((((Txm)+0)[0] = ((0.5))*((Txm)+0)[0], ((Txm)+0)[1] = ((0.5)) *((Txm)+0)[1], ((Txm)+0)[2] = ((0.5))*((Txm)+0)[2]), (((Txm)+ 3)[0] = ((0.5))*((Txm)+3)[0], ((Txm)+3)[1] = ((0.5))*((Txm)+3 )[1], ((Txm)+3)[2] = ((0.5))*((Txm)+3)[2]), (((Txm)+6)[0] = ( (0.5))*((Txm)+6)[0], ((Txm)+6)[1] = ((0.5))*((Txm)+6)[1], ((Txm )+6)[2] = ((0.5))*((Txm)+6)[2])); ELL_3M_SCALE(Txp, 0.5, Txp)((((Txp)+0)[0] = ((0.5))*((Txp)+0)[0], ((Txp)+0)[1] = ((0.5)) *((Txp)+0)[1], ((Txp)+0)[2] = ((0.5))*((Txp)+0)[2]), (((Txp)+ 3)[0] = ((0.5))*((Txp)+3)[0], ((Txp)+3)[1] = ((0.5))*((Txp)+3 )[1], ((Txp)+3)[2] = ((0.5))*((Txp)+3)[2]), (((Txp)+6)[0] = ( (0.5))*((Txp)+6)[0], ((Txp)+6)[1] = ((0.5))*((Txp)+6)[1], ((Txp )+6)[2] = ((0.5))*((Txp)+6)[2])); | |||||
| 420 | ELL_3V_SCALE(gxm, 0.5, gxm)((gxm)[0] = (0.5)*(gxm)[0], (gxm)[1] = (0.5)*(gxm)[1], (gxm)[ 2] = (0.5)*(gxm)[2]); ELL_3V_SCALE(gxp, 0.5, gxp)((gxp)[0] = (0.5)*(gxp)[0], (gxp)[1] = (0.5)*(gxp)[1], (gxp)[ 2] = (0.5)*(gxp)[2]); | |||||
| 421 | } else { | |||||
| 422 | ELL_3M_COPY(Txm, sctx->t + 9*(1+2*si))((((Txm)+0)[0] = ((sctx->t + 9*(1+2*si))+0)[0], ((Txm)+0)[ 1] = ((sctx->t + 9*(1+2*si))+0)[1], ((Txm)+0)[2] = ((sctx-> t + 9*(1+2*si))+0)[2]), (((Txm)+3)[0] = ((sctx->t + 9*(1+2 *si))+3)[0], ((Txm)+3)[1] = ((sctx->t + 9*(1+2*si))+3)[1], ((Txm)+3)[2] = ((sctx->t + 9*(1+2*si))+3)[2]), (((Txm)+6) [0] = ((sctx->t + 9*(1+2*si))+6)[0], ((Txm)+6)[1] = ((sctx ->t + 9*(1+2*si))+6)[1], ((Txm)+6)[2] = ((sctx->t + 9*( 1+2*si))+6)[2])); | |||||
| 423 | ELL_3V_COPY(gxm, sctx->grad + 3*(1+2*si))((gxm)[0] = (sctx->grad + 3*(1+2*si))[0], (gxm)[1] = (sctx ->grad + 3*(1+2*si))[1], (gxm)[2] = (sctx->grad + 3*(1+ 2*si))[2]); | |||||
| 424 | ELL_3M_COPY(Txp, sctx->t + 9*(1+2*six))((((Txp)+0)[0] = ((sctx->t + 9*(1+2*six))+0)[0], ((Txp)+0) [1] = ((sctx->t + 9*(1+2*six))+0)[1], ((Txp)+0)[2] = ((sctx ->t + 9*(1+2*six))+0)[2]), (((Txp)+3)[0] = ((sctx->t + 9 *(1+2*six))+3)[0], ((Txp)+3)[1] = ((sctx->t + 9*(1+2*six)) +3)[1], ((Txp)+3)[2] = ((sctx->t + 9*(1+2*six))+3)[2]), (( (Txp)+6)[0] = ((sctx->t + 9*(1+2*six))+6)[0], ((Txp)+6)[1] = ((sctx->t + 9*(1+2*six))+6)[1], ((Txp)+6)[2] = ((sctx-> t + 9*(1+2*six))+6)[2])); | |||||
| 425 | ELL_3V_COPY(gxp, sctx->grad + 3*(1+2*six))((gxp)[0] = (sctx->grad + 3*(1+2*six))[0], (gxp)[1] = (sctx ->grad + 3*(1+2*six))[1], (gxp)[2] = (sctx->grad + 3*(1 +2*six))[2]); | |||||
| 426 | } | |||||
| 427 | if (yi==0) { | |||||
| 428 | ELL_3M_COPY(Tym, T)((((Tym)+0)[0] = ((T)+0)[0], ((Tym)+0)[1] = ((T)+0)[1], ((Tym )+0)[2] = ((T)+0)[2]), (((Tym)+3)[0] = ((T)+3)[0], ((Tym)+3)[ 1] = ((T)+3)[1], ((Tym)+3)[2] = ((T)+3)[2]), (((Tym)+6)[0] = ( (T)+6)[0], ((Tym)+6)[1] = ((T)+6)[1], ((Tym)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gym, g)((gym)[0] = (g)[0], (gym)[1] = (g)[1], (gym)[2] = (g)[2]); | |||||
| 429 | } else { | |||||
| 430 | ELL_3M_LERP(Tym, alpha, sctx->t + 9*(1+2*siY), sctx->t + 9*(1+2*sixY))((((Tym)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*sixY))+ 0)[0]) - (((sctx->t + 9*(1+2*siY))+0)[0])) + (((sctx->t + 9*(1+2*siY))+0)[0])), ((Tym)+0)[1] = ((((alpha)))*((((sctx ->t + 9*(1+2*sixY))+0)[1]) - (((sctx->t + 9*(1+2*siY))+ 0)[1])) + (((sctx->t + 9*(1+2*siY))+0)[1])), ((Tym)+0)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixY))+0)[2]) - (((sctx ->t + 9*(1+2*siY))+0)[2])) + (((sctx->t + 9*(1+2*siY))+ 0)[2]))), (((Tym)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+ 2*sixY))+3)[0]) - (((sctx->t + 9*(1+2*siY))+3)[0])) + (((sctx ->t + 9*(1+2*siY))+3)[0])), ((Tym)+3)[1] = ((((alpha)))*(( ((sctx->t + 9*(1+2*sixY))+3)[1]) - (((sctx->t + 9*(1+2* siY))+3)[1])) + (((sctx->t + 9*(1+2*siY))+3)[1])), ((Tym)+ 3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixY))+3)[2]) - ( ((sctx->t + 9*(1+2*siY))+3)[2])) + (((sctx->t + 9*(1+2* siY))+3)[2]))), (((Tym)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*sixY))+6)[0]) - (((sctx->t + 9*(1+2*siY))+6)[0])) + (((sctx->t + 9*(1+2*siY))+6)[0])), ((Tym)+6)[1] = ((((alpha )))*((((sctx->t + 9*(1+2*sixY))+6)[1]) - (((sctx->t + 9 *(1+2*siY))+6)[1])) + (((sctx->t + 9*(1+2*siY))+6)[1])), ( (Tym)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixY))+6)[ 2]) - (((sctx->t + 9*(1+2*siY))+6)[2])) + (((sctx->t + 9 *(1+2*siY))+6)[2])))); | |||||
| 431 | ELL_3V_LERP(gym, alpha, sctx->grad + 3*(1+2*siY),((gym)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixY))[0]) - ((sctx->grad + 3*(1+2*siY))[0])) + ((sctx->grad + 3*(1 +2*siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(1+ 2*sixY))[1]) - ((sctx->grad + 3*(1+2*siY))[1])) + ((sctx-> grad + 3*(1+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad + 3*(1+2*sixY))[2]) - ((sctx->grad + 3*(1+2*siY))[2])) + ( (sctx->grad + 3*(1+2*siY))[2]))) | |||||
| 432 | sctx->grad + 3*(1+2*sixY))((gym)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixY))[0]) - ((sctx->grad + 3*(1+2*siY))[0])) + ((sctx->grad + 3*(1 +2*siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(1+ 2*sixY))[1]) - ((sctx->grad + 3*(1+2*siY))[1])) + ((sctx-> grad + 3*(1+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad + 3*(1+2*sixY))[2]) - ((sctx->grad + 3*(1+2*siY))[2])) + ( (sctx->grad + 3*(1+2*siY))[2]))); | |||||
| 433 | } | |||||
| 434 | if (yi==sy-1) { | |||||
| 435 | ELL_3M_COPY(Typ, T)((((Typ)+0)[0] = ((T)+0)[0], ((Typ)+0)[1] = ((T)+0)[1], ((Typ )+0)[2] = ((T)+0)[2]), (((Typ)+3)[0] = ((T)+3)[0], ((Typ)+3)[ 1] = ((T)+3)[1], ((Typ)+3)[2] = ((T)+3)[2]), (((Typ)+6)[0] = ( (T)+6)[0], ((Typ)+6)[1] = ((T)+6)[1], ((Typ)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gyp, g)((gyp)[0] = (g)[0], (gyp)[1] = (g)[1], (gyp)[2] = (g)[2]); | |||||
| 436 | } else { | |||||
| 437 | ELL_3M_LERP(Typ, alpha, sctx->t + 9*(1+2*siy), sctx->t + 9*(1+2*sixy))((((Typ)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+ 0)[0]) - (((sctx->t + 9*(1+2*siy))+0)[0])) + (((sctx->t + 9*(1+2*siy))+0)[0])), ((Typ)+0)[1] = ((((alpha)))*((((sctx ->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(1+2*siy))+ 0)[1])) + (((sctx->t + 9*(1+2*siy))+0)[1])), ((Typ)+0)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+0)[2]) - (((sctx ->t + 9*(1+2*siy))+0)[2])) + (((sctx->t + 9*(1+2*siy))+ 0)[2]))), (((Typ)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+ 2*sixy))+3)[0]) - (((sctx->t + 9*(1+2*siy))+3)[0])) + (((sctx ->t + 9*(1+2*siy))+3)[0])), ((Typ)+3)[1] = ((((alpha)))*(( ((sctx->t + 9*(1+2*sixy))+3)[1]) - (((sctx->t + 9*(1+2* siy))+3)[1])) + (((sctx->t + 9*(1+2*siy))+3)[1])), ((Typ)+ 3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+3)[2]) - ( ((sctx->t + 9*(1+2*siy))+3)[2])) + (((sctx->t + 9*(1+2* siy))+3)[2]))), (((Typ)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - (((sctx->t + 9*(1+2*siy))+6)[0])) + (((sctx->t + 9*(1+2*siy))+6)[0])), ((Typ)+6)[1] = ((((alpha )))*((((sctx->t + 9*(1+2*sixy))+6)[1]) - (((sctx->t + 9 *(1+2*siy))+6)[1])) + (((sctx->t + 9*(1+2*siy))+6)[1])), ( (Typ)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+6)[ 2]) - (((sctx->t + 9*(1+2*siy))+6)[2])) + (((sctx->t + 9 *(1+2*siy))+6)[2])))); | |||||
| 438 | ELL_3V_LERP(gyp, alpha, sctx->grad + 3*(1+2*siy),((gyp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixy))[0]) - ((sctx->grad + 3*(1+2*siy))[0])) + ((sctx->grad + 3*(1 +2*siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(1+ 2*sixy))[1]) - ((sctx->grad + 3*(1+2*siy))[1])) + ((sctx-> grad + 3*(1+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1+2*siy))[2])) + ( (sctx->grad + 3*(1+2*siy))[2]))) | |||||
| 439 | sctx->grad + 3*(1+2*sixy))((gyp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixy))[0]) - ((sctx->grad + 3*(1+2*siy))[0])) + ((sctx->grad + 3*(1 +2*siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(1+ 2*sixy))[1]) - ((sctx->grad + 3*(1+2*siy))[1])) + ((sctx-> grad + 3*(1+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1+2*siy))[2])) + ( (sctx->grad + 3*(1+2*siy))[2]))); | |||||
| 440 | } | |||||
| 441 | if (yi!=0 && yi!=sy-1) { | |||||
| 442 | ELL_3M_SCALE(Tym, 0.5, Tym)((((Tym)+0)[0] = ((0.5))*((Tym)+0)[0], ((Tym)+0)[1] = ((0.5)) *((Tym)+0)[1], ((Tym)+0)[2] = ((0.5))*((Tym)+0)[2]), (((Tym)+ 3)[0] = ((0.5))*((Tym)+3)[0], ((Tym)+3)[1] = ((0.5))*((Tym)+3 )[1], ((Tym)+3)[2] = ((0.5))*((Tym)+3)[2]), (((Tym)+6)[0] = ( (0.5))*((Tym)+6)[0], ((Tym)+6)[1] = ((0.5))*((Tym)+6)[1], ((Tym )+6)[2] = ((0.5))*((Tym)+6)[2])); ELL_3M_SCALE(Typ, 0.5, Typ)((((Typ)+0)[0] = ((0.5))*((Typ)+0)[0], ((Typ)+0)[1] = ((0.5)) *((Typ)+0)[1], ((Typ)+0)[2] = ((0.5))*((Typ)+0)[2]), (((Typ)+ 3)[0] = ((0.5))*((Typ)+3)[0], ((Typ)+3)[1] = ((0.5))*((Typ)+3 )[1], ((Typ)+3)[2] = ((0.5))*((Typ)+3)[2]), (((Typ)+6)[0] = ( (0.5))*((Typ)+6)[0], ((Typ)+6)[1] = ((0.5))*((Typ)+6)[1], ((Typ )+6)[2] = ((0.5))*((Typ)+6)[2])); | |||||
| 443 | ELL_3V_SCALE(gym, 0.5, gym)((gym)[0] = (0.5)*(gym)[0], (gym)[1] = (0.5)*(gym)[1], (gym)[ 2] = (0.5)*(gym)[2]); ELL_3V_SCALE(gyp, 0.5, gyp)((gyp)[0] = (0.5)*(gyp)[0], (gyp)[1] = (0.5)*(gyp)[1], (gyp)[ 2] = (0.5)*(gyp)[2]); | |||||
| 444 | } | |||||
| 445 | computeGradientLin(res, T, g, | |||||
| 446 | Txm, gxm, Txp, gxp, | |||||
| 447 | Tym, gym, Typ, gyp, | |||||
| 448 | Tzm, gzm, Tzp, gzp); | |||||
| 449 | break; | |||||
| 450 | case 4: | |||||
| 451 | ELL_3M_LERP(T, alpha, sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*siy))((((T)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+0)[ 0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx->t + 9 *(1+2*si))+0)[0])), ((T)+0)[1] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(1+2*si))+0)[1])) + ( ((sctx->t + 9*(1+2*si))+0)[1])), ((T)+0)[2] = ((((alpha))) *((((sctx->t + 9*(1+2*siy))+0)[2]) - (((sctx->t + 9*(1+ 2*si))+0)[2])) + (((sctx->t + 9*(1+2*si))+0)[2]))), (((T)+ 3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+3)[0]) - ( ((sctx->t + 9*(1+2*si))+3)[0])) + (((sctx->t + 9*(1+2*si ))+3)[0])), ((T)+3)[1] = ((((alpha)))*((((sctx->t + 9*(1+2 *siy))+3)[1]) - (((sctx->t + 9*(1+2*si))+3)[1])) + (((sctx ->t + 9*(1+2*si))+3)[1])), ((T)+3)[2] = ((((alpha)))*((((sctx ->t + 9*(1+2*siy))+3)[2]) - (((sctx->t + 9*(1+2*si))+3) [2])) + (((sctx->t + 9*(1+2*si))+3)[2]))), (((T)+6)[0] = ( (((alpha)))*((((sctx->t + 9*(1+2*siy))+6)[0]) - (((sctx-> t + 9*(1+2*si))+6)[0])) + (((sctx->t + 9*(1+2*si))+6)[0])) , ((T)+6)[1] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+6)[ 1]) - (((sctx->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9 *(1+2*si))+6)[1])), ((T)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + ( ((sctx->t + 9*(1+2*si))+6)[2])))); | |||||
| 452 | ELL_3V_LERP(g, alpha, sctx->grad + 3*(1+2*si), sctx->grad + 3*(1+2*siy))((g)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siy))[0]) - (( sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*(1+2*si ))[0])), (g)[1] = (((alpha))*(((sctx->grad + 3*(1+2*siy))[ 1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx->grad + 3 *(1+2*si))[1])), (g)[2] = (((alpha))*(((sctx->grad + 3*(1+ 2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[2])) + ((sctx-> grad + 3*(1+2*si))[2]))); | |||||
| 453 | ELL_3M_LERP(Tzm, alpha, sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*siy))((((Tzm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*siy))+0 )[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->t + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((((alpha)))*((((sctx-> t + 9*(0+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*si))+0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Tzm)+0)[2] = ((((alpha )))*((((sctx->t + 9*(0+2*siy))+0)[2]) - (((sctx->t + 9* (0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si))+0)[2]))), ((( Tzm)+3)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*siy))+3)[0] ) - (((sctx->t + 9*(0+2*si))+3)[0])) + (((sctx->t + 9*( 0+2*si))+3)[0])), ((Tzm)+3)[1] = ((((alpha)))*((((sctx->t + 9*(0+2*siy))+3)[1]) - (((sctx->t + 9*(0+2*si))+3)[1])) + ( ((sctx->t + 9*(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha) ))*((((sctx->t + 9*(0+2*siy))+3)[2]) - (((sctx->t + 9*( 0+2*si))+3)[2])) + (((sctx->t + 9*(0+2*si))+3)[2]))), (((Tzm )+6)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*siy))+6)[0]) - (((sctx->t + 9*(0+2*si))+6)[0])) + (((sctx->t + 9*(0+2 *si))+6)[0])), ((Tzm)+6)[1] = ((((alpha)))*((((sctx->t + 9 *(0+2*siy))+6)[1]) - (((sctx->t + 9*(0+2*si))+6)[1])) + (( (sctx->t + 9*(0+2*si))+6)[1])), ((Tzm)+6)[2] = ((((alpha)) )*((((sctx->t + 9*(0+2*siy))+6)[2]) - (((sctx->t + 9*(0 +2*si))+6)[2])) + (((sctx->t + 9*(0+2*si))+6)[2])))); | |||||
| 454 | ELL_3V_LERP(gzm, alpha, sctx->grad + 3*(0+2*si), sctx->grad + 3*(0+2*siy))((gzm)[0] = (((alpha))*(((sctx->grad + 3*(0+2*siy))[0]) - ( (sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*(0+2* si))[0])), (gzm)[1] = (((alpha))*(((sctx->grad + 3*(0+2*siy ))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx->grad + 3*(0+2*si))[1])), (gzm)[2] = (((alpha))*(((sctx->grad + 3*(0+2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[2])) + ((sctx ->grad + 3*(0+2*si))[2]))); | |||||
| 455 | if (bag->zi==sz-2) { | |||||
| 456 | ELL_3M_COPY(Tzp, T)((((Tzp)+0)[0] = ((T)+0)[0], ((Tzp)+0)[1] = ((T)+0)[1], ((Tzp )+0)[2] = ((T)+0)[2]), (((Tzp)+3)[0] = ((T)+3)[0], ((Tzp)+3)[ 1] = ((T)+3)[1], ((Tzp)+3)[2] = ((T)+3)[2]), (((Tzp)+6)[0] = ( (T)+6)[0], ((Tzp)+6)[1] = ((T)+6)[1], ((Tzp)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gzp, g)((gzp)[0] = (g)[0], (gzp)[1] = (g)[1], (gzp)[2] = (g)[2]); | |||||
| 457 | } else { | |||||
| 458 | ELL_3M_LERP(Tzp, alpha, sctx->tcontext + 9*(1+2*si),((((Tzp)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* siy))+0)[0]) - (((sctx->tcontext + 9*(1+2*si))+0)[0])) + ( ((sctx->tcontext + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(1+2*siy))+0)[1]) - (((sctx ->tcontext + 9*(1+2*si))+0)[1])) + (((sctx->tcontext + 9 *(1+2*si))+0)[1])), ((Tzp)+0)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(1+2*siy))+0)[2]) - (((sctx->tcontext + 9*(1+ 2*si))+0)[2])) + (((sctx->tcontext + 9*(1+2*si))+0)[2]))), (((Tzp)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* siy))+3)[0]) - (((sctx->tcontext + 9*(1+2*si))+3)[0])) + ( ((sctx->tcontext + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(1+2*siy))+3)[1]) - (((sctx ->tcontext + 9*(1+2*si))+3)[1])) + (((sctx->tcontext + 9 *(1+2*si))+3)[1])), ((Tzp)+3)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(1+2*siy))+3)[2]) - (((sctx->tcontext + 9*(1+ 2*si))+3)[2])) + (((sctx->tcontext + 9*(1+2*si))+3)[2]))), (((Tzp)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* siy))+6)[0]) - (((sctx->tcontext + 9*(1+2*si))+6)[0])) + ( ((sctx->tcontext + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(1+2*siy))+6)[1]) - (((sctx ->tcontext + 9*(1+2*si))+6)[1])) + (((sctx->tcontext + 9 *(1+2*si))+6)[1])), ((Tzp)+6)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(1+2*siy))+6)[2]) - (((sctx->tcontext + 9*(1+ 2*si))+6)[2])) + (((sctx->tcontext + 9*(1+2*si))+6)[2])))) | |||||
| 459 | sctx->tcontext + 9*(1+2*siy))((((Tzp)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* siy))+0)[0]) - (((sctx->tcontext + 9*(1+2*si))+0)[0])) + ( ((sctx->tcontext + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(1+2*siy))+0)[1]) - (((sctx ->tcontext + 9*(1+2*si))+0)[1])) + (((sctx->tcontext + 9 *(1+2*si))+0)[1])), ((Tzp)+0)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(1+2*siy))+0)[2]) - (((sctx->tcontext + 9*(1+ 2*si))+0)[2])) + (((sctx->tcontext + 9*(1+2*si))+0)[2]))), (((Tzp)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* siy))+3)[0]) - (((sctx->tcontext + 9*(1+2*si))+3)[0])) + ( ((sctx->tcontext + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(1+2*siy))+3)[1]) - (((sctx ->tcontext + 9*(1+2*si))+3)[1])) + (((sctx->tcontext + 9 *(1+2*si))+3)[1])), ((Tzp)+3)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(1+2*siy))+3)[2]) - (((sctx->tcontext + 9*(1+ 2*si))+3)[2])) + (((sctx->tcontext + 9*(1+2*si))+3)[2]))), (((Tzp)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2* siy))+6)[0]) - (((sctx->tcontext + 9*(1+2*si))+6)[0])) + ( ((sctx->tcontext + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1] = ((( (alpha)))*((((sctx->tcontext + 9*(1+2*siy))+6)[1]) - (((sctx ->tcontext + 9*(1+2*si))+6)[1])) + (((sctx->tcontext + 9 *(1+2*si))+6)[1])), ((Tzp)+6)[2] = ((((alpha)))*((((sctx-> tcontext + 9*(1+2*siy))+6)[2]) - (((sctx->tcontext + 9*(1+ 2*si))+6)[2])) + (((sctx->tcontext + 9*(1+2*si))+6)[2])))); | |||||
| 460 | ELL_3V_LERP(gzp, alpha, sctx->gradcontext + 3*(1+2*si),((gzp)[0] = (((alpha))*(((sctx->gradcontext + 3*(1+2*siy)) [0]) - ((sctx->gradcontext + 3*(1+2*si))[0])) + ((sctx-> gradcontext + 3*(1+2*si))[0])), (gzp)[1] = (((alpha))*(((sctx ->gradcontext + 3*(1+2*siy))[1]) - ((sctx->gradcontext + 3*(1+2*si))[1])) + ((sctx->gradcontext + 3*(1+2*si))[1])) , (gzp)[2] = (((alpha))*(((sctx->gradcontext + 3*(1+2*siy) )[2]) - ((sctx->gradcontext + 3*(1+2*si))[2])) + ((sctx-> gradcontext + 3*(1+2*si))[2]))) | |||||
| 461 | sctx->gradcontext + 3*(1+2*siy))((gzp)[0] = (((alpha))*(((sctx->gradcontext + 3*(1+2*siy)) [0]) - ((sctx->gradcontext + 3*(1+2*si))[0])) + ((sctx-> gradcontext + 3*(1+2*si))[0])), (gzp)[1] = (((alpha))*(((sctx ->gradcontext + 3*(1+2*siy))[1]) - ((sctx->gradcontext + 3*(1+2*si))[1])) + ((sctx->gradcontext + 3*(1+2*si))[1])) , (gzp)[2] = (((alpha))*(((sctx->gradcontext + 3*(1+2*siy) )[2]) - ((sctx->gradcontext + 3*(1+2*si))[2])) + ((sctx-> gradcontext + 3*(1+2*si))[2]))); | |||||
| 462 | ELL_3M_SCALE(Tzm, 0.5, Tzm)((((Tzm)+0)[0] = ((0.5))*((Tzm)+0)[0], ((Tzm)+0)[1] = ((0.5)) *((Tzm)+0)[1], ((Tzm)+0)[2] = ((0.5))*((Tzm)+0)[2]), (((Tzm)+ 3)[0] = ((0.5))*((Tzm)+3)[0], ((Tzm)+3)[1] = ((0.5))*((Tzm)+3 )[1], ((Tzm)+3)[2] = ((0.5))*((Tzm)+3)[2]), (((Tzm)+6)[0] = ( (0.5))*((Tzm)+6)[0], ((Tzm)+6)[1] = ((0.5))*((Tzm)+6)[1], ((Tzm )+6)[2] = ((0.5))*((Tzm)+6)[2])); ELL_3M_SCALE(Tzp, 0.5, Tzp)((((Tzp)+0)[0] = ((0.5))*((Tzp)+0)[0], ((Tzp)+0)[1] = ((0.5)) *((Tzp)+0)[1], ((Tzp)+0)[2] = ((0.5))*((Tzp)+0)[2]), (((Tzp)+ 3)[0] = ((0.5))*((Tzp)+3)[0], ((Tzp)+3)[1] = ((0.5))*((Tzp)+3 )[1], ((Tzp)+3)[2] = ((0.5))*((Tzp)+3)[2]), (((Tzp)+6)[0] = ( (0.5))*((Tzp)+6)[0], ((Tzp)+6)[1] = ((0.5))*((Tzp)+6)[1], ((Tzp )+6)[2] = ((0.5))*((Tzp)+6)[2])); | |||||
| 463 | ELL_3V_SCALE(gzm, 0.5, gzm)((gzm)[0] = (0.5)*(gzm)[0], (gzm)[1] = (0.5)*(gzm)[1], (gzm)[ 2] = (0.5)*(gzm)[2]); ELL_3V_SCALE(gzp, 0.5, gzp)((gzp)[0] = (0.5)*(gzp)[0], (gzp)[1] = (0.5)*(gzp)[1], (gzp)[ 2] = (0.5)*(gzp)[2]); | |||||
| 464 | } | |||||
| 465 | if (xi==0) { | |||||
| 466 | ELL_3M_COPY(Txm, T)((((Txm)+0)[0] = ((T)+0)[0], ((Txm)+0)[1] = ((T)+0)[1], ((Txm )+0)[2] = ((T)+0)[2]), (((Txm)+3)[0] = ((T)+3)[0], ((Txm)+3)[ 1] = ((T)+3)[1], ((Txm)+3)[2] = ((T)+3)[2]), (((Txm)+6)[0] = ( (T)+6)[0], ((Txm)+6)[1] = ((T)+6)[1], ((Txm)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gxm, g)((gxm)[0] = (g)[0], (gxm)[1] = (g)[1], (gxm)[2] = (g)[2]); | |||||
| 467 | } else { | |||||
| 468 | ELL_3M_LERP(Txm, alpha, sctx->t + 9*(1+2*siX), sctx->t + 9*(1+2*siXy))((((Txm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siXy))+ 0)[0]) - (((sctx->t + 9*(1+2*siX))+0)[0])) + (((sctx->t + 9*(1+2*siX))+0)[0])), ((Txm)+0)[1] = ((((alpha)))*((((sctx ->t + 9*(1+2*siXy))+0)[1]) - (((sctx->t + 9*(1+2*siX))+ 0)[1])) + (((sctx->t + 9*(1+2*siX))+0)[1])), ((Txm)+0)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siXy))+0)[2]) - (((sctx ->t + 9*(1+2*siX))+0)[2])) + (((sctx->t + 9*(1+2*siX))+ 0)[2]))), (((Txm)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+ 2*siXy))+3)[0]) - (((sctx->t + 9*(1+2*siX))+3)[0])) + (((sctx ->t + 9*(1+2*siX))+3)[0])), ((Txm)+3)[1] = ((((alpha)))*(( ((sctx->t + 9*(1+2*siXy))+3)[1]) - (((sctx->t + 9*(1+2* siX))+3)[1])) + (((sctx->t + 9*(1+2*siX))+3)[1])), ((Txm)+ 3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siXy))+3)[2]) - ( ((sctx->t + 9*(1+2*siX))+3)[2])) + (((sctx->t + 9*(1+2* siX))+3)[2]))), (((Txm)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siXy))+6)[0]) - (((sctx->t + 9*(1+2*siX))+6)[0])) + (((sctx->t + 9*(1+2*siX))+6)[0])), ((Txm)+6)[1] = ((((alpha )))*((((sctx->t + 9*(1+2*siXy))+6)[1]) - (((sctx->t + 9 *(1+2*siX))+6)[1])) + (((sctx->t + 9*(1+2*siX))+6)[1])), ( (Txm)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siXy))+6)[ 2]) - (((sctx->t + 9*(1+2*siX))+6)[2])) + (((sctx->t + 9 *(1+2*siX))+6)[2])))); | |||||
| 469 | ELL_3V_LERP(gxm, alpha, sctx->grad + 3*(1+2*siX),((gxm)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siXy))[0]) - ((sctx->grad + 3*(1+2*siX))[0])) + ((sctx->grad + 3*(1 +2*siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(1+ 2*siXy))[1]) - ((sctx->grad + 3*(1+2*siX))[1])) + ((sctx-> grad + 3*(1+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad + 3*(1+2*siXy))[2]) - ((sctx->grad + 3*(1+2*siX))[2])) + ( (sctx->grad + 3*(1+2*siX))[2]))) | |||||
| 470 | sctx->grad + 3*(1+2*siXy))((gxm)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siXy))[0]) - ((sctx->grad + 3*(1+2*siX))[0])) + ((sctx->grad + 3*(1 +2*siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(1+ 2*siXy))[1]) - ((sctx->grad + 3*(1+2*siX))[1])) + ((sctx-> grad + 3*(1+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad + 3*(1+2*siXy))[2]) - ((sctx->grad + 3*(1+2*siX))[2])) + ( (sctx->grad + 3*(1+2*siX))[2]))); | |||||
| 471 | } | |||||
| 472 | if (xi==sx-1) { | |||||
| 473 | ELL_3M_COPY(Txp, T)((((Txp)+0)[0] = ((T)+0)[0], ((Txp)+0)[1] = ((T)+0)[1], ((Txp )+0)[2] = ((T)+0)[2]), (((Txp)+3)[0] = ((T)+3)[0], ((Txp)+3)[ 1] = ((T)+3)[1], ((Txp)+3)[2] = ((T)+3)[2]), (((Txp)+6)[0] = ( (T)+6)[0], ((Txp)+6)[1] = ((T)+6)[1], ((Txp)+6)[2] = ((T)+6)[ 2])); ELL_3V_COPY(gxp, g)((gxp)[0] = (g)[0], (gxp)[1] = (g)[1], (gxp)[2] = (g)[2]); | |||||
| 474 | } else { | |||||
| 475 | ELL_3M_LERP(Txp, alpha, sctx->t + 9*(1+2*six), sctx->t + 9*(1+2*sixy))((((Txp)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+ 0)[0]) - (((sctx->t + 9*(1+2*six))+0)[0])) + (((sctx->t + 9*(1+2*six))+0)[0])), ((Txp)+0)[1] = ((((alpha)))*((((sctx ->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(1+2*six))+ 0)[1])) + (((sctx->t + 9*(1+2*six))+0)[1])), ((Txp)+0)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+0)[2]) - (((sctx ->t + 9*(1+2*six))+0)[2])) + (((sctx->t + 9*(1+2*six))+ 0)[2]))), (((Txp)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+ 2*sixy))+3)[0]) - (((sctx->t + 9*(1+2*six))+3)[0])) + (((sctx ->t + 9*(1+2*six))+3)[0])), ((Txp)+3)[1] = ((((alpha)))*(( ((sctx->t + 9*(1+2*sixy))+3)[1]) - (((sctx->t + 9*(1+2* six))+3)[1])) + (((sctx->t + 9*(1+2*six))+3)[1])), ((Txp)+ 3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+3)[2]) - ( ((sctx->t + 9*(1+2*six))+3)[2])) + (((sctx->t + 9*(1+2* six))+3)[2]))), (((Txp)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - (((sctx->t + 9*(1+2*six))+6)[0])) + (((sctx->t + 9*(1+2*six))+6)[0])), ((Txp)+6)[1] = ((((alpha )))*((((sctx->t + 9*(1+2*sixy))+6)[1]) - (((sctx->t + 9 *(1+2*six))+6)[1])) + (((sctx->t + 9*(1+2*six))+6)[1])), ( (Txp)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+6)[ 2]) - (((sctx->t + 9*(1+2*six))+6)[2])) + (((sctx->t + 9 *(1+2*six))+6)[2])))); | |||||
| 476 | ELL_3V_LERP(gxp, alpha, sctx->grad + 3*(1+2*six),((gxp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixy))[0]) - ((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3*(1 +2*six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(1+ 2*sixy))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + ((sctx-> grad + 3*(1+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1+2*six))[2])) + ( (sctx->grad + 3*(1+2*six))[2]))) | |||||
| 477 | sctx->grad + 3*(1+2*sixy))((gxp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixy))[0]) - ((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3*(1 +2*six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(1+ 2*sixy))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + ((sctx-> grad + 3*(1+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1+2*six))[2])) + ( (sctx->grad + 3*(1+2*six))[2]))); | |||||
| 478 | } | |||||
| 479 | if (xi!=0 && xi!=sx-1) { | |||||
| 480 | ELL_3M_SCALE(Txm, 0.5, Txm)((((Txm)+0)[0] = ((0.5))*((Txm)+0)[0], ((Txm)+0)[1] = ((0.5)) *((Txm)+0)[1], ((Txm)+0)[2] = ((0.5))*((Txm)+0)[2]), (((Txm)+ 3)[0] = ((0.5))*((Txm)+3)[0], ((Txm)+3)[1] = ((0.5))*((Txm)+3 )[1], ((Txm)+3)[2] = ((0.5))*((Txm)+3)[2]), (((Txm)+6)[0] = ( (0.5))*((Txm)+6)[0], ((Txm)+6)[1] = ((0.5))*((Txm)+6)[1], ((Txm )+6)[2] = ((0.5))*((Txm)+6)[2])); ELL_3M_SCALE(Txp, 0.5, Txp)((((Txp)+0)[0] = ((0.5))*((Txp)+0)[0], ((Txp)+0)[1] = ((0.5)) *((Txp)+0)[1], ((Txp)+0)[2] = ((0.5))*((Txp)+0)[2]), (((Txp)+ 3)[0] = ((0.5))*((Txp)+3)[0], ((Txp)+3)[1] = ((0.5))*((Txp)+3 )[1], ((Txp)+3)[2] = ((0.5))*((Txp)+3)[2]), (((Txp)+6)[0] = ( (0.5))*((Txp)+6)[0], ((Txp)+6)[1] = ((0.5))*((Txp)+6)[1], ((Txp )+6)[2] = ((0.5))*((Txp)+6)[2])); | |||||
| 481 | ELL_3V_SCALE(gxm, 0.5, gxm)((gxm)[0] = (0.5)*(gxm)[0], (gxm)[1] = (0.5)*(gxm)[1], (gxm)[ 2] = (0.5)*(gxm)[2]); ELL_3V_SCALE(gxp, 0.5, gxp)((gxp)[0] = (0.5)*(gxp)[0], (gxp)[1] = (0.5)*(gxp)[1], (gxp)[ 2] = (0.5)*(gxp)[2]); | |||||
| 482 | } | |||||
| 483 | if (yi>0 && yi<sy-2) { | |||||
| 484 | unsigned int siyy = xi + sx*(yi+2); | |||||
| 485 | ELL_3M_LERP(Tym, alpha, sctx->t + 9*(1+2*siY), sctx->t + 9*(1+2*si))((((Tym)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+0) [0]) - (((sctx->t + 9*(1+2*siY))+0)[0])) + (((sctx->t + 9*(1+2*siY))+0)[0])), ((Tym)+0)[1] = ((((alpha)))*((((sctx-> t + 9*(1+2*si))+0)[1]) - (((sctx->t + 9*(1+2*siY))+0)[1])) + (((sctx->t + 9*(1+2*siY))+0)[1])), ((Tym)+0)[2] = ((((alpha )))*((((sctx->t + 9*(1+2*si))+0)[2]) - (((sctx->t + 9*( 1+2*siY))+0)[2])) + (((sctx->t + 9*(1+2*siY))+0)[2]))), (( (Tym)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+3)[0] ) - (((sctx->t + 9*(1+2*siY))+3)[0])) + (((sctx->t + 9* (1+2*siY))+3)[0])), ((Tym)+3)[1] = ((((alpha)))*((((sctx-> t + 9*(1+2*si))+3)[1]) - (((sctx->t + 9*(1+2*siY))+3)[1])) + (((sctx->t + 9*(1+2*siY))+3)[1])), ((Tym)+3)[2] = ((((alpha )))*((((sctx->t + 9*(1+2*si))+3)[2]) - (((sctx->t + 9*( 1+2*siY))+3)[2])) + (((sctx->t + 9*(1+2*siY))+3)[2]))), (( (Tym)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+6)[0] ) - (((sctx->t + 9*(1+2*siY))+6)[0])) + (((sctx->t + 9* (1+2*siY))+6)[0])), ((Tym)+6)[1] = ((((alpha)))*((((sctx-> t + 9*(1+2*si))+6)[1]) - (((sctx->t + 9*(1+2*siY))+6)[1])) + (((sctx->t + 9*(1+2*siY))+6)[1])), ((Tym)+6)[2] = ((((alpha )))*((((sctx->t + 9*(1+2*si))+6)[2]) - (((sctx->t + 9*( 1+2*siY))+6)[2])) + (((sctx->t + 9*(1+2*siY))+6)[2])))); | |||||
| 486 | ELL_3V_LERP(gym, alpha, sctx->grad + 3*(1+2*siY),((gym)[0] = (((alpha))*(((sctx->grad + 3*(1+2*si))[0]) - ( (sctx->grad + 3*(1+2*siY))[0])) + ((sctx->grad + 3*(1+2 *siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(1+2* si))[1]) - ((sctx->grad + 3*(1+2*siY))[1])) + ((sctx->grad + 3*(1+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad + 3*(1+2*si))[2]) - ((sctx->grad + 3*(1+2*siY))[2])) + ((sctx ->grad + 3*(1+2*siY))[2]))) | |||||
| 487 | sctx->grad + 3*(1+2*si))((gym)[0] = (((alpha))*(((sctx->grad + 3*(1+2*si))[0]) - ( (sctx->grad + 3*(1+2*siY))[0])) + ((sctx->grad + 3*(1+2 *siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(1+2* si))[1]) - ((sctx->grad + 3*(1+2*siY))[1])) + ((sctx->grad + 3*(1+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad + 3*(1+2*si))[2]) - ((sctx->grad + 3*(1+2*siY))[2])) + ((sctx ->grad + 3*(1+2*siY))[2]))); | |||||
| 488 | ELL_3M_LERP(Typ, alpha, sctx->t + 9*(1+2*siy), sctx->t + 9*(1+2*siyy))((((Typ)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siyy))+ 0)[0]) - (((sctx->t + 9*(1+2*siy))+0)[0])) + (((sctx->t + 9*(1+2*siy))+0)[0])), ((Typ)+0)[1] = ((((alpha)))*((((sctx ->t + 9*(1+2*siyy))+0)[1]) - (((sctx->t + 9*(1+2*siy))+ 0)[1])) + (((sctx->t + 9*(1+2*siy))+0)[1])), ((Typ)+0)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siyy))+0)[2]) - (((sctx ->t + 9*(1+2*siy))+0)[2])) + (((sctx->t + 9*(1+2*siy))+ 0)[2]))), (((Typ)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+ 2*siyy))+3)[0]) - (((sctx->t + 9*(1+2*siy))+3)[0])) + (((sctx ->t + 9*(1+2*siy))+3)[0])), ((Typ)+3)[1] = ((((alpha)))*(( ((sctx->t + 9*(1+2*siyy))+3)[1]) - (((sctx->t + 9*(1+2* siy))+3)[1])) + (((sctx->t + 9*(1+2*siy))+3)[1])), ((Typ)+ 3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siyy))+3)[2]) - ( ((sctx->t + 9*(1+2*siy))+3)[2])) + (((sctx->t + 9*(1+2* siy))+3)[2]))), (((Typ)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siyy))+6)[0]) - (((sctx->t + 9*(1+2*siy))+6)[0])) + (((sctx->t + 9*(1+2*siy))+6)[0])), ((Typ)+6)[1] = ((((alpha )))*((((sctx->t + 9*(1+2*siyy))+6)[1]) - (((sctx->t + 9 *(1+2*siy))+6)[1])) + (((sctx->t + 9*(1+2*siy))+6)[1])), ( (Typ)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siyy))+6)[ 2]) - (((sctx->t + 9*(1+2*siy))+6)[2])) + (((sctx->t + 9 *(1+2*siy))+6)[2])))); | |||||
| 489 | ELL_3V_LERP(gyp, alpha, sctx->grad + 3*(1+2*siy),((gyp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siyy))[0]) - ((sctx->grad + 3*(1+2*siy))[0])) + ((sctx->grad + 3*(1 +2*siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(1+ 2*siyy))[1]) - ((sctx->grad + 3*(1+2*siy))[1])) + ((sctx-> grad + 3*(1+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad + 3*(1+2*siyy))[2]) - ((sctx->grad + 3*(1+2*siy))[2])) + ( (sctx->grad + 3*(1+2*siy))[2]))) | |||||
| 490 | sctx->grad + 3*(1+2*siyy))((gyp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siyy))[0]) - ((sctx->grad + 3*(1+2*siy))[0])) + ((sctx->grad + 3*(1 +2*siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(1+ 2*siyy))[1]) - ((sctx->grad + 3*(1+2*siy))[1])) + ((sctx-> grad + 3*(1+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad + 3*(1+2*siyy))[2]) - ((sctx->grad + 3*(1+2*siy))[2])) + ( (sctx->grad + 3*(1+2*siy))[2]))); | |||||
| 491 | ELL_3M_SCALE(Tym, 0.5, Tym)((((Tym)+0)[0] = ((0.5))*((Tym)+0)[0], ((Tym)+0)[1] = ((0.5)) *((Tym)+0)[1], ((Tym)+0)[2] = ((0.5))*((Tym)+0)[2]), (((Tym)+ 3)[0] = ((0.5))*((Tym)+3)[0], ((Tym)+3)[1] = ((0.5))*((Tym)+3 )[1], ((Tym)+3)[2] = ((0.5))*((Tym)+3)[2]), (((Tym)+6)[0] = ( (0.5))*((Tym)+6)[0], ((Tym)+6)[1] = ((0.5))*((Tym)+6)[1], ((Tym )+6)[2] = ((0.5))*((Tym)+6)[2])); ELL_3M_SCALE(Typ, 0.5, Typ)((((Typ)+0)[0] = ((0.5))*((Typ)+0)[0], ((Typ)+0)[1] = ((0.5)) *((Typ)+0)[1], ((Typ)+0)[2] = ((0.5))*((Typ)+0)[2]), (((Typ)+ 3)[0] = ((0.5))*((Typ)+3)[0], ((Typ)+3)[1] = ((0.5))*((Typ)+3 )[1], ((Typ)+3)[2] = ((0.5))*((Typ)+3)[2]), (((Typ)+6)[0] = ( (0.5))*((Typ)+6)[0], ((Typ)+6)[1] = ((0.5))*((Typ)+6)[1], ((Typ )+6)[2] = ((0.5))*((Typ)+6)[2])); | |||||
| 492 | ELL_3V_SCALE(gym, 0.5, gym)((gym)[0] = (0.5)*(gym)[0], (gym)[1] = (0.5)*(gym)[1], (gym)[ 2] = (0.5)*(gym)[2]); ELL_3V_SCALE(gyp, 0.5, gyp)((gyp)[0] = (0.5)*(gyp)[0], (gyp)[1] = (0.5)*(gyp)[1], (gyp)[ 2] = (0.5)*(gyp)[2]); | |||||
| 493 | } else { | |||||
| 494 | ELL_3M_COPY(Tym, sctx->t + 9*(1+2*si))((((Tym)+0)[0] = ((sctx->t + 9*(1+2*si))+0)[0], ((Tym)+0)[ 1] = ((sctx->t + 9*(1+2*si))+0)[1], ((Tym)+0)[2] = ((sctx-> t + 9*(1+2*si))+0)[2]), (((Tym)+3)[0] = ((sctx->t + 9*(1+2 *si))+3)[0], ((Tym)+3)[1] = ((sctx->t + 9*(1+2*si))+3)[1], ((Tym)+3)[2] = ((sctx->t + 9*(1+2*si))+3)[2]), (((Tym)+6) [0] = ((sctx->t + 9*(1+2*si))+6)[0], ((Tym)+6)[1] = ((sctx ->t + 9*(1+2*si))+6)[1], ((Tym)+6)[2] = ((sctx->t + 9*( 1+2*si))+6)[2])); | |||||
| 495 | ELL_3V_COPY(gym, sctx->grad + 3*(1+2*si))((gym)[0] = (sctx->grad + 3*(1+2*si))[0], (gym)[1] = (sctx ->grad + 3*(1+2*si))[1], (gym)[2] = (sctx->grad + 3*(1+ 2*si))[2]); | |||||
| 496 | ELL_3M_COPY(Typ, sctx->t + 9*(1+2*six))((((Typ)+0)[0] = ((sctx->t + 9*(1+2*six))+0)[0], ((Typ)+0) [1] = ((sctx->t + 9*(1+2*six))+0)[1], ((Typ)+0)[2] = ((sctx ->t + 9*(1+2*six))+0)[2]), (((Typ)+3)[0] = ((sctx->t + 9 *(1+2*six))+3)[0], ((Typ)+3)[1] = ((sctx->t + 9*(1+2*six)) +3)[1], ((Typ)+3)[2] = ((sctx->t + 9*(1+2*six))+3)[2]), (( (Typ)+6)[0] = ((sctx->t + 9*(1+2*six))+6)[0], ((Typ)+6)[1] = ((sctx->t + 9*(1+2*six))+6)[1], ((Typ)+6)[2] = ((sctx-> t + 9*(1+2*six))+6)[2])); | |||||
| 497 | ELL_3V_COPY(gyp, sctx->grad + 3*(1+2*six))((gyp)[0] = (sctx->grad + 3*(1+2*six))[0], (gyp)[1] = (sctx ->grad + 3*(1+2*six))[1], (gyp)[2] = (sctx->grad + 3*(1 +2*six))[2]); | |||||
| 498 | } | |||||
| 499 | computeGradientLin(res, T, g, | |||||
| 500 | Txm, gxm, Txp, gxp, | |||||
| 501 | Tym, gym, Typ, gyp, | |||||
| 502 | Tzm, gzm, Tzp, gzp); | |||||
| 503 | break; | |||||
| 504 | } | |||||
| 505 | } | |||||
| 506 | ||||||
| 507 | /* Given a unique face ID and coordinates, compute the crease surface | |||||
| 508 | * normal at the specified degenerate point */ | |||||
| 509 | static void | |||||
| 510 | computeFaceGradient(seekContext *sctx, double *res, | |||||
| 511 | unsigned int xi, unsigned int yi, | |||||
| 512 | char faceid, double *coords) { | |||||
| 513 | double T[9], Txm[9], Txp[9], Tym[9], Typ[9], Tzm[9], Tzp[9], | |||||
| 514 | g[3], gxm[3], gxp[3], gym[3], gyp[3], gzm[3], gzp[3]; | |||||
| 515 | unsigned int sx = AIR_CAST(unsigned int, sctx->sx)((unsigned int)(sctx->sx)); | |||||
| 516 | unsigned int sy = AIR_CAST(unsigned int, sctx->sy)((unsigned int)(sctx->sy)); | |||||
| 517 | unsigned int si = xi + sx*yi; | |||||
| 518 | unsigned int six = xi + 1 + sx*yi, siX = xi - 1 + sx*yi; | |||||
| 519 | unsigned int siy = xi + sx*(yi+1), siY = xi + sx*(yi-1); | |||||
| 520 | unsigned int sixy = xi + 1 + sx*(yi+1), sixY = xi + 1 + sx*(yi-1), | |||||
| 521 | siXy = xi - 1 + sx*(yi+1); | |||||
| 522 | ||||||
| 523 | /* Again, lots of special cases to fill Txm, gxm, etc. */ | |||||
| 524 | switch (faceid) { | |||||
| ||||||
| 525 | case 0: | |||||
| 526 | /* bilinearly interpolate Tzp/gzp first */ | |||||
| 527 | ELL_3M_LERP(Txm, coords[1], sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*siy))((((Txm)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy ))+0)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx-> t + 9*(1+2*si))+0)[0])), ((Txm)+0)[1] = ((((coords[1])))*(((( sctx->t + 9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(1+2*si) )+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Txm)+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+0)[2]) - (( (sctx->t + 9*(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2*si ))+0)[2]))), (((Txm)+3)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+3)[0]) - (((sctx->t + 9*(1+2*si))+3)[0])) + ( ((sctx->t + 9*(1+2*si))+3)[0])), ((Txm)+3)[1] = ((((coords [1])))*((((sctx->t + 9*(1+2*siy))+3)[1]) - (((sctx->t + 9*(1+2*si))+3)[1])) + (((sctx->t + 9*(1+2*si))+3)[1])), ( (Txm)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+ 3)[2]) - (((sctx->t + 9*(1+2*si))+3)[2])) + (((sctx->t + 9*(1+2*si))+3)[2]))), (((Txm)+6)[0] = ((((coords[1])))*((((sctx ->t + 9*(1+2*siy))+6)[0]) - (((sctx->t + 9*(1+2*si))+6) [0])) + (((sctx->t + 9*(1+2*si))+6)[0])), ((Txm)+6)[1] = ( (((coords[1])))*((((sctx->t + 9*(1+2*siy))+6)[1]) - (((sctx ->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9*(1+2*si))+6) [1])), ((Txm)+6)[2] = ((((coords[1])))*((((sctx->t + 9*(1+ 2*siy))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + (((sctx ->t + 9*(1+2*si))+6)[2])))); | |||||
| 528 | ELL_3V_LERP(gxm, coords[1], sctx->grad + 3*(1+2*si),((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0] ) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3* (1+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3 *(1+2*siy))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx ->grad + 3*(1+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[ 2])) + ((sctx->grad + 3*(1+2*si))[2]))) | |||||
| 529 | sctx->grad + 3*(1+2*siy))((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0] ) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3* (1+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3 *(1+2*siy))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx ->grad + 3*(1+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[ 2])) + ((sctx->grad + 3*(1+2*si))[2]))); | |||||
| 530 | ELL_3M_LERP(Txp, coords[1], sctx->t + 9*(1+2*six), sctx->t + 9*(1+2*sixy))((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy ))+0)[0]) - (((sctx->t + 9*(1+2*six))+0)[0])) + (((sctx-> t + 9*(1+2*six))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*((( (sctx->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(1+2*six ))+0)[1])) + (((sctx->t + 9*(1+2*six))+0)[1])), ((Txp)+0)[ 2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+0)[2]) - (((sctx->t + 9*(1+2*six))+0)[2])) + (((sctx->t + 9*(1+ 2*six))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*((((sctx-> t + 9*(1+2*sixy))+3)[0]) - (((sctx->t + 9*(1+2*six))+3)[0] )) + (((sctx->t + 9*(1+2*six))+3)[0])), ((Txp)+3)[1] = ((( (coords[1])))*((((sctx->t + 9*(1+2*sixy))+3)[1]) - (((sctx ->t + 9*(1+2*six))+3)[1])) + (((sctx->t + 9*(1+2*six))+ 3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx->t + 9*( 1+2*sixy))+3)[2]) - (((sctx->t + 9*(1+2*six))+3)[2])) + (( (sctx->t + 9*(1+2*six))+3)[2]))), (((Txp)+6)[0] = ((((coords [1])))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - (((sctx->t + 9*(1+2*six))+6)[0])) + (((sctx->t + 9*(1+2*six))+6)[0])), ((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy ))+6)[1]) - (((sctx->t + 9*(1+2*six))+6)[1])) + (((sctx-> t + 9*(1+2*six))+6)[1])), ((Txp)+6)[2] = ((((coords[1])))*((( (sctx->t + 9*(1+2*sixy))+6)[2]) - (((sctx->t + 9*(1+2*six ))+6)[2])) + (((sctx->t + 9*(1+2*six))+6)[2])))); | |||||
| 531 | ELL_3V_LERP(gxp, coords[1], sctx->grad + 3*(1+2*six),((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0 ]) - ((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3 *(1+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + (( sctx->grad + 3*(1+2*six))[1])), (gxp)[2] = (((coords[1]))* (((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1 +2*six))[2])) + ((sctx->grad + 3*(1+2*six))[2]))) | |||||
| 532 | sctx->grad + 3*(1+2*sixy))((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0 ]) - ((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3 *(1+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + (( sctx->grad + 3*(1+2*six))[1])), (gxp)[2] = (((coords[1]))* (((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1 +2*six))[2])) + ((sctx->grad + 3*(1+2*six))[2]))); | |||||
| 533 | ELL_3M_LERP(Tzp, coords[0], Txm, Txp)((((Tzp)+0)[0] = ((((coords[0])))*((((Txp)+0)[0]) - (((Txm)+0 )[0])) + (((Txm)+0)[0])), ((Tzp)+0)[1] = ((((coords[0])))*((( (Txp)+0)[1]) - (((Txm)+0)[1])) + (((Txm)+0)[1])), ((Tzp)+0)[2 ] = ((((coords[0])))*((((Txp)+0)[2]) - (((Txm)+0)[2])) + (((Txm )+0)[2]))), (((Tzp)+3)[0] = ((((coords[0])))*((((Txp)+3)[0]) - (((Txm)+3)[0])) + (((Txm)+3)[0])), ((Tzp)+3)[1] = ((((coords [0])))*((((Txp)+3)[1]) - (((Txm)+3)[1])) + (((Txm)+3)[1])), ( (Tzp)+3)[2] = ((((coords[0])))*((((Txp)+3)[2]) - (((Txm)+3)[2 ])) + (((Txm)+3)[2]))), (((Tzp)+6)[0] = ((((coords[0])))*(((( Txp)+6)[0]) - (((Txm)+6)[0])) + (((Txm)+6)[0])), ((Tzp)+6)[1] = ((((coords[0])))*((((Txp)+6)[1]) - (((Txm)+6)[1])) + (((Txm )+6)[1])), ((Tzp)+6)[2] = ((((coords[0])))*((((Txp)+6)[2]) - ( ((Txm)+6)[2])) + (((Txm)+6)[2])))); | |||||
| 534 | ELL_3V_LERP(gzp, coords[0], gxm, gxp)((gzp)[0] = (((coords[0]))*(((gxp)[0]) - ((gxm)[0])) + ((gxm) [0])), (gzp)[1] = (((coords[0]))*(((gxp)[1]) - ((gxm)[1])) + ( (gxm)[1])), (gzp)[2] = (((coords[0]))*(((gxp)[2]) - ((gxm)[2] )) + ((gxm)[2]))); | |||||
| 535 | /* now, compute all required points on the bottom face */ | |||||
| 536 | ELL_3M_LERP(Txm, coords[1], sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*siy))((((Txm)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(0+2*siy ))+0)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx-> t + 9*(0+2*si))+0)[0])), ((Txm)+0)[1] = ((((coords[1])))*(((( sctx->t + 9*(0+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*si) )+0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Txm)+0)[2] = ((((coords[1])))*((((sctx->t + 9*(0+2*siy))+0)[2]) - (( (sctx->t + 9*(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si ))+0)[2]))), (((Txm)+3)[0] = ((((coords[1])))*((((sctx->t + 9*(0+2*siy))+3)[0]) - (((sctx->t + 9*(0+2*si))+3)[0])) + ( ((sctx->t + 9*(0+2*si))+3)[0])), ((Txm)+3)[1] = ((((coords [1])))*((((sctx->t + 9*(0+2*siy))+3)[1]) - (((sctx->t + 9*(0+2*si))+3)[1])) + (((sctx->t + 9*(0+2*si))+3)[1])), ( (Txm)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(0+2*siy))+ 3)[2]) - (((sctx->t + 9*(0+2*si))+3)[2])) + (((sctx->t + 9*(0+2*si))+3)[2]))), (((Txm)+6)[0] = ((((coords[1])))*((((sctx ->t + 9*(0+2*siy))+6)[0]) - (((sctx->t + 9*(0+2*si))+6) [0])) + (((sctx->t + 9*(0+2*si))+6)[0])), ((Txm)+6)[1] = ( (((coords[1])))*((((sctx->t + 9*(0+2*siy))+6)[1]) - (((sctx ->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si))+6) [1])), ((Txm)+6)[2] = ((((coords[1])))*((((sctx->t + 9*(0+ 2*siy))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx ->t + 9*(0+2*si))+6)[2])))); | |||||
| 537 | ELL_3V_LERP(gxm, coords[1], sctx->grad + 3*(0+2*si),((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*siy))[0] ) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3* (0+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3 *(0+2*siy))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx ->grad + 3*(0+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx ->grad + 3*(0+2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[ 2])) + ((sctx->grad + 3*(0+2*si))[2]))) | |||||
| 538 | sctx->grad + 3*(0+2*siy))((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*siy))[0] ) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3* (0+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3 *(0+2*siy))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx ->grad + 3*(0+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx ->grad + 3*(0+2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[ 2])) + ((sctx->grad + 3*(0+2*si))[2]))); | |||||
| 539 | ELL_3M_LERP(Txp, coords[1], sctx->t + 9*(0+2*six), sctx->t + 9*(0+2*sixy))((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(0+2*sixy ))+0)[0]) - (((sctx->t + 9*(0+2*six))+0)[0])) + (((sctx-> t + 9*(0+2*six))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*((( (sctx->t + 9*(0+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2*six ))+0)[1])) + (((sctx->t + 9*(0+2*six))+0)[1])), ((Txp)+0)[ 2] = ((((coords[1])))*((((sctx->t + 9*(0+2*sixy))+0)[2]) - (((sctx->t + 9*(0+2*six))+0)[2])) + (((sctx->t + 9*(0+ 2*six))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*((((sctx-> t + 9*(0+2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*six))+3)[0] )) + (((sctx->t + 9*(0+2*six))+3)[0])), ((Txp)+3)[1] = ((( (coords[1])))*((((sctx->t + 9*(0+2*sixy))+3)[1]) - (((sctx ->t + 9*(0+2*six))+3)[1])) + (((sctx->t + 9*(0+2*six))+ 3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx->t + 9*( 0+2*sixy))+3)[2]) - (((sctx->t + 9*(0+2*six))+3)[2])) + (( (sctx->t + 9*(0+2*six))+3)[2]))), (((Txp)+6)[0] = ((((coords [1])))*((((sctx->t + 9*(0+2*sixy))+6)[0]) - (((sctx->t + 9*(0+2*six))+6)[0])) + (((sctx->t + 9*(0+2*six))+6)[0])), ((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9*(0+2*sixy ))+6)[1]) - (((sctx->t + 9*(0+2*six))+6)[1])) + (((sctx-> t + 9*(0+2*six))+6)[1])), ((Txp)+6)[2] = ((((coords[1])))*((( (sctx->t + 9*(0+2*sixy))+6)[2]) - (((sctx->t + 9*(0+2*six ))+6)[2])) + (((sctx->t + 9*(0+2*six))+6)[2])))); | |||||
| 540 | ELL_3V_LERP(gxp, coords[1], sctx->grad + 3*(0+2*six),((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*sixy))[0 ]) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3 *(0+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad + 3*(0+2*sixy))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + (( sctx->grad + 3*(0+2*six))[1])), (gxp)[2] = (((coords[1]))* (((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0 +2*six))[2])) + ((sctx->grad + 3*(0+2*six))[2]))) | |||||
| 541 | sctx->grad + 3*(0+2*sixy))((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*sixy))[0 ]) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3 *(0+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad + 3*(0+2*sixy))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + (( sctx->grad + 3*(0+2*six))[1])), (gxp)[2] = (((coords[1]))* (((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0 +2*six))[2])) + ((sctx->grad + 3*(0+2*six))[2]))); | |||||
| 542 | ||||||
| 543 | ELL_3M_LERP(Tym, coords[0], sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*six))((((Tym)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(0+2*six ))+0)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx-> t + 9*(0+2*si))+0)[0])), ((Tym)+0)[1] = ((((coords[0])))*(((( sctx->t + 9*(0+2*six))+0)[1]) - (((sctx->t + 9*(0+2*si) )+0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Tym)+0)[2] = ((((coords[0])))*((((sctx->t + 9*(0+2*six))+0)[2]) - (( (sctx->t + 9*(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si ))+0)[2]))), (((Tym)+3)[0] = ((((coords[0])))*((((sctx->t + 9*(0+2*six))+3)[0]) - (((sctx->t + 9*(0+2*si))+3)[0])) + ( ((sctx->t + 9*(0+2*si))+3)[0])), ((Tym)+3)[1] = ((((coords [0])))*((((sctx->t + 9*(0+2*six))+3)[1]) - (((sctx->t + 9*(0+2*si))+3)[1])) + (((sctx->t + 9*(0+2*si))+3)[1])), ( (Tym)+3)[2] = ((((coords[0])))*((((sctx->t + 9*(0+2*six))+ 3)[2]) - (((sctx->t + 9*(0+2*si))+3)[2])) + (((sctx->t + 9*(0+2*si))+3)[2]))), (((Tym)+6)[0] = ((((coords[0])))*((((sctx ->t + 9*(0+2*six))+6)[0]) - (((sctx->t + 9*(0+2*si))+6) [0])) + (((sctx->t + 9*(0+2*si))+6)[0])), ((Tym)+6)[1] = ( (((coords[0])))*((((sctx->t + 9*(0+2*six))+6)[1]) - (((sctx ->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si))+6) [1])), ((Tym)+6)[2] = ((((coords[0])))*((((sctx->t + 9*(0+ 2*six))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx ->t + 9*(0+2*si))+6)[2])))); | |||||
| 544 | ELL_3V_LERP(gym, coords[0], sctx->grad + 3*(0+2*si),((gym)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*six))[0] ) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3* (0+2*si))[0])), (gym)[1] = (((coords[0]))*(((sctx->grad + 3 *(0+2*six))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx ->grad + 3*(0+2*si))[1])), (gym)[2] = (((coords[0]))*(((sctx ->grad + 3*(0+2*six))[2]) - ((sctx->grad + 3*(0+2*si))[ 2])) + ((sctx->grad + 3*(0+2*si))[2]))) | |||||
| 545 | sctx->grad + 3*(0+2*six))((gym)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*six))[0] ) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3* (0+2*si))[0])), (gym)[1] = (((coords[0]))*(((sctx->grad + 3 *(0+2*six))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx ->grad + 3*(0+2*si))[1])), (gym)[2] = (((coords[0]))*(((sctx ->grad + 3*(0+2*six))[2]) - ((sctx->grad + 3*(0+2*si))[ 2])) + ((sctx->grad + 3*(0+2*si))[2]))); | |||||
| 546 | ELL_3M_LERP(Typ, coords[0], sctx->t + 9*(0+2*siy), sctx->t + 9*(0+2*sixy))((((Typ)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(0+2*sixy ))+0)[0]) - (((sctx->t + 9*(0+2*siy))+0)[0])) + (((sctx-> t + 9*(0+2*siy))+0)[0])), ((Typ)+0)[1] = ((((coords[0])))*((( (sctx->t + 9*(0+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2*siy ))+0)[1])) + (((sctx->t + 9*(0+2*siy))+0)[1])), ((Typ)+0)[ 2] = ((((coords[0])))*((((sctx->t + 9*(0+2*sixy))+0)[2]) - (((sctx->t + 9*(0+2*siy))+0)[2])) + (((sctx->t + 9*(0+ 2*siy))+0)[2]))), (((Typ)+3)[0] = ((((coords[0])))*((((sctx-> t + 9*(0+2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*siy))+3)[0] )) + (((sctx->t + 9*(0+2*siy))+3)[0])), ((Typ)+3)[1] = ((( (coords[0])))*((((sctx->t + 9*(0+2*sixy))+3)[1]) - (((sctx ->t + 9*(0+2*siy))+3)[1])) + (((sctx->t + 9*(0+2*siy))+ 3)[1])), ((Typ)+3)[2] = ((((coords[0])))*((((sctx->t + 9*( 0+2*sixy))+3)[2]) - (((sctx->t + 9*(0+2*siy))+3)[2])) + (( (sctx->t + 9*(0+2*siy))+3)[2]))), (((Typ)+6)[0] = ((((coords [0])))*((((sctx->t + 9*(0+2*sixy))+6)[0]) - (((sctx->t + 9*(0+2*siy))+6)[0])) + (((sctx->t + 9*(0+2*siy))+6)[0])), ((Typ)+6)[1] = ((((coords[0])))*((((sctx->t + 9*(0+2*sixy ))+6)[1]) - (((sctx->t + 9*(0+2*siy))+6)[1])) + (((sctx-> t + 9*(0+2*siy))+6)[1])), ((Typ)+6)[2] = ((((coords[0])))*((( (sctx->t + 9*(0+2*sixy))+6)[2]) - (((sctx->t + 9*(0+2*siy ))+6)[2])) + (((sctx->t + 9*(0+2*siy))+6)[2])))); | |||||
| 547 | ELL_3V_LERP(gyp, coords[0], sctx->grad + 3*(0+2*siy),((gyp)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*sixy))[0 ]) - ((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3 *(0+2*siy))[0])), (gyp)[1] = (((coords[0]))*(((sctx->grad + 3*(0+2*sixy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + (( sctx->grad + 3*(0+2*siy))[1])), (gyp)[2] = (((coords[0]))* (((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0 +2*siy))[2])) + ((sctx->grad + 3*(0+2*siy))[2]))) | |||||
| 548 | sctx->grad + 3*(0+2*sixy))((gyp)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*sixy))[0 ]) - ((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3 *(0+2*siy))[0])), (gyp)[1] = (((coords[0]))*(((sctx->grad + 3*(0+2*sixy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + (( sctx->grad + 3*(0+2*siy))[1])), (gyp)[2] = (((coords[0]))* (((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0 +2*siy))[2])) + ((sctx->grad + 3*(0+2*siy))[2]))); | |||||
| 549 | ||||||
| 550 | ELL_3M_LERP(T, coords[0], Txm, Txp)((((T)+0)[0] = ((((coords[0])))*((((Txp)+0)[0]) - (((Txm)+0)[ 0])) + (((Txm)+0)[0])), ((T)+0)[1] = ((((coords[0])))*((((Txp )+0)[1]) - (((Txm)+0)[1])) + (((Txm)+0)[1])), ((T)+0)[2] = (( ((coords[0])))*((((Txp)+0)[2]) - (((Txm)+0)[2])) + (((Txm)+0) [2]))), (((T)+3)[0] = ((((coords[0])))*((((Txp)+3)[0]) - (((Txm )+3)[0])) + (((Txm)+3)[0])), ((T)+3)[1] = ((((coords[0])))*(( ((Txp)+3)[1]) - (((Txm)+3)[1])) + (((Txm)+3)[1])), ((T)+3)[2] = ((((coords[0])))*((((Txp)+3)[2]) - (((Txm)+3)[2])) + (((Txm )+3)[2]))), (((T)+6)[0] = ((((coords[0])))*((((Txp)+6)[0]) - ( ((Txm)+6)[0])) + (((Txm)+6)[0])), ((T)+6)[1] = ((((coords[0]) ))*((((Txp)+6)[1]) - (((Txm)+6)[1])) + (((Txm)+6)[1])), ((T)+ 6)[2] = ((((coords[0])))*((((Txp)+6)[2]) - (((Txm)+6)[2])) + ( ((Txm)+6)[2])))); | |||||
| 551 | ELL_3V_LERP(g, coords[0], gxm, gxp)((g)[0] = (((coords[0]))*(((gxp)[0]) - ((gxm)[0])) + ((gxm)[0 ])), (g)[1] = (((coords[0]))*(((gxp)[1]) - ((gxm)[1])) + ((gxm )[1])), (g)[2] = (((coords[0]))*(((gxp)[2]) - ((gxm)[2])) + ( (gxm)[2]))); | |||||
| 552 | ||||||
| 553 | computeGradientLin(sctx->facenorm+3*(faceid+4*si), T, g, | |||||
| 554 | Txm, gxm, Txp, gxp, | |||||
| 555 | Tym, gym, Typ, gyp, | |||||
| 556 | T, g, Tzp, gzp); | |||||
| 557 | break; | |||||
| 558 | case 1: | |||||
| 559 | /* bilinearly interpolate Typ/gyp first */ | |||||
| 560 | if (yi!=sy-1) { | |||||
| 561 | ELL_3M_LERP(Txm, coords[1], sctx->t + 9*(0+2*siy), sctx->t + 9*(1+2*siy))((((Txm)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy ))+0)[0]) - (((sctx->t + 9*(0+2*siy))+0)[0])) + (((sctx-> t + 9*(0+2*siy))+0)[0])), ((Txm)+0)[1] = ((((coords[1])))*((( (sctx->t + 9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*siy ))+0)[1])) + (((sctx->t + 9*(0+2*siy))+0)[1])), ((Txm)+0)[ 2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+0)[2]) - ( ((sctx->t + 9*(0+2*siy))+0)[2])) + (((sctx->t + 9*(0+2* siy))+0)[2]))), (((Txm)+3)[0] = ((((coords[1])))*((((sctx-> t + 9*(1+2*siy))+3)[0]) - (((sctx->t + 9*(0+2*siy))+3)[0]) ) + (((sctx->t + 9*(0+2*siy))+3)[0])), ((Txm)+3)[1] = (((( coords[1])))*((((sctx->t + 9*(1+2*siy))+3)[1]) - (((sctx-> t + 9*(0+2*siy))+3)[1])) + (((sctx->t + 9*(0+2*siy))+3)[1] )), ((Txm)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy ))+3)[2]) - (((sctx->t + 9*(0+2*siy))+3)[2])) + (((sctx-> t + 9*(0+2*siy))+3)[2]))), (((Txm)+6)[0] = ((((coords[1])))*( (((sctx->t + 9*(1+2*siy))+6)[0]) - (((sctx->t + 9*(0+2* siy))+6)[0])) + (((sctx->t + 9*(0+2*siy))+6)[0])), ((Txm)+ 6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+6)[1]) - (((sctx->t + 9*(0+2*siy))+6)[1])) + (((sctx->t + 9*( 0+2*siy))+6)[1])), ((Txm)+6)[2] = ((((coords[1])))*((((sctx-> t + 9*(1+2*siy))+6)[2]) - (((sctx->t + 9*(0+2*siy))+6)[2]) ) + (((sctx->t + 9*(0+2*siy))+6)[2])))); | |||||
| 562 | ELL_3V_LERP(gxm, coords[1], sctx->grad + 3*(0+2*siy),((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0] ) - ((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3 *(0+2*siy))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx ->grad + 3*(0+2*siy))[1])), (gxm)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(0+2*siy)) [2])) + ((sctx->grad + 3*(0+2*siy))[2]))) | |||||
| 563 | sctx->grad + 3*(1+2*siy))((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0] ) - ((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3 *(0+2*siy))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx ->grad + 3*(0+2*siy))[1])), (gxm)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(0+2*siy)) [2])) + ((sctx->grad + 3*(0+2*siy))[2]))); | |||||
| 564 | ELL_3M_LERP(Txp, coords[1], sctx->t + 9*(0+2*sixy),((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy ))+0)[0]) - (((sctx->t + 9*(0+2*sixy))+0)[0])) + (((sctx-> t + 9*(0+2*sixy))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*(( ((sctx->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2* sixy))+0)[1])) + (((sctx->t + 9*(0+2*sixy))+0)[1])), ((Txp )+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+0)[ 2]) - (((sctx->t + 9*(0+2*sixy))+0)[2])) + (((sctx->t + 9*(0+2*sixy))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*((( (sctx->t + 9*(1+2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*sixy ))+3)[0])) + (((sctx->t + 9*(0+2*sixy))+3)[0])), ((Txp)+3) [1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+3)[1]) - (((sctx->t + 9*(0+2*sixy))+3)[1])) + (((sctx->t + 9*(0 +2*sixy))+3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx-> t + 9*(1+2*sixy))+3)[2]) - (((sctx->t + 9*(0+2*sixy))+3)[2 ])) + (((sctx->t + 9*(0+2*sixy))+3)[2]))), (((Txp)+6)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - ((( sctx->t + 9*(0+2*sixy))+6)[0])) + (((sctx->t + 9*(0+2*sixy ))+6)[0])), ((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9 *(1+2*sixy))+6)[1]) - (((sctx->t + 9*(0+2*sixy))+6)[1])) + (((sctx->t + 9*(0+2*sixy))+6)[1])), ((Txp)+6)[2] = ((((coords [1])))*((((sctx->t + 9*(1+2*sixy))+6)[2]) - (((sctx->t + 9*(0+2*sixy))+6)[2])) + (((sctx->t + 9*(0+2*sixy))+6)[2]) ))) | |||||
| 565 | sctx->t + 9*(1+2*sixy))((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy ))+0)[0]) - (((sctx->t + 9*(0+2*sixy))+0)[0])) + (((sctx-> t + 9*(0+2*sixy))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*(( ((sctx->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2* sixy))+0)[1])) + (((sctx->t + 9*(0+2*sixy))+0)[1])), ((Txp )+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+0)[ 2]) - (((sctx->t + 9*(0+2*sixy))+0)[2])) + (((sctx->t + 9*(0+2*sixy))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*((( (sctx->t + 9*(1+2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*sixy ))+3)[0])) + (((sctx->t + 9*(0+2*sixy))+3)[0])), ((Txp)+3) [1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+3)[1]) - (((sctx->t + 9*(0+2*sixy))+3)[1])) + (((sctx->t + 9*(0 +2*sixy))+3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx-> t + 9*(1+2*sixy))+3)[2]) - (((sctx->t + 9*(0+2*sixy))+3)[2 ])) + (((sctx->t + 9*(0+2*sixy))+3)[2]))), (((Txp)+6)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - ((( sctx->t + 9*(0+2*sixy))+6)[0])) + (((sctx->t + 9*(0+2*sixy ))+6)[0])), ((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9 *(1+2*sixy))+6)[1]) - (((sctx->t + 9*(0+2*sixy))+6)[1])) + (((sctx->t + 9*(0+2*sixy))+6)[1])), ((Txp)+6)[2] = ((((coords [1])))*((((sctx->t + 9*(1+2*sixy))+6)[2]) - (((sctx->t + 9*(0+2*sixy))+6)[2])) + (((sctx->t + 9*(0+2*sixy))+6)[2]) ))); | |||||
| 566 | ELL_3V_LERP(gxp, coords[1], sctx->grad + 3*(0+2*sixy),((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0 ]) - ((sctx->grad + 3*(0+2*sixy))[0])) + ((sctx->grad + 3*(0+2*sixy))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[1]) - ((sctx->grad + 3*(0+2*sixy))[1])) + ((sctx->grad + 3*(0+2*sixy))[1])), (gxp)[2] = (((coords[1 ]))*(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3 *(0+2*sixy))[2])) + ((sctx->grad + 3*(0+2*sixy))[2]))) | |||||
| 567 | sctx->grad + 3*(1+2*sixy))((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0 ]) - ((sctx->grad + 3*(0+2*sixy))[0])) + ((sctx->grad + 3*(0+2*sixy))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[1]) - ((sctx->grad + 3*(0+2*sixy))[1])) + ((sctx->grad + 3*(0+2*sixy))[1])), (gxp)[2] = (((coords[1 ]))*(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3 *(0+2*sixy))[2])) + ((sctx->grad + 3*(0+2*sixy))[2]))); | |||||
| 568 | ELL_3M_LERP(Typ, coords[0], Txm, Txp)((((Typ)+0)[0] = ((((coords[0])))*((((Txp)+0)[0]) - (((Txm)+0 )[0])) + (((Txm)+0)[0])), ((Typ)+0)[1] = ((((coords[0])))*((( (Txp)+0)[1]) - (((Txm)+0)[1])) + (((Txm)+0)[1])), ((Typ)+0)[2 ] = ((((coords[0])))*((((Txp)+0)[2]) - (((Txm)+0)[2])) + (((Txm )+0)[2]))), (((Typ)+3)[0] = ((((coords[0])))*((((Txp)+3)[0]) - (((Txm)+3)[0])) + (((Txm)+3)[0])), ((Typ)+3)[1] = ((((coords [0])))*((((Txp)+3)[1]) - (((Txm)+3)[1])) + (((Txm)+3)[1])), ( (Typ)+3)[2] = ((((coords[0])))*((((Txp)+3)[2]) - (((Txm)+3)[2 ])) + (((Txm)+3)[2]))), (((Typ)+6)[0] = ((((coords[0])))*(((( Txp)+6)[0]) - (((Txm)+6)[0])) + (((Txm)+6)[0])), ((Typ)+6)[1] = ((((coords[0])))*((((Txp)+6)[1]) - (((Txm)+6)[1])) + (((Txm )+6)[1])), ((Typ)+6)[2] = ((((coords[0])))*((((Txp)+6)[2]) - ( ((Txm)+6)[2])) + (((Txm)+6)[2])))); | |||||
| 569 | ELL_3V_LERP(gyp, coords[0], gxm, gxp)((gyp)[0] = (((coords[0]))*(((gxp)[0]) - ((gxm)[0])) + ((gxm) [0])), (gyp)[1] = (((coords[0]))*(((gxp)[1]) - ((gxm)[1])) + ( (gxm)[1])), (gyp)[2] = (((coords[0]))*(((gxp)[2]) - ((gxm)[2] )) + ((gxm)[2]))); | |||||
| 570 | } else { | |||||
| 571 | ELL_3M_LERP(Txm, coords[1], sctx->t + 9*(0+2*siY), sctx->t + 9*(1+2*siY))((((Txm)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siY ))+0)[0]) - (((sctx->t + 9*(0+2*siY))+0)[0])) + (((sctx-> t + 9*(0+2*siY))+0)[0])), ((Txm)+0)[1] = ((((coords[1])))*((( (sctx->t + 9*(1+2*siY))+0)[1]) - (((sctx->t + 9*(0+2*siY ))+0)[1])) + (((sctx->t + 9*(0+2*siY))+0)[1])), ((Txm)+0)[ 2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siY))+0)[2]) - ( ((sctx->t + 9*(0+2*siY))+0)[2])) + (((sctx->t + 9*(0+2* siY))+0)[2]))), (((Txm)+3)[0] = ((((coords[1])))*((((sctx-> t + 9*(1+2*siY))+3)[0]) - (((sctx->t + 9*(0+2*siY))+3)[0]) ) + (((sctx->t + 9*(0+2*siY))+3)[0])), ((Txm)+3)[1] = (((( coords[1])))*((((sctx->t + 9*(1+2*siY))+3)[1]) - (((sctx-> t + 9*(0+2*siY))+3)[1])) + (((sctx->t + 9*(0+2*siY))+3)[1] )), ((Txm)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siY ))+3)[2]) - (((sctx->t + 9*(0+2*siY))+3)[2])) + (((sctx-> t + 9*(0+2*siY))+3)[2]))), (((Txm)+6)[0] = ((((coords[1])))*( (((sctx->t + 9*(1+2*siY))+6)[0]) - (((sctx->t + 9*(0+2* siY))+6)[0])) + (((sctx->t + 9*(0+2*siY))+6)[0])), ((Txm)+ 6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*siY))+6)[1]) - (((sctx->t + 9*(0+2*siY))+6)[1])) + (((sctx->t + 9*( 0+2*siY))+6)[1])), ((Txm)+6)[2] = ((((coords[1])))*((((sctx-> t + 9*(1+2*siY))+6)[2]) - (((sctx->t + 9*(0+2*siY))+6)[2]) ) + (((sctx->t + 9*(0+2*siY))+6)[2])))); | |||||
| 572 | ELL_3V_LERP(gxm, coords[1], sctx->grad + 3*(0+2*siY),((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siY))[0] ) - ((sctx->grad + 3*(0+2*siY))[0])) + ((sctx->grad + 3 *(0+2*siY))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*siY))[1]) - ((sctx->grad + 3*(0+2*siY))[1])) + ((sctx ->grad + 3*(0+2*siY))[1])), (gxm)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*siY))[2]) - ((sctx->grad + 3*(0+2*siY)) [2])) + ((sctx->grad + 3*(0+2*siY))[2]))) | |||||
| 573 | sctx->grad + 3*(1+2*siY))((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siY))[0] ) - ((sctx->grad + 3*(0+2*siY))[0])) + ((sctx->grad + 3 *(0+2*siY))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*siY))[1]) - ((sctx->grad + 3*(0+2*siY))[1])) + ((sctx ->grad + 3*(0+2*siY))[1])), (gxm)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*siY))[2]) - ((sctx->grad + 3*(0+2*siY)) [2])) + ((sctx->grad + 3*(0+2*siY))[2]))); | |||||
| 574 | ELL_3M_LERP(Txp, coords[1], sctx->t + 9*(0+2*sixY),((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixY ))+0)[0]) - (((sctx->t + 9*(0+2*sixY))+0)[0])) + (((sctx-> t + 9*(0+2*sixY))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*(( ((sctx->t + 9*(1+2*sixY))+0)[1]) - (((sctx->t + 9*(0+2* sixY))+0)[1])) + (((sctx->t + 9*(0+2*sixY))+0)[1])), ((Txp )+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixY))+0)[ 2]) - (((sctx->t + 9*(0+2*sixY))+0)[2])) + (((sctx->t + 9*(0+2*sixY))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*((( (sctx->t + 9*(1+2*sixY))+3)[0]) - (((sctx->t + 9*(0+2*sixY ))+3)[0])) + (((sctx->t + 9*(0+2*sixY))+3)[0])), ((Txp)+3) [1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixY))+3)[1]) - (((sctx->t + 9*(0+2*sixY))+3)[1])) + (((sctx->t + 9*(0 +2*sixY))+3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx-> t + 9*(1+2*sixY))+3)[2]) - (((sctx->t + 9*(0+2*sixY))+3)[2 ])) + (((sctx->t + 9*(0+2*sixY))+3)[2]))), (((Txp)+6)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixY))+6)[0]) - ((( sctx->t + 9*(0+2*sixY))+6)[0])) + (((sctx->t + 9*(0+2*sixY ))+6)[0])), ((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9 *(1+2*sixY))+6)[1]) - (((sctx->t + 9*(0+2*sixY))+6)[1])) + (((sctx->t + 9*(0+2*sixY))+6)[1])), ((Txp)+6)[2] = ((((coords [1])))*((((sctx->t + 9*(1+2*sixY))+6)[2]) - (((sctx->t + 9*(0+2*sixY))+6)[2])) + (((sctx->t + 9*(0+2*sixY))+6)[2]) ))) | |||||
| 575 | sctx->t + 9*(1+2*sixY))((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixY ))+0)[0]) - (((sctx->t + 9*(0+2*sixY))+0)[0])) + (((sctx-> t + 9*(0+2*sixY))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*(( ((sctx->t + 9*(1+2*sixY))+0)[1]) - (((sctx->t + 9*(0+2* sixY))+0)[1])) + (((sctx->t + 9*(0+2*sixY))+0)[1])), ((Txp )+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixY))+0)[ 2]) - (((sctx->t + 9*(0+2*sixY))+0)[2])) + (((sctx->t + 9*(0+2*sixY))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*((( (sctx->t + 9*(1+2*sixY))+3)[0]) - (((sctx->t + 9*(0+2*sixY ))+3)[0])) + (((sctx->t + 9*(0+2*sixY))+3)[0])), ((Txp)+3) [1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixY))+3)[1]) - (((sctx->t + 9*(0+2*sixY))+3)[1])) + (((sctx->t + 9*(0 +2*sixY))+3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx-> t + 9*(1+2*sixY))+3)[2]) - (((sctx->t + 9*(0+2*sixY))+3)[2 ])) + (((sctx->t + 9*(0+2*sixY))+3)[2]))), (((Txp)+6)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixY))+6)[0]) - ((( sctx->t + 9*(0+2*sixY))+6)[0])) + (((sctx->t + 9*(0+2*sixY ))+6)[0])), ((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9 *(1+2*sixY))+6)[1]) - (((sctx->t + 9*(0+2*sixY))+6)[1])) + (((sctx->t + 9*(0+2*sixY))+6)[1])), ((Txp)+6)[2] = ((((coords [1])))*((((sctx->t + 9*(1+2*sixY))+6)[2]) - (((sctx->t + 9*(0+2*sixY))+6)[2])) + (((sctx->t + 9*(0+2*sixY))+6)[2]) ))); | |||||
| 576 | ELL_3V_LERP(gxp, coords[1], sctx->grad + 3*(0+2*sixY),((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixY))[0 ]) - ((sctx->grad + 3*(0+2*sixY))[0])) + ((sctx->grad + 3*(0+2*sixY))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixY))[1]) - ((sctx->grad + 3*(0+2*sixY))[1])) + ((sctx->grad + 3*(0+2*sixY))[1])), (gxp)[2] = (((coords[1 ]))*(((sctx->grad + 3*(1+2*sixY))[2]) - ((sctx->grad + 3 *(0+2*sixY))[2])) + ((sctx->grad + 3*(0+2*sixY))[2]))) | |||||
| 577 | sctx->grad + 3*(1+2*sixY))((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixY))[0 ]) - ((sctx->grad + 3*(0+2*sixY))[0])) + ((sctx->grad + 3*(0+2*sixY))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixY))[1]) - ((sctx->grad + 3*(0+2*sixY))[1])) + ((sctx->grad + 3*(0+2*sixY))[1])), (gxp)[2] = (((coords[1 ]))*(((sctx->grad + 3*(1+2*sixY))[2]) - ((sctx->grad + 3 *(0+2*sixY))[2])) + ((sctx->grad + 3*(0+2*sixY))[2]))); | |||||
| 578 | ELL_3M_LERP(Tym, coords[0], Txm, Txp)((((Tym)+0)[0] = ((((coords[0])))*((((Txp)+0)[0]) - (((Txm)+0 )[0])) + (((Txm)+0)[0])), ((Tym)+0)[1] = ((((coords[0])))*((( (Txp)+0)[1]) - (((Txm)+0)[1])) + (((Txm)+0)[1])), ((Tym)+0)[2 ] = ((((coords[0])))*((((Txp)+0)[2]) - (((Txm)+0)[2])) + (((Txm )+0)[2]))), (((Tym)+3)[0] = ((((coords[0])))*((((Txp)+3)[0]) - (((Txm)+3)[0])) + (((Txm)+3)[0])), ((Tym)+3)[1] = ((((coords [0])))*((((Txp)+3)[1]) - (((Txm)+3)[1])) + (((Txm)+3)[1])), ( (Tym)+3)[2] = ((((coords[0])))*((((Txp)+3)[2]) - (((Txm)+3)[2 ])) + (((Txm)+3)[2]))), (((Tym)+6)[0] = ((((coords[0])))*(((( Txp)+6)[0]) - (((Txm)+6)[0])) + (((Txm)+6)[0])), ((Tym)+6)[1] = ((((coords[0])))*((((Txp)+6)[1]) - (((Txm)+6)[1])) + (((Txm )+6)[1])), ((Tym)+6)[2] = ((((coords[0])))*((((Txp)+6)[2]) - ( ((Txm)+6)[2])) + (((Txm)+6)[2])))); | |||||
| 579 | ELL_3V_LERP(gym, coords[0], gxm, gxp)((gym)[0] = (((coords[0]))*(((gxp)[0]) - ((gxm)[0])) + ((gxm) [0])), (gym)[1] = (((coords[0]))*(((gxp)[1]) - ((gxm)[1])) + ( (gxm)[1])), (gym)[2] = (((coords[0]))*(((gxp)[2]) - ((gxm)[2] )) + ((gxm)[2]))); | |||||
| 580 | } | |||||
| 581 | /* now, compute remaining points */ | |||||
| 582 | ELL_3M_LERP(Txm, coords[1], sctx->t + 9*(0+2*si), sctx->t + 9*(1+2*si))((((Txm)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*si) )+0)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx-> t + 9*(0+2*si))+0)[0])), ((Txm)+0)[1] = ((((coords[1])))*(((( sctx->t + 9*(1+2*si))+0)[1]) - (((sctx->t + 9*(0+2*si)) +0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Txm)+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*si))+0)[2]) - (((sctx ->t + 9*(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si))+0) [2]))), (((Txm)+3)[0] = ((((coords[1])))*((((sctx->t + 9*( 1+2*si))+3)[0]) - (((sctx->t + 9*(0+2*si))+3)[0])) + (((sctx ->t + 9*(0+2*si))+3)[0])), ((Txm)+3)[1] = ((((coords[1]))) *((((sctx->t + 9*(1+2*si))+3)[1]) - (((sctx->t + 9*(0+2 *si))+3)[1])) + (((sctx->t + 9*(0+2*si))+3)[1])), ((Txm)+3 )[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*si))+3)[2]) - (((sctx->t + 9*(0+2*si))+3)[2])) + (((sctx->t + 9*(0+2 *si))+3)[2]))), (((Txm)+6)[0] = ((((coords[1])))*((((sctx-> t + 9*(1+2*si))+6)[0]) - (((sctx->t + 9*(0+2*si))+6)[0])) + (((sctx->t + 9*(0+2*si))+6)[0])), ((Txm)+6)[1] = ((((coords [1])))*((((sctx->t + 9*(1+2*si))+6)[1]) - (((sctx->t + 9 *(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si))+6)[1])), ((Txm )+6)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*si))+6)[2] ) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx->t + 9*( 0+2*si))+6)[2])))); | |||||
| 583 | ELL_3V_LERP(gxm, coords[1], sctx->grad + 3*(0+2*si),((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*si))[0]) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*( 0+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3 *(1+2*si))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx-> grad + 3*(0+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx-> grad + 3*(1+2*si))[2]) - ((sctx->grad + 3*(0+2*si))[2])) + ((sctx->grad + 3*(0+2*si))[2]))) | |||||
| 584 | sctx->grad + 3*(1+2*si))((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*si))[0]) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*( 0+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3 *(1+2*si))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx-> grad + 3*(0+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx-> grad + 3*(1+2*si))[2]) - ((sctx->grad + 3*(0+2*si))[2])) + ((sctx->grad + 3*(0+2*si))[2]))); | |||||
| 585 | ELL_3M_LERP(Txp, coords[1], sctx->t + 9*(0+2*six), sctx->t + 9*(1+2*six))((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*six ))+0)[0]) - (((sctx->t + 9*(0+2*six))+0)[0])) + (((sctx-> t + 9*(0+2*six))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*((( (sctx->t + 9*(1+2*six))+0)[1]) - (((sctx->t + 9*(0+2*six ))+0)[1])) + (((sctx->t + 9*(0+2*six))+0)[1])), ((Txp)+0)[ 2] = ((((coords[1])))*((((sctx->t + 9*(1+2*six))+0)[2]) - ( ((sctx->t + 9*(0+2*six))+0)[2])) + (((sctx->t + 9*(0+2* six))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*((((sctx-> t + 9*(1+2*six))+3)[0]) - (((sctx->t + 9*(0+2*six))+3)[0]) ) + (((sctx->t + 9*(0+2*six))+3)[0])), ((Txp)+3)[1] = (((( coords[1])))*((((sctx->t + 9*(1+2*six))+3)[1]) - (((sctx-> t + 9*(0+2*six))+3)[1])) + (((sctx->t + 9*(0+2*six))+3)[1] )), ((Txp)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*six ))+3)[2]) - (((sctx->t + 9*(0+2*six))+3)[2])) + (((sctx-> t + 9*(0+2*six))+3)[2]))), (((Txp)+6)[0] = ((((coords[1])))*( (((sctx->t + 9*(1+2*six))+6)[0]) - (((sctx->t + 9*(0+2* six))+6)[0])) + (((sctx->t + 9*(0+2*six))+6)[0])), ((Txp)+ 6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*six))+6)[1]) - (((sctx->t + 9*(0+2*six))+6)[1])) + (((sctx->t + 9*( 0+2*six))+6)[1])), ((Txp)+6)[2] = ((((coords[1])))*((((sctx-> t + 9*(1+2*six))+6)[2]) - (((sctx->t + 9*(0+2*six))+6)[2]) ) + (((sctx->t + 9*(0+2*six))+6)[2])))); | |||||
| 586 | ELL_3V_LERP(gxp, coords[1], sctx->grad + 3*(0+2*six),((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*six))[0] ) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3 *(0+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*six))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx ->grad + 3*(0+2*six))[1])), (gxp)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(0+2*six)) [2])) + ((sctx->grad + 3*(0+2*six))[2]))) | |||||
| 587 | sctx->grad + 3*(1+2*six))((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*six))[0] ) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3 *(0+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*six))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx ->grad + 3*(0+2*six))[1])), (gxp)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(0+2*six)) [2])) + ((sctx->grad + 3*(0+2*six))[2]))); | |||||
| 588 | ||||||
| 589 | ELL_3M_LERP(Tzm, coords[0], sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*six))((((Tzm)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(0+2*six ))+0)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx-> t + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((((coords[0])))*(((( sctx->t + 9*(0+2*six))+0)[1]) - (((sctx->t + 9*(0+2*si) )+0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Tzm)+0)[2] = ((((coords[0])))*((((sctx->t + 9*(0+2*six))+0)[2]) - (( (sctx->t + 9*(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si ))+0)[2]))), (((Tzm)+3)[0] = ((((coords[0])))*((((sctx->t + 9*(0+2*six))+3)[0]) - (((sctx->t + 9*(0+2*si))+3)[0])) + ( ((sctx->t + 9*(0+2*si))+3)[0])), ((Tzm)+3)[1] = ((((coords [0])))*((((sctx->t + 9*(0+2*six))+3)[1]) - (((sctx->t + 9*(0+2*si))+3)[1])) + (((sctx->t + 9*(0+2*si))+3)[1])), ( (Tzm)+3)[2] = ((((coords[0])))*((((sctx->t + 9*(0+2*six))+ 3)[2]) - (((sctx->t + 9*(0+2*si))+3)[2])) + (((sctx->t + 9*(0+2*si))+3)[2]))), (((Tzm)+6)[0] = ((((coords[0])))*((((sctx ->t + 9*(0+2*six))+6)[0]) - (((sctx->t + 9*(0+2*si))+6) [0])) + (((sctx->t + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = ( (((coords[0])))*((((sctx->t + 9*(0+2*six))+6)[1]) - (((sctx ->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si))+6) [1])), ((Tzm)+6)[2] = ((((coords[0])))*((((sctx->t + 9*(0+ 2*six))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx ->t + 9*(0+2*si))+6)[2])))); | |||||
| 590 | ELL_3V_LERP(gzm, coords[0], sctx->grad + 3*(0+2*si),((gzm)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*six))[0] ) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3* (0+2*si))[0])), (gzm)[1] = (((coords[0]))*(((sctx->grad + 3 *(0+2*six))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx ->grad + 3*(0+2*si))[1])), (gzm)[2] = (((coords[0]))*(((sctx ->grad + 3*(0+2*six))[2]) - ((sctx->grad + 3*(0+2*si))[ 2])) + ((sctx->grad + 3*(0+2*si))[2]))) | |||||
| 591 | sctx->grad + 3*(0+2*six))((gzm)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*six))[0] ) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3* (0+2*si))[0])), (gzm)[1] = (((coords[0]))*(((sctx->grad + 3 *(0+2*six))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx ->grad + 3*(0+2*si))[1])), (gzm)[2] = (((coords[0]))*(((sctx ->grad + 3*(0+2*six))[2]) - ((sctx->grad + 3*(0+2*si))[ 2])) + ((sctx->grad + 3*(0+2*si))[2]))); | |||||
| 592 | ELL_3M_LERP(Tzp, coords[0], sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*six))((((Tzp)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(1+2*six ))+0)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx-> t + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((((coords[0])))*(((( sctx->t + 9*(1+2*six))+0)[1]) - (((sctx->t + 9*(1+2*si) )+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Tzp)+0)[2] = ((((coords[0])))*((((sctx->t + 9*(1+2*six))+0)[2]) - (( (sctx->t + 9*(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2*si ))+0)[2]))), (((Tzp)+3)[0] = ((((coords[0])))*((((sctx->t + 9*(1+2*six))+3)[0]) - (((sctx->t + 9*(1+2*si))+3)[0])) + ( ((sctx->t + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = ((((coords [0])))*((((sctx->t + 9*(1+2*six))+3)[1]) - (((sctx->t + 9*(1+2*si))+3)[1])) + (((sctx->t + 9*(1+2*si))+3)[1])), ( (Tzp)+3)[2] = ((((coords[0])))*((((sctx->t + 9*(1+2*six))+ 3)[2]) - (((sctx->t + 9*(1+2*si))+3)[2])) + (((sctx->t + 9*(1+2*si))+3)[2]))), (((Tzp)+6)[0] = ((((coords[0])))*((((sctx ->t + 9*(1+2*six))+6)[0]) - (((sctx->t + 9*(1+2*si))+6) [0])) + (((sctx->t + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1] = ( (((coords[0])))*((((sctx->t + 9*(1+2*six))+6)[1]) - (((sctx ->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9*(1+2*si))+6) [1])), ((Tzp)+6)[2] = ((((coords[0])))*((((sctx->t + 9*(1+ 2*six))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + (((sctx ->t + 9*(1+2*si))+6)[2])))); | |||||
| 593 | ELL_3V_LERP(gzp, coords[0], sctx->grad + 3*(1+2*si),((gzp)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*six))[0] ) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3* (1+2*si))[0])), (gzp)[1] = (((coords[0]))*(((sctx->grad + 3 *(1+2*six))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx ->grad + 3*(1+2*si))[1])), (gzp)[2] = (((coords[0]))*(((sctx ->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(1+2*si))[ 2])) + ((sctx->grad + 3*(1+2*si))[2]))) | |||||
| 594 | sctx->grad + 3*(1+2*six))((gzp)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*six))[0] ) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3* (1+2*si))[0])), (gzp)[1] = (((coords[0]))*(((sctx->grad + 3 *(1+2*six))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx ->grad + 3*(1+2*si))[1])), (gzp)[2] = (((coords[0]))*(((sctx ->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(1+2*si))[ 2])) + ((sctx->grad + 3*(1+2*si))[2]))); | |||||
| 595 | ||||||
| 596 | ELL_3M_LERP(T, coords[0], Txm, Txp)((((T)+0)[0] = ((((coords[0])))*((((Txp)+0)[0]) - (((Txm)+0)[ 0])) + (((Txm)+0)[0])), ((T)+0)[1] = ((((coords[0])))*((((Txp )+0)[1]) - (((Txm)+0)[1])) + (((Txm)+0)[1])), ((T)+0)[2] = (( ((coords[0])))*((((Txp)+0)[2]) - (((Txm)+0)[2])) + (((Txm)+0) [2]))), (((T)+3)[0] = ((((coords[0])))*((((Txp)+3)[0]) - (((Txm )+3)[0])) + (((Txm)+3)[0])), ((T)+3)[1] = ((((coords[0])))*(( ((Txp)+3)[1]) - (((Txm)+3)[1])) + (((Txm)+3)[1])), ((T)+3)[2] = ((((coords[0])))*((((Txp)+3)[2]) - (((Txm)+3)[2])) + (((Txm )+3)[2]))), (((T)+6)[0] = ((((coords[0])))*((((Txp)+6)[0]) - ( ((Txm)+6)[0])) + (((Txm)+6)[0])), ((T)+6)[1] = ((((coords[0]) ))*((((Txp)+6)[1]) - (((Txm)+6)[1])) + (((Txm)+6)[1])), ((T)+ 6)[2] = ((((coords[0])))*((((Txp)+6)[2]) - (((Txm)+6)[2])) + ( ((Txm)+6)[2])))); | |||||
| 597 | ELL_3V_LERP(g, coords[0], gxm, gxp)((g)[0] = (((coords[0]))*(((gxp)[0]) - ((gxm)[0])) + ((gxm)[0 ])), (g)[1] = (((coords[0]))*(((gxp)[1]) - ((gxm)[1])) + ((gxm )[1])), (g)[2] = (((coords[0]))*(((gxp)[2]) - ((gxm)[2])) + ( (gxm)[2]))); | |||||
| 598 | ||||||
| 599 | if (yi!=sy-1) { | |||||
| 600 | computeGradientLin(sctx->facenorm+3*(faceid+4*si), T, g, | |||||
| 601 | Txm, gxm, Txp, gxp, | |||||
| 602 | T, g, Typ, gyp, | |||||
| 603 | Tzm, gzm, Tzp, gzp); | |||||
| 604 | } else { | |||||
| 605 | computeGradientLin(sctx->facenorm+3*(faceid+4*si), T, g, | |||||
| 606 | Txm, gxm, Txp, gxp, | |||||
| 607 | Tym, gym, T, g, | |||||
| 608 | Tzm, gzm, Tzp, gzp); | |||||
| 609 | } | |||||
| 610 | break; | |||||
| 611 | case 2: | |||||
| 612 | /* bilinearly interpolate Txp/gxp first */ | |||||
| 613 | if (xi!=sx-1) { | |||||
| 614 | ELL_3M_LERP(Tym, coords[1], sctx->t + 9*(0+2*six), sctx->t + 9*(1+2*six))((((Tym)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*six ))+0)[0]) - (((sctx->t + 9*(0+2*six))+0)[0])) + (((sctx-> t + 9*(0+2*six))+0)[0])), ((Tym)+0)[1] = ((((coords[1])))*((( (sctx->t + 9*(1+2*six))+0)[1]) - (((sctx->t + 9*(0+2*six ))+0)[1])) + (((sctx->t + 9*(0+2*six))+0)[1])), ((Tym)+0)[ 2] = ((((coords[1])))*((((sctx->t + 9*(1+2*six))+0)[2]) - ( ((sctx->t + 9*(0+2*six))+0)[2])) + (((sctx->t + 9*(0+2* six))+0)[2]))), (((Tym)+3)[0] = ((((coords[1])))*((((sctx-> t + 9*(1+2*six))+3)[0]) - (((sctx->t + 9*(0+2*six))+3)[0]) ) + (((sctx->t + 9*(0+2*six))+3)[0])), ((Tym)+3)[1] = (((( coords[1])))*((((sctx->t + 9*(1+2*six))+3)[1]) - (((sctx-> t + 9*(0+2*six))+3)[1])) + (((sctx->t + 9*(0+2*six))+3)[1] )), ((Tym)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*six ))+3)[2]) - (((sctx->t + 9*(0+2*six))+3)[2])) + (((sctx-> t + 9*(0+2*six))+3)[2]))), (((Tym)+6)[0] = ((((coords[1])))*( (((sctx->t + 9*(1+2*six))+6)[0]) - (((sctx->t + 9*(0+2* six))+6)[0])) + (((sctx->t + 9*(0+2*six))+6)[0])), ((Tym)+ 6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*six))+6)[1]) - (((sctx->t + 9*(0+2*six))+6)[1])) + (((sctx->t + 9*( 0+2*six))+6)[1])), ((Tym)+6)[2] = ((((coords[1])))*((((sctx-> t + 9*(1+2*six))+6)[2]) - (((sctx->t + 9*(0+2*six))+6)[2]) ) + (((sctx->t + 9*(0+2*six))+6)[2])))); | |||||
| 615 | ELL_3V_LERP(gym, coords[1], sctx->grad + 3*(0+2*six),((gym)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*six))[0] ) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3 *(0+2*six))[0])), (gym)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*six))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx ->grad + 3*(0+2*six))[1])), (gym)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(0+2*six)) [2])) + ((sctx->grad + 3*(0+2*six))[2]))) | |||||
| 616 | sctx->grad + 3*(1+2*six))((gym)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*six))[0] ) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3 *(0+2*six))[0])), (gym)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*six))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx ->grad + 3*(0+2*six))[1])), (gym)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(0+2*six)) [2])) + ((sctx->grad + 3*(0+2*six))[2]))); | |||||
| 617 | ELL_3M_LERP(Typ, coords[1], sctx->t + 9*(0+2*sixy),((((Typ)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy ))+0)[0]) - (((sctx->t + 9*(0+2*sixy))+0)[0])) + (((sctx-> t + 9*(0+2*sixy))+0)[0])), ((Typ)+0)[1] = ((((coords[1])))*(( ((sctx->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2* sixy))+0)[1])) + (((sctx->t + 9*(0+2*sixy))+0)[1])), ((Typ )+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+0)[ 2]) - (((sctx->t + 9*(0+2*sixy))+0)[2])) + (((sctx->t + 9*(0+2*sixy))+0)[2]))), (((Typ)+3)[0] = ((((coords[1])))*((( (sctx->t + 9*(1+2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*sixy ))+3)[0])) + (((sctx->t + 9*(0+2*sixy))+3)[0])), ((Typ)+3) [1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+3)[1]) - (((sctx->t + 9*(0+2*sixy))+3)[1])) + (((sctx->t + 9*(0 +2*sixy))+3)[1])), ((Typ)+3)[2] = ((((coords[1])))*((((sctx-> t + 9*(1+2*sixy))+3)[2]) - (((sctx->t + 9*(0+2*sixy))+3)[2 ])) + (((sctx->t + 9*(0+2*sixy))+3)[2]))), (((Typ)+6)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - ((( sctx->t + 9*(0+2*sixy))+6)[0])) + (((sctx->t + 9*(0+2*sixy ))+6)[0])), ((Typ)+6)[1] = ((((coords[1])))*((((sctx->t + 9 *(1+2*sixy))+6)[1]) - (((sctx->t + 9*(0+2*sixy))+6)[1])) + (((sctx->t + 9*(0+2*sixy))+6)[1])), ((Typ)+6)[2] = ((((coords [1])))*((((sctx->t + 9*(1+2*sixy))+6)[2]) - (((sctx->t + 9*(0+2*sixy))+6)[2])) + (((sctx->t + 9*(0+2*sixy))+6)[2]) ))) | |||||
| 618 | sctx->t + 9*(1+2*sixy))((((Typ)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy ))+0)[0]) - (((sctx->t + 9*(0+2*sixy))+0)[0])) + (((sctx-> t + 9*(0+2*sixy))+0)[0])), ((Typ)+0)[1] = ((((coords[1])))*(( ((sctx->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2* sixy))+0)[1])) + (((sctx->t + 9*(0+2*sixy))+0)[1])), ((Typ )+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+0)[ 2]) - (((sctx->t + 9*(0+2*sixy))+0)[2])) + (((sctx->t + 9*(0+2*sixy))+0)[2]))), (((Typ)+3)[0] = ((((coords[1])))*((( (sctx->t + 9*(1+2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*sixy ))+3)[0])) + (((sctx->t + 9*(0+2*sixy))+3)[0])), ((Typ)+3) [1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+3)[1]) - (((sctx->t + 9*(0+2*sixy))+3)[1])) + (((sctx->t + 9*(0 +2*sixy))+3)[1])), ((Typ)+3)[2] = ((((coords[1])))*((((sctx-> t + 9*(1+2*sixy))+3)[2]) - (((sctx->t + 9*(0+2*sixy))+3)[2 ])) + (((sctx->t + 9*(0+2*sixy))+3)[2]))), (((Typ)+6)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - ((( sctx->t + 9*(0+2*sixy))+6)[0])) + (((sctx->t + 9*(0+2*sixy ))+6)[0])), ((Typ)+6)[1] = ((((coords[1])))*((((sctx->t + 9 *(1+2*sixy))+6)[1]) - (((sctx->t + 9*(0+2*sixy))+6)[1])) + (((sctx->t + 9*(0+2*sixy))+6)[1])), ((Typ)+6)[2] = ((((coords [1])))*((((sctx->t + 9*(1+2*sixy))+6)[2]) - (((sctx->t + 9*(0+2*sixy))+6)[2])) + (((sctx->t + 9*(0+2*sixy))+6)[2]) ))); | |||||
| 619 | ELL_3V_LERP(gyp, coords[1], sctx->grad + 3*(0+2*sixy),((gyp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0 ]) - ((sctx->grad + 3*(0+2*sixy))[0])) + ((sctx->grad + 3*(0+2*sixy))[0])), (gyp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[1]) - ((sctx->grad + 3*(0+2*sixy))[1])) + ((sctx->grad + 3*(0+2*sixy))[1])), (gyp)[2] = (((coords[1 ]))*(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3 *(0+2*sixy))[2])) + ((sctx->grad + 3*(0+2*sixy))[2]))) | |||||
| 620 | sctx->grad + 3*(1+2*sixy))((gyp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0 ]) - ((sctx->grad + 3*(0+2*sixy))[0])) + ((sctx->grad + 3*(0+2*sixy))[0])), (gyp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[1]) - ((sctx->grad + 3*(0+2*sixy))[1])) + ((sctx->grad + 3*(0+2*sixy))[1])), (gyp)[2] = (((coords[1 ]))*(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3 *(0+2*sixy))[2])) + ((sctx->grad + 3*(0+2*sixy))[2]))); | |||||
| 621 | ELL_3M_LERP(Txp, coords[0], Tym, Typ)((((Txp)+0)[0] = ((((coords[0])))*((((Typ)+0)[0]) - (((Tym)+0 )[0])) + (((Tym)+0)[0])), ((Txp)+0)[1] = ((((coords[0])))*((( (Typ)+0)[1]) - (((Tym)+0)[1])) + (((Tym)+0)[1])), ((Txp)+0)[2 ] = ((((coords[0])))*((((Typ)+0)[2]) - (((Tym)+0)[2])) + (((Tym )+0)[2]))), (((Txp)+3)[0] = ((((coords[0])))*((((Typ)+3)[0]) - (((Tym)+3)[0])) + (((Tym)+3)[0])), ((Txp)+3)[1] = ((((coords [0])))*((((Typ)+3)[1]) - (((Tym)+3)[1])) + (((Tym)+3)[1])), ( (Txp)+3)[2] = ((((coords[0])))*((((Typ)+3)[2]) - (((Tym)+3)[2 ])) + (((Tym)+3)[2]))), (((Txp)+6)[0] = ((((coords[0])))*(((( Typ)+6)[0]) - (((Tym)+6)[0])) + (((Tym)+6)[0])), ((Txp)+6)[1] = ((((coords[0])))*((((Typ)+6)[1]) - (((Tym)+6)[1])) + (((Tym )+6)[1])), ((Txp)+6)[2] = ((((coords[0])))*((((Typ)+6)[2]) - ( ((Tym)+6)[2])) + (((Tym)+6)[2])))); | |||||
| 622 | ELL_3V_LERP(gxp, coords[0], gym, gyp)((gxp)[0] = (((coords[0]))*(((gyp)[0]) - ((gym)[0])) + ((gym) [0])), (gxp)[1] = (((coords[0]))*(((gyp)[1]) - ((gym)[1])) + ( (gym)[1])), (gxp)[2] = (((coords[0]))*(((gyp)[2]) - ((gym)[2] )) + ((gym)[2]))); | |||||
| 623 | } else { | |||||
| 624 | ELL_3M_LERP(Tym, coords[1], sctx->t + 9*(0+2*siX), sctx->t + 9*(1+2*siX))((((Tym)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siX ))+0)[0]) - (((sctx->t + 9*(0+2*siX))+0)[0])) + (((sctx-> t + 9*(0+2*siX))+0)[0])), ((Tym)+0)[1] = ((((coords[1])))*((( (sctx->t + 9*(1+2*siX))+0)[1]) - (((sctx->t + 9*(0+2*siX ))+0)[1])) + (((sctx->t + 9*(0+2*siX))+0)[1])), ((Tym)+0)[ 2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siX))+0)[2]) - ( ((sctx->t + 9*(0+2*siX))+0)[2])) + (((sctx->t + 9*(0+2* siX))+0)[2]))), (((Tym)+3)[0] = ((((coords[1])))*((((sctx-> t + 9*(1+2*siX))+3)[0]) - (((sctx->t + 9*(0+2*siX))+3)[0]) ) + (((sctx->t + 9*(0+2*siX))+3)[0])), ((Tym)+3)[1] = (((( coords[1])))*((((sctx->t + 9*(1+2*siX))+3)[1]) - (((sctx-> t + 9*(0+2*siX))+3)[1])) + (((sctx->t + 9*(0+2*siX))+3)[1] )), ((Tym)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siX ))+3)[2]) - (((sctx->t + 9*(0+2*siX))+3)[2])) + (((sctx-> t + 9*(0+2*siX))+3)[2]))), (((Tym)+6)[0] = ((((coords[1])))*( (((sctx->t + 9*(1+2*siX))+6)[0]) - (((sctx->t + 9*(0+2* siX))+6)[0])) + (((sctx->t + 9*(0+2*siX))+6)[0])), ((Tym)+ 6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*siX))+6)[1]) - (((sctx->t + 9*(0+2*siX))+6)[1])) + (((sctx->t + 9*( 0+2*siX))+6)[1])), ((Tym)+6)[2] = ((((coords[1])))*((((sctx-> t + 9*(1+2*siX))+6)[2]) - (((sctx->t + 9*(0+2*siX))+6)[2]) ) + (((sctx->t + 9*(0+2*siX))+6)[2])))); | |||||
| 625 | ELL_3V_LERP(gym, coords[1], sctx->grad + 3*(0+2*siX),((gym)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siX))[0] ) - ((sctx->grad + 3*(0+2*siX))[0])) + ((sctx->grad + 3 *(0+2*siX))[0])), (gym)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*siX))[1]) - ((sctx->grad + 3*(0+2*siX))[1])) + ((sctx ->grad + 3*(0+2*siX))[1])), (gym)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*siX))[2]) - ((sctx->grad + 3*(0+2*siX)) [2])) + ((sctx->grad + 3*(0+2*siX))[2]))) | |||||
| 626 | sctx->grad + 3*(1+2*siX))((gym)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siX))[0] ) - ((sctx->grad + 3*(0+2*siX))[0])) + ((sctx->grad + 3 *(0+2*siX))[0])), (gym)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*siX))[1]) - ((sctx->grad + 3*(0+2*siX))[1])) + ((sctx ->grad + 3*(0+2*siX))[1])), (gym)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*siX))[2]) - ((sctx->grad + 3*(0+2*siX)) [2])) + ((sctx->grad + 3*(0+2*siX))[2]))); | |||||
| 627 | ELL_3M_LERP(Typ, coords[1], sctx->t + 9*(0+2*siXy),((((Typ)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siXy ))+0)[0]) - (((sctx->t + 9*(0+2*siXy))+0)[0])) + (((sctx-> t + 9*(0+2*siXy))+0)[0])), ((Typ)+0)[1] = ((((coords[1])))*(( ((sctx->t + 9*(1+2*siXy))+0)[1]) - (((sctx->t + 9*(0+2* siXy))+0)[1])) + (((sctx->t + 9*(0+2*siXy))+0)[1])), ((Typ )+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siXy))+0)[ 2]) - (((sctx->t + 9*(0+2*siXy))+0)[2])) + (((sctx->t + 9*(0+2*siXy))+0)[2]))), (((Typ)+3)[0] = ((((coords[1])))*((( (sctx->t + 9*(1+2*siXy))+3)[0]) - (((sctx->t + 9*(0+2*siXy ))+3)[0])) + (((sctx->t + 9*(0+2*siXy))+3)[0])), ((Typ)+3) [1] = ((((coords[1])))*((((sctx->t + 9*(1+2*siXy))+3)[1]) - (((sctx->t + 9*(0+2*siXy))+3)[1])) + (((sctx->t + 9*(0 +2*siXy))+3)[1])), ((Typ)+3)[2] = ((((coords[1])))*((((sctx-> t + 9*(1+2*siXy))+3)[2]) - (((sctx->t + 9*(0+2*siXy))+3)[2 ])) + (((sctx->t + 9*(0+2*siXy))+3)[2]))), (((Typ)+6)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siXy))+6)[0]) - ((( sctx->t + 9*(0+2*siXy))+6)[0])) + (((sctx->t + 9*(0+2*siXy ))+6)[0])), ((Typ)+6)[1] = ((((coords[1])))*((((sctx->t + 9 *(1+2*siXy))+6)[1]) - (((sctx->t + 9*(0+2*siXy))+6)[1])) + (((sctx->t + 9*(0+2*siXy))+6)[1])), ((Typ)+6)[2] = ((((coords [1])))*((((sctx->t + 9*(1+2*siXy))+6)[2]) - (((sctx->t + 9*(0+2*siXy))+6)[2])) + (((sctx->t + 9*(0+2*siXy))+6)[2]) ))) | |||||
| 628 | sctx->t + 9*(1+2*siXy))((((Typ)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siXy ))+0)[0]) - (((sctx->t + 9*(0+2*siXy))+0)[0])) + (((sctx-> t + 9*(0+2*siXy))+0)[0])), ((Typ)+0)[1] = ((((coords[1])))*(( ((sctx->t + 9*(1+2*siXy))+0)[1]) - (((sctx->t + 9*(0+2* siXy))+0)[1])) + (((sctx->t + 9*(0+2*siXy))+0)[1])), ((Typ )+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siXy))+0)[ 2]) - (((sctx->t + 9*(0+2*siXy))+0)[2])) + (((sctx->t + 9*(0+2*siXy))+0)[2]))), (((Typ)+3)[0] = ((((coords[1])))*((( (sctx->t + 9*(1+2*siXy))+3)[0]) - (((sctx->t + 9*(0+2*siXy ))+3)[0])) + (((sctx->t + 9*(0+2*siXy))+3)[0])), ((Typ)+3) [1] = ((((coords[1])))*((((sctx->t + 9*(1+2*siXy))+3)[1]) - (((sctx->t + 9*(0+2*siXy))+3)[1])) + (((sctx->t + 9*(0 +2*siXy))+3)[1])), ((Typ)+3)[2] = ((((coords[1])))*((((sctx-> t + 9*(1+2*siXy))+3)[2]) - (((sctx->t + 9*(0+2*siXy))+3)[2 ])) + (((sctx->t + 9*(0+2*siXy))+3)[2]))), (((Typ)+6)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siXy))+6)[0]) - ((( sctx->t + 9*(0+2*siXy))+6)[0])) + (((sctx->t + 9*(0+2*siXy ))+6)[0])), ((Typ)+6)[1] = ((((coords[1])))*((((sctx->t + 9 *(1+2*siXy))+6)[1]) - (((sctx->t + 9*(0+2*siXy))+6)[1])) + (((sctx->t + 9*(0+2*siXy))+6)[1])), ((Typ)+6)[2] = ((((coords [1])))*((((sctx->t + 9*(1+2*siXy))+6)[2]) - (((sctx->t + 9*(0+2*siXy))+6)[2])) + (((sctx->t + 9*(0+2*siXy))+6)[2]) ))); | |||||
| 629 | ELL_3V_LERP(gyp, coords[1], sctx->grad + 3*(0+2*siXy),((gyp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siXy))[0 ]) - ((sctx->grad + 3*(0+2*siXy))[0])) + ((sctx->grad + 3*(0+2*siXy))[0])), (gyp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*siXy))[1]) - ((sctx->grad + 3*(0+2*siXy))[1])) + ((sctx->grad + 3*(0+2*siXy))[1])), (gyp)[2] = (((coords[1 ]))*(((sctx->grad + 3*(1+2*siXy))[2]) - ((sctx->grad + 3 *(0+2*siXy))[2])) + ((sctx->grad + 3*(0+2*siXy))[2]))) | |||||
| 630 | sctx->grad + 3*(1+2*siXy))((gyp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siXy))[0 ]) - ((sctx->grad + 3*(0+2*siXy))[0])) + ((sctx->grad + 3*(0+2*siXy))[0])), (gyp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*siXy))[1]) - ((sctx->grad + 3*(0+2*siXy))[1])) + ((sctx->grad + 3*(0+2*siXy))[1])), (gyp)[2] = (((coords[1 ]))*(((sctx->grad + 3*(1+2*siXy))[2]) - ((sctx->grad + 3 *(0+2*siXy))[2])) + ((sctx->grad + 3*(0+2*siXy))[2]))); | |||||
| 631 | ELL_3M_LERP(Txm, coords[0], Tym, Typ)((((Txm)+0)[0] = ((((coords[0])))*((((Typ)+0)[0]) - (((Tym)+0 )[0])) + (((Tym)+0)[0])), ((Txm)+0)[1] = ((((coords[0])))*((( (Typ)+0)[1]) - (((Tym)+0)[1])) + (((Tym)+0)[1])), ((Txm)+0)[2 ] = ((((coords[0])))*((((Typ)+0)[2]) - (((Tym)+0)[2])) + (((Tym )+0)[2]))), (((Txm)+3)[0] = ((((coords[0])))*((((Typ)+3)[0]) - (((Tym)+3)[0])) + (((Tym)+3)[0])), ((Txm)+3)[1] = ((((coords [0])))*((((Typ)+3)[1]) - (((Tym)+3)[1])) + (((Tym)+3)[1])), ( (Txm)+3)[2] = ((((coords[0])))*((((Typ)+3)[2]) - (((Tym)+3)[2 ])) + (((Tym)+3)[2]))), (((Txm)+6)[0] = ((((coords[0])))*(((( Typ)+6)[0]) - (((Tym)+6)[0])) + (((Tym)+6)[0])), ((Txm)+6)[1] = ((((coords[0])))*((((Typ)+6)[1]) - (((Tym)+6)[1])) + (((Tym )+6)[1])), ((Txm)+6)[2] = ((((coords[0])))*((((Typ)+6)[2]) - ( ((Tym)+6)[2])) + (((Tym)+6)[2])))); | |||||
| 632 | ELL_3V_LERP(gxm, coords[0], gym, gyp)((gxm)[0] = (((coords[0]))*(((gyp)[0]) - ((gym)[0])) + ((gym) [0])), (gxm)[1] = (((coords[0]))*(((gyp)[1]) - ((gym)[1])) + ( (gym)[1])), (gxm)[2] = (((coords[0]))*(((gyp)[2]) - ((gym)[2] )) + ((gym)[2]))); | |||||
| 633 | } | |||||
| 634 | /* now, compute remaining points */ | |||||
| 635 | ELL_3M_LERP(Tym, coords[1], sctx->t + 9*(0+2*si), sctx->t + 9*(1+2*si))((((Tym)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*si) )+0)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx-> t + 9*(0+2*si))+0)[0])), ((Tym)+0)[1] = ((((coords[1])))*(((( sctx->t + 9*(1+2*si))+0)[1]) - (((sctx->t + 9*(0+2*si)) +0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Tym)+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*si))+0)[2]) - (((sctx ->t + 9*(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si))+0) [2]))), (((Tym)+3)[0] = ((((coords[1])))*((((sctx->t + 9*( 1+2*si))+3)[0]) - (((sctx->t + 9*(0+2*si))+3)[0])) + (((sctx ->t + 9*(0+2*si))+3)[0])), ((Tym)+3)[1] = ((((coords[1]))) *((((sctx->t + 9*(1+2*si))+3)[1]) - (((sctx->t + 9*(0+2 *si))+3)[1])) + (((sctx->t + 9*(0+2*si))+3)[1])), ((Tym)+3 )[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*si))+3)[2]) - (((sctx->t + 9*(0+2*si))+3)[2])) + (((sctx->t + 9*(0+2 *si))+3)[2]))), (((Tym)+6)[0] = ((((coords[1])))*((((sctx-> t + 9*(1+2*si))+6)[0]) - (((sctx->t + 9*(0+2*si))+6)[0])) + (((sctx->t + 9*(0+2*si))+6)[0])), ((Tym)+6)[1] = ((((coords [1])))*((((sctx->t + 9*(1+2*si))+6)[1]) - (((sctx->t + 9 *(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si))+6)[1])), ((Tym )+6)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*si))+6)[2] ) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx->t + 9*( 0+2*si))+6)[2])))); | |||||
| 636 | ELL_3V_LERP(gym, coords[1], sctx->grad + 3*(0+2*si),((gym)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*si))[0]) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*( 0+2*si))[0])), (gym)[1] = (((coords[1]))*(((sctx->grad + 3 *(1+2*si))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx-> grad + 3*(0+2*si))[1])), (gym)[2] = (((coords[1]))*(((sctx-> grad + 3*(1+2*si))[2]) - ((sctx->grad + 3*(0+2*si))[2])) + ((sctx->grad + 3*(0+2*si))[2]))) | |||||
| 637 | sctx->grad + 3*(1+2*si))((gym)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*si))[0]) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*( 0+2*si))[0])), (gym)[1] = (((coords[1]))*(((sctx->grad + 3 *(1+2*si))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx-> grad + 3*(0+2*si))[1])), (gym)[2] = (((coords[1]))*(((sctx-> grad + 3*(1+2*si))[2]) - ((sctx->grad + 3*(0+2*si))[2])) + ((sctx->grad + 3*(0+2*si))[2]))); | |||||
| 638 | ELL_3M_LERP(Typ, coords[1], sctx->t + 9*(0+2*siy), sctx->t + 9*(1+2*siy))((((Typ)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy ))+0)[0]) - (((sctx->t + 9*(0+2*siy))+0)[0])) + (((sctx-> t + 9*(0+2*siy))+0)[0])), ((Typ)+0)[1] = ((((coords[1])))*((( (sctx->t + 9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*siy ))+0)[1])) + (((sctx->t + 9*(0+2*siy))+0)[1])), ((Typ)+0)[ 2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+0)[2]) - ( ((sctx->t + 9*(0+2*siy))+0)[2])) + (((sctx->t + 9*(0+2* siy))+0)[2]))), (((Typ)+3)[0] = ((((coords[1])))*((((sctx-> t + 9*(1+2*siy))+3)[0]) - (((sctx->t + 9*(0+2*siy))+3)[0]) ) + (((sctx->t + 9*(0+2*siy))+3)[0])), ((Typ)+3)[1] = (((( coords[1])))*((((sctx->t + 9*(1+2*siy))+3)[1]) - (((sctx-> t + 9*(0+2*siy))+3)[1])) + (((sctx->t + 9*(0+2*siy))+3)[1] )), ((Typ)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy ))+3)[2]) - (((sctx->t + 9*(0+2*siy))+3)[2])) + (((sctx-> t + 9*(0+2*siy))+3)[2]))), (((Typ)+6)[0] = ((((coords[1])))*( (((sctx->t + 9*(1+2*siy))+6)[0]) - (((sctx->t + 9*(0+2* siy))+6)[0])) + (((sctx->t + 9*(0+2*siy))+6)[0])), ((Typ)+ 6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+6)[1]) - (((sctx->t + 9*(0+2*siy))+6)[1])) + (((sctx->t + 9*( 0+2*siy))+6)[1])), ((Typ)+6)[2] = ((((coords[1])))*((((sctx-> t + 9*(1+2*siy))+6)[2]) - (((sctx->t + 9*(0+2*siy))+6)[2]) ) + (((sctx->t + 9*(0+2*siy))+6)[2])))); | |||||
| 639 | ELL_3V_LERP(gyp, coords[1], sctx->grad + 3*(0+2*siy),((gyp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0] ) - ((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3 *(0+2*siy))[0])), (gyp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx ->grad + 3*(0+2*siy))[1])), (gyp)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(0+2*siy)) [2])) + ((sctx->grad + 3*(0+2*siy))[2]))) | |||||
| 640 | sctx->grad + 3*(1+2*siy))((gyp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0] ) - ((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3 *(0+2*siy))[0])), (gyp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx ->grad + 3*(0+2*siy))[1])), (gyp)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(0+2*siy)) [2])) + ((sctx->grad + 3*(0+2*siy))[2]))); | |||||
| 641 | ||||||
| 642 | ELL_3M_LERP(Tzm, coords[0], sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*siy))((((Tzm)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(0+2*siy ))+0)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx-> t + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((((coords[0])))*(((( sctx->t + 9*(0+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*si) )+0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Tzm)+0)[2] = ((((coords[0])))*((((sctx->t + 9*(0+2*siy))+0)[2]) - (( (sctx->t + 9*(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si ))+0)[2]))), (((Tzm)+3)[0] = ((((coords[0])))*((((sctx->t + 9*(0+2*siy))+3)[0]) - (((sctx->t + 9*(0+2*si))+3)[0])) + ( ((sctx->t + 9*(0+2*si))+3)[0])), ((Tzm)+3)[1] = ((((coords [0])))*((((sctx->t + 9*(0+2*siy))+3)[1]) - (((sctx->t + 9*(0+2*si))+3)[1])) + (((sctx->t + 9*(0+2*si))+3)[1])), ( (Tzm)+3)[2] = ((((coords[0])))*((((sctx->t + 9*(0+2*siy))+ 3)[2]) - (((sctx->t + 9*(0+2*si))+3)[2])) + (((sctx->t + 9*(0+2*si))+3)[2]))), (((Tzm)+6)[0] = ((((coords[0])))*((((sctx ->t + 9*(0+2*siy))+6)[0]) - (((sctx->t + 9*(0+2*si))+6) [0])) + (((sctx->t + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = ( (((coords[0])))*((((sctx->t + 9*(0+2*siy))+6)[1]) - (((sctx ->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si))+6) [1])), ((Tzm)+6)[2] = ((((coords[0])))*((((sctx->t + 9*(0+ 2*siy))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx ->t + 9*(0+2*si))+6)[2])))); | |||||
| 643 | ELL_3V_LERP(gzm, coords[0], sctx->grad + 3*(0+2*si),((gzm)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*siy))[0] ) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3* (0+2*si))[0])), (gzm)[1] = (((coords[0]))*(((sctx->grad + 3 *(0+2*siy))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx ->grad + 3*(0+2*si))[1])), (gzm)[2] = (((coords[0]))*(((sctx ->grad + 3*(0+2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[ 2])) + ((sctx->grad + 3*(0+2*si))[2]))) | |||||
| 644 | sctx->grad + 3*(0+2*siy))((gzm)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*siy))[0] ) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3* (0+2*si))[0])), (gzm)[1] = (((coords[0]))*(((sctx->grad + 3 *(0+2*siy))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx ->grad + 3*(0+2*si))[1])), (gzm)[2] = (((coords[0]))*(((sctx ->grad + 3*(0+2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[ 2])) + ((sctx->grad + 3*(0+2*si))[2]))); | |||||
| 645 | ELL_3M_LERP(Tzp, coords[0], sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*siy))((((Tzp)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(1+2*siy ))+0)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx-> t + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((((coords[0])))*(((( sctx->t + 9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(1+2*si) )+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Tzp)+0)[2] = ((((coords[0])))*((((sctx->t + 9*(1+2*siy))+0)[2]) - (( (sctx->t + 9*(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2*si ))+0)[2]))), (((Tzp)+3)[0] = ((((coords[0])))*((((sctx->t + 9*(1+2*siy))+3)[0]) - (((sctx->t + 9*(1+2*si))+3)[0])) + ( ((sctx->t + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = ((((coords [0])))*((((sctx->t + 9*(1+2*siy))+3)[1]) - (((sctx->t + 9*(1+2*si))+3)[1])) + (((sctx->t + 9*(1+2*si))+3)[1])), ( (Tzp)+3)[2] = ((((coords[0])))*((((sctx->t + 9*(1+2*siy))+ 3)[2]) - (((sctx->t + 9*(1+2*si))+3)[2])) + (((sctx->t + 9*(1+2*si))+3)[2]))), (((Tzp)+6)[0] = ((((coords[0])))*((((sctx ->t + 9*(1+2*siy))+6)[0]) - (((sctx->t + 9*(1+2*si))+6) [0])) + (((sctx->t + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1] = ( (((coords[0])))*((((sctx->t + 9*(1+2*siy))+6)[1]) - (((sctx ->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9*(1+2*si))+6) [1])), ((Tzp)+6)[2] = ((((coords[0])))*((((sctx->t + 9*(1+ 2*siy))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + (((sctx ->t + 9*(1+2*si))+6)[2])))); | |||||
| 646 | ELL_3V_LERP(gzp, coords[0], sctx->grad + 3*(1+2*si),((gzp)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*siy))[0] ) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3* (1+2*si))[0])), (gzp)[1] = (((coords[0]))*(((sctx->grad + 3 *(1+2*siy))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx ->grad + 3*(1+2*si))[1])), (gzp)[2] = (((coords[0]))*(((sctx ->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[ 2])) + ((sctx->grad + 3*(1+2*si))[2]))) | |||||
| 647 | sctx->grad + 3*(1+2*siy))((gzp)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*siy))[0] ) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3* (1+2*si))[0])), (gzp)[1] = (((coords[0]))*(((sctx->grad + 3 *(1+2*siy))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx ->grad + 3*(1+2*si))[1])), (gzp)[2] = (((coords[0]))*(((sctx ->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[ 2])) + ((sctx->grad + 3*(1+2*si))[2]))); | |||||
| 648 | ||||||
| 649 | ELL_3M_LERP(T, coords[0], Tym, Typ)((((T)+0)[0] = ((((coords[0])))*((((Typ)+0)[0]) - (((Tym)+0)[ 0])) + (((Tym)+0)[0])), ((T)+0)[1] = ((((coords[0])))*((((Typ )+0)[1]) - (((Tym)+0)[1])) + (((Tym)+0)[1])), ((T)+0)[2] = (( ((coords[0])))*((((Typ)+0)[2]) - (((Tym)+0)[2])) + (((Tym)+0) [2]))), (((T)+3)[0] = ((((coords[0])))*((((Typ)+3)[0]) - (((Tym )+3)[0])) + (((Tym)+3)[0])), ((T)+3)[1] = ((((coords[0])))*(( ((Typ)+3)[1]) - (((Tym)+3)[1])) + (((Tym)+3)[1])), ((T)+3)[2] = ((((coords[0])))*((((Typ)+3)[2]) - (((Tym)+3)[2])) + (((Tym )+3)[2]))), (((T)+6)[0] = ((((coords[0])))*((((Typ)+6)[0]) - ( ((Tym)+6)[0])) + (((Tym)+6)[0])), ((T)+6)[1] = ((((coords[0]) ))*((((Typ)+6)[1]) - (((Tym)+6)[1])) + (((Tym)+6)[1])), ((T)+ 6)[2] = ((((coords[0])))*((((Typ)+6)[2]) - (((Tym)+6)[2])) + ( ((Tym)+6)[2])))); | |||||
| 650 | ELL_3V_LERP(g, coords[0], gym, gyp)((g)[0] = (((coords[0]))*(((gyp)[0]) - ((gym)[0])) + ((gym)[0 ])), (g)[1] = (((coords[0]))*(((gyp)[1]) - ((gym)[1])) + ((gym )[1])), (g)[2] = (((coords[0]))*(((gyp)[2]) - ((gym)[2])) + ( (gym)[2]))); | |||||
| 651 | ||||||
| 652 | if (xi!=sx-1) { | |||||
| 653 | computeGradientLin(sctx->facenorm+3*(faceid+4*si), T, g, | |||||
| 654 | T, g, Txp, gxp, | |||||
| 655 | Tym, gym, Typ, gyp, | |||||
| 656 | Tzm, gzm, Tzp, gzp); | |||||
| 657 | } else { | |||||
| 658 | computeGradientLin(sctx->facenorm+3*(faceid+4*si), T, g, | |||||
| 659 | Txm, gxm, T, g, | |||||
| 660 | Tym, gym, Typ, gyp, | |||||
| 661 | Tzm, gzm, Tzp, gzp); | |||||
| 662 | } | |||||
| 663 | break; | |||||
| 664 | case 3: | |||||
| 665 | /* bilinearly interpolate Tzm/gzm first */ | |||||
| 666 | ELL_3M_LERP(Txm, coords[1], sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*siy))((((Txm)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(0+2*siy ))+0)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx-> t + 9*(0+2*si))+0)[0])), ((Txm)+0)[1] = ((((coords[1])))*(((( sctx->t + 9*(0+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*si) )+0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Txm)+0)[2] = ((((coords[1])))*((((sctx->t + 9*(0+2*siy))+0)[2]) - (( (sctx->t + 9*(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si ))+0)[2]))), (((Txm)+3)[0] = ((((coords[1])))*((((sctx->t + 9*(0+2*siy))+3)[0]) - (((sctx->t + 9*(0+2*si))+3)[0])) + ( ((sctx->t + 9*(0+2*si))+3)[0])), ((Txm)+3)[1] = ((((coords [1])))*((((sctx->t + 9*(0+2*siy))+3)[1]) - (((sctx->t + 9*(0+2*si))+3)[1])) + (((sctx->t + 9*(0+2*si))+3)[1])), ( (Txm)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(0+2*siy))+ 3)[2]) - (((sctx->t + 9*(0+2*si))+3)[2])) + (((sctx->t + 9*(0+2*si))+3)[2]))), (((Txm)+6)[0] = ((((coords[1])))*((((sctx ->t + 9*(0+2*siy))+6)[0]) - (((sctx->t + 9*(0+2*si))+6) [0])) + (((sctx->t + 9*(0+2*si))+6)[0])), ((Txm)+6)[1] = ( (((coords[1])))*((((sctx->t + 9*(0+2*siy))+6)[1]) - (((sctx ->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si))+6) [1])), ((Txm)+6)[2] = ((((coords[1])))*((((sctx->t + 9*(0+ 2*siy))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx ->t + 9*(0+2*si))+6)[2])))); | |||||
| 667 | ELL_3V_LERP(gxm, coords[1], sctx->grad + 3*(0+2*si),((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*siy))[0] ) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3* (0+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3 *(0+2*siy))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx ->grad + 3*(0+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx ->grad + 3*(0+2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[ 2])) + ((sctx->grad + 3*(0+2*si))[2]))) | |||||
| 668 | sctx->grad + 3*(0+2*siy))((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*siy))[0] ) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3* (0+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3 *(0+2*siy))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx ->grad + 3*(0+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx ->grad + 3*(0+2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[ 2])) + ((sctx->grad + 3*(0+2*si))[2]))); | |||||
| 669 | ELL_3M_LERP(Txp, coords[1], sctx->t + 9*(0+2*six), sctx->t + 9*(0+2*sixy))((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(0+2*sixy ))+0)[0]) - (((sctx->t + 9*(0+2*six))+0)[0])) + (((sctx-> t + 9*(0+2*six))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*((( (sctx->t + 9*(0+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2*six ))+0)[1])) + (((sctx->t + 9*(0+2*six))+0)[1])), ((Txp)+0)[ 2] = ((((coords[1])))*((((sctx->t + 9*(0+2*sixy))+0)[2]) - (((sctx->t + 9*(0+2*six))+0)[2])) + (((sctx->t + 9*(0+ 2*six))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*((((sctx-> t + 9*(0+2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*six))+3)[0] )) + (((sctx->t + 9*(0+2*six))+3)[0])), ((Txp)+3)[1] = ((( (coords[1])))*((((sctx->t + 9*(0+2*sixy))+3)[1]) - (((sctx ->t + 9*(0+2*six))+3)[1])) + (((sctx->t + 9*(0+2*six))+ 3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx->t + 9*( 0+2*sixy))+3)[2]) - (((sctx->t + 9*(0+2*six))+3)[2])) + (( (sctx->t + 9*(0+2*six))+3)[2]))), (((Txp)+6)[0] = ((((coords [1])))*((((sctx->t + 9*(0+2*sixy))+6)[0]) - (((sctx->t + 9*(0+2*six))+6)[0])) + (((sctx->t + 9*(0+2*six))+6)[0])), ((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9*(0+2*sixy ))+6)[1]) - (((sctx->t + 9*(0+2*six))+6)[1])) + (((sctx-> t + 9*(0+2*six))+6)[1])), ((Txp)+6)[2] = ((((coords[1])))*((( (sctx->t + 9*(0+2*sixy))+6)[2]) - (((sctx->t + 9*(0+2*six ))+6)[2])) + (((sctx->t + 9*(0+2*six))+6)[2])))); | |||||
| 670 | ELL_3V_LERP(gxp, coords[1], sctx->grad + 3*(0+2*six),((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*sixy))[0 ]) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3 *(0+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad + 3*(0+2*sixy))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + (( sctx->grad + 3*(0+2*six))[1])), (gxp)[2] = (((coords[1]))* (((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0 +2*six))[2])) + ((sctx->grad + 3*(0+2*six))[2]))) | |||||
| 671 | sctx->grad + 3*(0+2*sixy))((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*sixy))[0 ]) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3 *(0+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad + 3*(0+2*sixy))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + (( sctx->grad + 3*(0+2*six))[1])), (gxp)[2] = (((coords[1]))* (((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0 +2*six))[2])) + ((sctx->grad + 3*(0+2*six))[2]))); | |||||
| 672 | ELL_3M_LERP(Tzm, coords[0], Txm, Txp)((((Tzm)+0)[0] = ((((coords[0])))*((((Txp)+0)[0]) - (((Txm)+0 )[0])) + (((Txm)+0)[0])), ((Tzm)+0)[1] = ((((coords[0])))*((( (Txp)+0)[1]) - (((Txm)+0)[1])) + (((Txm)+0)[1])), ((Tzm)+0)[2 ] = ((((coords[0])))*((((Txp)+0)[2]) - (((Txm)+0)[2])) + (((Txm )+0)[2]))), (((Tzm)+3)[0] = ((((coords[0])))*((((Txp)+3)[0]) - (((Txm)+3)[0])) + (((Txm)+3)[0])), ((Tzm)+3)[1] = ((((coords [0])))*((((Txp)+3)[1]) - (((Txm)+3)[1])) + (((Txm)+3)[1])), ( (Tzm)+3)[2] = ((((coords[0])))*((((Txp)+3)[2]) - (((Txm)+3)[2 ])) + (((Txm)+3)[2]))), (((Tzm)+6)[0] = ((((coords[0])))*(((( Txp)+6)[0]) - (((Txm)+6)[0])) + (((Txm)+6)[0])), ((Tzm)+6)[1] = ((((coords[0])))*((((Txp)+6)[1]) - (((Txm)+6)[1])) + (((Txm )+6)[1])), ((Tzm)+6)[2] = ((((coords[0])))*((((Txp)+6)[2]) - ( ((Txm)+6)[2])) + (((Txm)+6)[2])))); | |||||
| 673 | ELL_3V_LERP(gzm, coords[0], gxm, gxp)((gzm)[0] = (((coords[0]))*(((gxp)[0]) - ((gxm)[0])) + ((gxm) [0])), (gzm)[1] = (((coords[0]))*(((gxp)[1]) - ((gxm)[1])) + ( (gxm)[1])), (gzm)[2] = (((coords[0]))*(((gxp)[2]) - ((gxm)[2] )) + ((gxm)[2]))); | |||||
| 674 | /* now, compute all required points on the top face */ | |||||
| 675 | ELL_3M_LERP(Txm, coords[1], sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*siy))((((Txm)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy ))+0)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx-> t + 9*(1+2*si))+0)[0])), ((Txm)+0)[1] = ((((coords[1])))*(((( sctx->t + 9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(1+2*si) )+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Txm)+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+0)[2]) - (( (sctx->t + 9*(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2*si ))+0)[2]))), (((Txm)+3)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+3)[0]) - (((sctx->t + 9*(1+2*si))+3)[0])) + ( ((sctx->t + 9*(1+2*si))+3)[0])), ((Txm)+3)[1] = ((((coords [1])))*((((sctx->t + 9*(1+2*siy))+3)[1]) - (((sctx->t + 9*(1+2*si))+3)[1])) + (((sctx->t + 9*(1+2*si))+3)[1])), ( (Txm)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+ 3)[2]) - (((sctx->t + 9*(1+2*si))+3)[2])) + (((sctx->t + 9*(1+2*si))+3)[2]))), (((Txm)+6)[0] = ((((coords[1])))*((((sctx ->t + 9*(1+2*siy))+6)[0]) - (((sctx->t + 9*(1+2*si))+6) [0])) + (((sctx->t + 9*(1+2*si))+6)[0])), ((Txm)+6)[1] = ( (((coords[1])))*((((sctx->t + 9*(1+2*siy))+6)[1]) - (((sctx ->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9*(1+2*si))+6) [1])), ((Txm)+6)[2] = ((((coords[1])))*((((sctx->t + 9*(1+ 2*siy))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + (((sctx ->t + 9*(1+2*si))+6)[2])))); | |||||
| 676 | ELL_3V_LERP(gxm, coords[1], sctx->grad + 3*(1+2*si),((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0] ) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3* (1+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3 *(1+2*siy))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx ->grad + 3*(1+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[ 2])) + ((sctx->grad + 3*(1+2*si))[2]))) | |||||
| 677 | sctx->grad + 3*(1+2*siy))((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0] ) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3* (1+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3 *(1+2*siy))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx ->grad + 3*(1+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx ->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[ 2])) + ((sctx->grad + 3*(1+2*si))[2]))); | |||||
| 678 | ELL_3M_LERP(Txp, coords[1], sctx->t + 9*(1+2*six), sctx->t + 9*(1+2*sixy))((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy ))+0)[0]) - (((sctx->t + 9*(1+2*six))+0)[0])) + (((sctx-> t + 9*(1+2*six))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*((( (sctx->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(1+2*six ))+0)[1])) + (((sctx->t + 9*(1+2*six))+0)[1])), ((Txp)+0)[ 2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+0)[2]) - (((sctx->t + 9*(1+2*six))+0)[2])) + (((sctx->t + 9*(1+ 2*six))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*((((sctx-> t + 9*(1+2*sixy))+3)[0]) - (((sctx->t + 9*(1+2*six))+3)[0] )) + (((sctx->t + 9*(1+2*six))+3)[0])), ((Txp)+3)[1] = ((( (coords[1])))*((((sctx->t + 9*(1+2*sixy))+3)[1]) - (((sctx ->t + 9*(1+2*six))+3)[1])) + (((sctx->t + 9*(1+2*six))+ 3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx->t + 9*( 1+2*sixy))+3)[2]) - (((sctx->t + 9*(1+2*six))+3)[2])) + (( (sctx->t + 9*(1+2*six))+3)[2]))), (((Txp)+6)[0] = ((((coords [1])))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - (((sctx->t + 9*(1+2*six))+6)[0])) + (((sctx->t + 9*(1+2*six))+6)[0])), ((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy ))+6)[1]) - (((sctx->t + 9*(1+2*six))+6)[1])) + (((sctx-> t + 9*(1+2*six))+6)[1])), ((Txp)+6)[2] = ((((coords[1])))*((( (sctx->t + 9*(1+2*sixy))+6)[2]) - (((sctx->t + 9*(1+2*six ))+6)[2])) + (((sctx->t + 9*(1+2*six))+6)[2])))); | |||||
| 679 | ELL_3V_LERP(gxp, coords[1], sctx->grad + 3*(1+2*six),((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0 ]) - ((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3 *(1+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + (( sctx->grad + 3*(1+2*six))[1])), (gxp)[2] = (((coords[1]))* (((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1 +2*six))[2])) + ((sctx->grad + 3*(1+2*six))[2]))) | |||||
| 680 | sctx->grad + 3*(1+2*sixy))((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0 ]) - ((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3 *(1+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + (( sctx->grad + 3*(1+2*six))[1])), (gxp)[2] = (((coords[1]))* (((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1 +2*six))[2])) + ((sctx->grad + 3*(1+2*six))[2]))); | |||||
| 681 | ||||||
| 682 | ELL_3M_LERP(Tym, coords[0], sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*six))((((Tym)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(1+2*six ))+0)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx-> t + 9*(1+2*si))+0)[0])), ((Tym)+0)[1] = ((((coords[0])))*(((( sctx->t + 9*(1+2*six))+0)[1]) - (((sctx->t + 9*(1+2*si) )+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Tym)+0)[2] = ((((coords[0])))*((((sctx->t + 9*(1+2*six))+0)[2]) - (( (sctx->t + 9*(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2*si ))+0)[2]))), (((Tym)+3)[0] = ((((coords[0])))*((((sctx->t + 9*(1+2*six))+3)[0]) - (((sctx->t + 9*(1+2*si))+3)[0])) + ( ((sctx->t + 9*(1+2*si))+3)[0])), ((Tym)+3)[1] = ((((coords [0])))*((((sctx->t + 9*(1+2*six))+3)[1]) - (((sctx->t + 9*(1+2*si))+3)[1])) + (((sctx->t + 9*(1+2*si))+3)[1])), ( (Tym)+3)[2] = ((((coords[0])))*((((sctx->t + 9*(1+2*six))+ 3)[2]) - (((sctx->t + 9*(1+2*si))+3)[2])) + (((sctx->t + 9*(1+2*si))+3)[2]))), (((Tym)+6)[0] = ((((coords[0])))*((((sctx ->t + 9*(1+2*six))+6)[0]) - (((sctx->t + 9*(1+2*si))+6) [0])) + (((sctx->t + 9*(1+2*si))+6)[0])), ((Tym)+6)[1] = ( (((coords[0])))*((((sctx->t + 9*(1+2*six))+6)[1]) - (((sctx ->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9*(1+2*si))+6) [1])), ((Tym)+6)[2] = ((((coords[0])))*((((sctx->t + 9*(1+ 2*six))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + (((sctx ->t + 9*(1+2*si))+6)[2])))); | |||||
| 683 | ELL_3V_LERP(gym, coords[0], sctx->grad + 3*(1+2*si),((gym)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*six))[0] ) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3* (1+2*si))[0])), (gym)[1] = (((coords[0]))*(((sctx->grad + 3 *(1+2*six))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx ->grad + 3*(1+2*si))[1])), (gym)[2] = (((coords[0]))*(((sctx ->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(1+2*si))[ 2])) + ((sctx->grad + 3*(1+2*si))[2]))) | |||||
| 684 | sctx->grad + 3*(1+2*six))((gym)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*six))[0] ) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3* (1+2*si))[0])), (gym)[1] = (((coords[0]))*(((sctx->grad + 3 *(1+2*six))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx ->grad + 3*(1+2*si))[1])), (gym)[2] = (((coords[0]))*(((sctx ->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(1+2*si))[ 2])) + ((sctx->grad + 3*(1+2*si))[2]))); | |||||
| 685 | ELL_3M_LERP(Typ, coords[0], sctx->t + 9*(1+2*siy), sctx->t + 9*(1+2*sixy))((((Typ)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(1+2*sixy ))+0)[0]) - (((sctx->t + 9*(1+2*siy))+0)[0])) + (((sctx-> t + 9*(1+2*siy))+0)[0])), ((Typ)+0)[1] = ((((coords[0])))*((( (sctx->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(1+2*siy ))+0)[1])) + (((sctx->t + 9*(1+2*siy))+0)[1])), ((Typ)+0)[ 2] = ((((coords[0])))*((((sctx->t + 9*(1+2*sixy))+0)[2]) - (((sctx->t + 9*(1+2*siy))+0)[2])) + (((sctx->t + 9*(1+ 2*siy))+0)[2]))), (((Typ)+3)[0] = ((((coords[0])))*((((sctx-> t + 9*(1+2*sixy))+3)[0]) - (((sctx->t + 9*(1+2*siy))+3)[0] )) + (((sctx->t + 9*(1+2*siy))+3)[0])), ((Typ)+3)[1] = ((( (coords[0])))*((((sctx->t + 9*(1+2*sixy))+3)[1]) - (((sctx ->t + 9*(1+2*siy))+3)[1])) + (((sctx->t + 9*(1+2*siy))+ 3)[1])), ((Typ)+3)[2] = ((((coords[0])))*((((sctx->t + 9*( 1+2*sixy))+3)[2]) - (((sctx->t + 9*(1+2*siy))+3)[2])) + (( (sctx->t + 9*(1+2*siy))+3)[2]))), (((Typ)+6)[0] = ((((coords [0])))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - (((sctx->t + 9*(1+2*siy))+6)[0])) + (((sctx->t + 9*(1+2*siy))+6)[0])), ((Typ)+6)[1] = ((((coords[0])))*((((sctx->t + 9*(1+2*sixy ))+6)[1]) - (((sctx->t + 9*(1+2*siy))+6)[1])) + (((sctx-> t + 9*(1+2*siy))+6)[1])), ((Typ)+6)[2] = ((((coords[0])))*((( (sctx->t + 9*(1+2*sixy))+6)[2]) - (((sctx->t + 9*(1+2*siy ))+6)[2])) + (((sctx->t + 9*(1+2*siy))+6)[2])))); | |||||
| 686 | ELL_3V_LERP(gyp, coords[0], sctx->grad + 3*(1+2*siy),((gyp)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*sixy))[0 ]) - ((sctx->grad + 3*(1+2*siy))[0])) + ((sctx->grad + 3 *(1+2*siy))[0])), (gyp)[1] = (((coords[0]))*(((sctx->grad + 3*(1+2*sixy))[1]) - ((sctx->grad + 3*(1+2*siy))[1])) + (( sctx->grad + 3*(1+2*siy))[1])), (gyp)[2] = (((coords[0]))* (((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1 +2*siy))[2])) + ((sctx->grad + 3*(1+2*siy))[2]))) | |||||
| 687 | sctx->grad + 3*(1+2*sixy))((gyp)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*sixy))[0 ]) - ((sctx->grad + 3*(1+2*siy))[0])) + ((sctx->grad + 3 *(1+2*siy))[0])), (gyp)[1] = (((coords[0]))*(((sctx->grad + 3*(1+2*sixy))[1]) - ((sctx->grad + 3*(1+2*siy))[1])) + (( sctx->grad + 3*(1+2*siy))[1])), (gyp)[2] = (((coords[0]))* (((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1 +2*siy))[2])) + ((sctx->grad + 3*(1+2*siy))[2]))); | |||||
| 688 | ||||||
| 689 | ELL_3M_LERP(T, coords[0], Txm, Txp)((((T)+0)[0] = ((((coords[0])))*((((Txp)+0)[0]) - (((Txm)+0)[ 0])) + (((Txm)+0)[0])), ((T)+0)[1] = ((((coords[0])))*((((Txp )+0)[1]) - (((Txm)+0)[1])) + (((Txm)+0)[1])), ((T)+0)[2] = (( ((coords[0])))*((((Txp)+0)[2]) - (((Txm)+0)[2])) + (((Txm)+0) [2]))), (((T)+3)[0] = ((((coords[0])))*((((Txp)+3)[0]) - (((Txm )+3)[0])) + (((Txm)+3)[0])), ((T)+3)[1] = ((((coords[0])))*(( ((Txp)+3)[1]) - (((Txm)+3)[1])) + (((Txm)+3)[1])), ((T)+3)[2] = ((((coords[0])))*((((Txp)+3)[2]) - (((Txm)+3)[2])) + (((Txm )+3)[2]))), (((T)+6)[0] = ((((coords[0])))*((((Txp)+6)[0]) - ( ((Txm)+6)[0])) + (((Txm)+6)[0])), ((T)+6)[1] = ((((coords[0]) ))*((((Txp)+6)[1]) - (((Txm)+6)[1])) + (((Txm)+6)[1])), ((T)+ 6)[2] = ((((coords[0])))*((((Txp)+6)[2]) - (((Txm)+6)[2])) + ( ((Txm)+6)[2])))); | |||||
| 690 | ELL_3V_LERP(g, coords[0], gxm, gxp)((g)[0] = (((coords[0]))*(((gxp)[0]) - ((gxm)[0])) + ((gxm)[0 ])), (g)[1] = (((coords[0]))*(((gxp)[1]) - ((gxm)[1])) + ((gxm )[1])), (g)[2] = (((coords[0]))*(((gxp)[2]) - ((gxm)[2])) + ( (gxm)[2]))); | |||||
| 691 | ||||||
| 692 | computeGradientLin(sctx->facenorm+3*(faceid+4*si), T, g, | |||||
| 693 | Txm, gxm, Txp, gxp, | |||||
| 694 | Tym, gym, Typ, gyp, | |||||
| 695 | Tzm, gzm, T, g); | |||||
| 696 | break; | |||||
| 697 | } | |||||
| 698 | ELL_3V_COPY(res, sctx->facenorm+3*(faceid+4*si))((res)[0] = (sctx->facenorm+3*(faceid+4*si))[0], (res)[1] = (sctx->facenorm+3*(faceid+4*si))[1], (res)[2] = (sctx-> facenorm+3*(faceid+4*si))[2]); | |||||
| 699 | } | |||||
| 700 | ||||||
| 701 | /* small helper routines: intersection tests */ | |||||
| 702 | ||||||
| 703 | /* check if a given 2D triangle is oriented clockwise (-1) | |||||
| 704 | * or counter-clockwise (1). | |||||
| 705 | * returns 0 if given points are collinear */ | |||||
| 706 | static int | |||||
| 707 | checkTriOrientation (double *p1, double *p2, double *p3) { | |||||
| 708 | double test = (((p2[0]-p1[0])*(p3[1]-p1[1])) - ((p3[0]-p1[0])*(p2[1]-p1[1]))); | |||||
| 709 | if (test > 0) return 1; | |||||
| 710 | else if (test < 0) return -1; | |||||
| 711 | else return 0; | |||||
| 712 | } | |||||
| 713 | ||||||
| 714 | /* check if two given 2D lines intersect */ | |||||
| 715 | static int | |||||
| 716 | lineIntersectionTest (double *l1p1, double *l1p2, double *l2p1, double *l2p2) { | |||||
| 717 | int or1 = checkTriOrientation(l1p1, l1p2, l2p1); | |||||
| 718 | int or2 = checkTriOrientation(l1p1, l1p2, l2p2); | |||||
| 719 | if (or1 != or2) { | |||||
| 720 | or1 = checkTriOrientation(l2p1, l2p2, l1p1); | |||||
| 721 | or2 = checkTriOrientation(l2p1, l2p2, l1p2); | |||||
| 722 | if (or1 != or2) | |||||
| 723 | return 1; | |||||
| 724 | } | |||||
| 725 | return 0; | |||||
| 726 | } | |||||
| 727 | ||||||
| 728 | /* check if two given 3D triangles intersect */ | |||||
| 729 | static int | |||||
| 730 | triIntersectionTest (double *t1v1, double *t1v2, double *t1v3, | |||||
| 731 | double *t2v1, double *t2v2, double *t2v3) { | |||||
| 732 | double n1[3], n2[3], d1, d2; | |||||
| 733 | double diff1[3], diff2[3]; | |||||
| 734 | double t2sd1, t2sd2, t2sd3; | |||||
| 735 | ELL_3V_SUB(diff1, t1v2, t1v1)((diff1)[0] = (t1v2)[0] - (t1v1)[0], (diff1)[1] = (t1v2)[1] - (t1v1)[1], (diff1)[2] = (t1v2)[2] - (t1v1)[2]); | |||||
| 736 | ELL_3V_SUB(diff2, t1v3, t1v1)((diff2)[0] = (t1v3)[0] - (t1v1)[0], (diff2)[1] = (t1v3)[1] - (t1v1)[1], (diff2)[2] = (t1v3)[2] - (t1v1)[2]); | |||||
| 737 | ELL_3V_CROSS(n1,diff1,diff2)((n1)[0] = (diff1)[1]*(diff2)[2] - (diff1)[2]*(diff2)[1], (n1 )[1] = (diff1)[2]*(diff2)[0] - (diff1)[0]*(diff2)[2], (n1)[2] = (diff1)[0]*(diff2)[1] - (diff1)[1]*(diff2)[0]); | |||||
| 738 | d1=-ELL_3V_DOT(n1,t1v1)((n1)[0]*(t1v1)[0] + (n1)[1]*(t1v1)[1] + (n1)[2]*(t1v1)[2]); | |||||
| 739 | ||||||
| 740 | /* compute scaled signed distances of t2 to plane of t1 */ | |||||
| 741 | t2sd1 = ELL_3V_DOT(n1, t2v1)((n1)[0]*(t2v1)[0] + (n1)[1]*(t2v1)[1] + (n1)[2]*(t2v1)[2])+d1; | |||||
| 742 | t2sd2 = ELL_3V_DOT(n1, t2v2)((n1)[0]*(t2v2)[0] + (n1)[1]*(t2v2)[1] + (n1)[2]*(t2v2)[2])+d1; | |||||
| 743 | t2sd3 = ELL_3V_DOT(n1, t2v3)((n1)[0]*(t2v3)[0] + (n1)[1]*(t2v3)[1] + (n1)[2]*(t2v3)[2])+d1; | |||||
| 744 | ||||||
| 745 | if (t2sd1==0 && t2sd2==0 && t2sd3==0) { | |||||
| 746 | /* coplanar case: handle in 2D */ | |||||
| 747 | double t1v12d[2], t1v22d[2], t1v32d[2], t2v12d[2], t2v22d[2], t2v32d[2]; | |||||
| 748 | if (fabs(n1[0])>=fabs(n1[1]) && fabs(n1[0])>=fabs(n1[2])) { | |||||
| 749 | t1v12d[0]=t1v1[1]; t1v12d[1]=t1v1[2]; | |||||
| 750 | t1v22d[0]=t1v2[1]; t1v22d[1]=t1v2[2]; | |||||
| 751 | t1v32d[0]=t1v3[1]; t1v32d[1]=t1v3[2]; | |||||
| 752 | t2v12d[0]=t2v1[1]; t2v12d[1]=t2v1[2]; | |||||
| 753 | t2v22d[0]=t2v2[1]; t2v22d[1]=t2v2[2]; | |||||
| 754 | t2v32d[0]=t2v3[1]; t2v32d[1]=t2v3[2]; | |||||
| 755 | } else if (fabs(n1[1])>=fabs(n1[0]) && fabs(n1[1])>=fabs(n1[2])) { | |||||
| 756 | t1v12d[0]=t1v1[0]; t1v12d[1]=t1v1[2]; | |||||
| 757 | t1v22d[0]=t1v2[0]; t1v22d[1]=t1v2[2]; | |||||
| 758 | t1v32d[0]=t1v3[0]; t1v32d[1]=t1v3[2]; | |||||
| 759 | t2v12d[0]=t2v1[0]; t2v12d[1]=t2v1[2]; | |||||
| 760 | t2v22d[0]=t2v2[0]; t2v22d[1]=t2v2[2]; | |||||
| 761 | t2v32d[0]=t2v3[0]; t2v32d[1]=t2v3[2]; | |||||
| 762 | } else { | |||||
| 763 | t1v12d[0]=t1v1[0]; t1v12d[1]=t1v1[1]; | |||||
| 764 | t1v22d[0]=t1v2[0]; t1v22d[1]=t1v2[1]; | |||||
| 765 | t1v32d[0]=t1v3[0]; t1v32d[1]=t1v3[1]; | |||||
| 766 | t2v12d[0]=t2v1[0]; t2v12d[1]=t2v1[1]; | |||||
| 767 | t2v22d[0]=t2v2[0]; t2v22d[1]=t2v2[1]; | |||||
| 768 | t2v32d[0]=t2v3[0]; t2v32d[1]=t2v3[1]; | |||||
| 769 | } | |||||
| 770 | /* we may assume that none of the triangles is fully contained | |||||
| 771 | * within the other. Thus, it suffices to do a lot of 2D line-line | |||||
| 772 | * intersections */ | |||||
| 773 | if (lineIntersectionTest(t1v12d, t1v22d, t2v12d, t2v22d) || | |||||
| 774 | lineIntersectionTest(t1v22d, t1v32d, t2v12d, t2v22d) || | |||||
| 775 | lineIntersectionTest(t1v32d, t1v12d, t2v12d, t2v22d) || | |||||
| 776 | lineIntersectionTest(t1v12d, t1v22d, t2v22d, t2v32d) || | |||||
| 777 | lineIntersectionTest(t1v22d, t1v32d, t2v22d, t2v32d) || | |||||
| 778 | lineIntersectionTest(t1v32d, t1v12d, t2v22d, t2v32d) || | |||||
| 779 | lineIntersectionTest(t1v12d, t1v22d, t2v32d, t2v12d) || | |||||
| 780 | lineIntersectionTest(t1v22d, t1v32d, t2v32d, t2v12d) || | |||||
| 781 | lineIntersectionTest(t1v32d, t1v12d, t2v32d, t2v12d)) | |||||
| 782 | return 1; | |||||
| 783 | return 0; | |||||
| 784 | } else { | |||||
| 785 | /* pointers to the vertices on the same side / opposite side of plane */ | |||||
| 786 | double *t2s11, *t2s12, *t2s2, t2s11sd, t2s12sd, t2s2sd; | |||||
| 787 | double t1sd1, t1sd2, t1sd3; | |||||
| 788 | double *t1s11, *t1s12, *t1s2, t1s11sd, t1s12sd, t1s2sd; | |||||
| 789 | double t1p11, t1p12, t1p2, t2p11, t2p12, t2p2; | |||||
| 790 | double D[3]; /* direction vector of line */ | |||||
| 791 | double t1t1, t1t2, t2t1, t2t2; | |||||
| 792 | if (t2sd1*t2sd2>=0 && t2sd1*t2sd3<=0) { | |||||
| 793 | t2s11=t2v1; t2s12=t2v2; t2s2=t2v3; t2s11sd=t2sd1; | |||||
| 794 | t2s12sd=t2sd2; t2s2sd=t2sd3; | |||||
| 795 | } else if (t2sd1*t2sd3>=0 && t2sd1*t2sd2<=0) { | |||||
| 796 | t2s11=t2v1; t2s12=t2v3; t2s2=t2v2; t2s11sd=t2sd1; | |||||
| 797 | t2s12sd=t2sd3; t2s2sd=t2sd2; | |||||
| 798 | } else if (t2sd2*t2sd3>=0 && t2sd1*t2sd2<=0) { | |||||
| 799 | t2s11=t2v2; t2s12=t2v3; t2s2=t2v1; t2s11sd=t2sd2; | |||||
| 800 | t2s12sd=t2sd3; t2s2sd=t2sd1; | |||||
| 801 | } else | |||||
| 802 | return 0; /* all on the same side; no intersection */ | |||||
| 803 | ||||||
| 804 | /* same game for triangle 2 */ | |||||
| 805 | ELL_3V_SUB(diff1, t2v2, t2v1)((diff1)[0] = (t2v2)[0] - (t2v1)[0], (diff1)[1] = (t2v2)[1] - (t2v1)[1], (diff1)[2] = (t2v2)[2] - (t2v1)[2]); | |||||
| 806 | ELL_3V_SUB(diff2, t2v3, t2v1)((diff2)[0] = (t2v3)[0] - (t2v1)[0], (diff2)[1] = (t2v3)[1] - (t2v1)[1], (diff2)[2] = (t2v3)[2] - (t2v1)[2]); | |||||
| 807 | ELL_3V_CROSS(n2, diff1, diff2)((n2)[0] = (diff1)[1]*(diff2)[2] - (diff1)[2]*(diff2)[1], (n2 )[1] = (diff1)[2]*(diff2)[0] - (diff1)[0]*(diff2)[2], (n2)[2] = (diff1)[0]*(diff2)[1] - (diff1)[1]*(diff2)[0]); | |||||
| 808 | d2=-ELL_3V_DOT(n2,t2v1)((n2)[0]*(t2v1)[0] + (n2)[1]*(t2v1)[1] + (n2)[2]*(t2v1)[2]); | |||||
| 809 | t1sd1 = ELL_3V_DOT(n2, t1v1)((n2)[0]*(t1v1)[0] + (n2)[1]*(t1v1)[1] + (n2)[2]*(t1v1)[2])+d2; | |||||
| 810 | t1sd2 = ELL_3V_DOT(n2, t1v2)((n2)[0]*(t1v2)[0] + (n2)[1]*(t1v2)[1] + (n2)[2]*(t1v2)[2])+d2; | |||||
| 811 | t1sd3 = ELL_3V_DOT(n2, t1v3)((n2)[0]*(t1v3)[0] + (n2)[1]*(t1v3)[1] + (n2)[2]*(t1v3)[2])+d2; | |||||
| 812 | if (t1sd1*t1sd2>=0 && t1sd1*t1sd3<=0) { | |||||
| 813 | t1s11=t1v1; t1s12=t1v2; t1s2=t1v3; t1s11sd=t1sd1; | |||||
| 814 | t1s12sd=t1sd2; t1s2sd=t1sd3; | |||||
| 815 | } else if (t1sd1*t1sd3>=0 && t1sd1*t1sd2<=0) { | |||||
| 816 | t1s11=t1v1; t1s12=t1v3; t1s2=t1v2; t1s11sd=t1sd1; | |||||
| 817 | t1s12sd=t1sd3; t1s2sd=t1sd2; | |||||
| 818 | } else if (t1sd2*t1sd3>=0 && t1sd1*t1sd2<=0) { | |||||
| 819 | t1s11=t1v2; t1s12=t1v3; t1s2=t1v1; t1s11sd=t1sd2; | |||||
| 820 | t1s12sd=t1sd3; t1s2sd=t1sd1; | |||||
| 821 | } else | |||||
| 822 | return 0; /* all on the same side; no intersection */ | |||||
| 823 | ||||||
| 824 | /* both planes intersect in a line; check if the intervals on that | |||||
| 825 | * line intersect */ | |||||
| 826 | ELL_3V_CROSS(D,n1,n2)((D)[0] = (n1)[1]*(n2)[2] - (n1)[2]*(n2)[1], (D)[1] = (n1)[2] *(n2)[0] - (n1)[0]*(n2)[2], (D)[2] = (n1)[0]*(n2)[1] - (n1)[1 ]*(n2)[0]); | |||||
| 827 | /* we are only interested in component magnitudes */ | |||||
| 828 | D[0]=fabs(D[0]); D[1]=fabs(D[1]); D[2]=fabs(D[2]); | |||||
| 829 | if (D[0]>=D[1] && D[0]>=D[2]) { | |||||
| 830 | t1p11=t1s11[0]; t1p12=t1s12[0]; t1p2=t1s2[0]; | |||||
| 831 | t2p11=t2s11[0]; t2p12=t2s12[0]; t2p2=t2s2[0]; | |||||
| 832 | } else if (D[1]>=D[0] && D[1]>=D[2]) { | |||||
| 833 | t1p11=t1s11[1]; t1p12=t1s12[1]; t1p2=t1s2[1]; | |||||
| 834 | t2p11=t2s11[1]; t2p12=t2s12[1]; t2p2=t2s2[1]; | |||||
| 835 | } else { | |||||
| 836 | t1p11=t1s11[2]; t1p12=t1s12[2]; t1p2=t1s2[2]; | |||||
| 837 | t2p11=t2s11[2]; t2p12=t2s12[2]; t2p2=t2s2[2]; | |||||
| 838 | } | |||||
| 839 | /* compute interval boundaries */ | |||||
| 840 | t1t1=t1p11+(t1p2-t1p11)*t1s11sd/(t1s11sd-t1s2sd); | |||||
| 841 | t1t2=t1p12+(t1p2-t1p12)*t1s12sd/(t1s12sd-t1s2sd); | |||||
| 842 | if (t1t1>t1t2) { | |||||
| 843 | double help=t1t1; | |||||
| 844 | t1t1=t1t2; | |||||
| 845 | t1t2=help; | |||||
| 846 | } | |||||
| 847 | t2t1=t2p11+(t2p2-t2p11)*t2s11sd/(t2s11sd-t2s2sd); | |||||
| 848 | t2t2=t2p12+(t2p2-t2p12)*t2s12sd/(t2s12sd-t2s2sd); | |||||
| 849 | if (t2t1>t2t2) { | |||||
| 850 | double help=t2t1; | |||||
| 851 | t2t1=t2t2; | |||||
| 852 | t2t2=help; | |||||
| 853 | } | |||||
| 854 | /* test for interval intersection */ | |||||
| 855 | if (t2t1>t1t2 || t1t1>t2t2) return 0; | |||||
| 856 | return 1; | |||||
| 857 | } | |||||
| 858 | } | |||||
| 859 | ||||||
| 860 | /* Score possible local topologies based on the agreement of | |||||
| 861 | * connecting lines with normal directions. Lower scores are | |||||
| 862 | * better. */ | |||||
| 863 | ||||||
| 864 | /* Connections between degenerate points on cell faces; if only four | |||||
| 865 | * degenerate points are present, set p31 to NULL */ | |||||
| 866 | static double | |||||
| 867 | evaluateDegConnection(double *p11, double *p12, double *p13, double *p14, | |||||
| 868 | double *p21, double *p22, double *p23, double *p24, | |||||
| 869 | double *p31, double *p32, double *p33, double *p34, | |||||
| 870 | double *n12, double *n13, double *n22, double *n23, | |||||
| 871 | double *n32, double *n33) { | |||||
| 872 | double diff1[3], diff2[3], diff3[3], ret; | |||||
| 873 | /* first, perform intersection testing */ | |||||
| 874 | if (triIntersectionTest(p11, p12, p13, p21, p22, p23) || | |||||
| 875 | triIntersectionTest(p13, p14, p11, p21, p22, p23) || | |||||
| 876 | triIntersectionTest(p11, p12, p13, p23, p24, p21) || | |||||
| 877 | triIntersectionTest(p13, p14, p11, p23, p24, p21)) | |||||
| 878 | return 1e20; | |||||
| 879 | if (p31 != NULL((void*)0)) { /* three pairs - some more to do */ | |||||
| 880 | if (triIntersectionTest(p11, p12, p13, p31, p32, p33) || | |||||
| 881 | triIntersectionTest(p11, p12, p13, p33, p34, p31) || | |||||
| 882 | triIntersectionTest(p13, p14, p11, p31, p32, p33) || | |||||
| 883 | triIntersectionTest(p13, p14, p11, p33, p34, p31) || | |||||
| 884 | triIntersectionTest(p21, p22, p23, p31, p32, p33) || | |||||
| 885 | triIntersectionTest(p21, p22, p23, p33, p34, p31) || | |||||
| 886 | triIntersectionTest(p23, p24, p21, p31, p32, p33) || | |||||
| 887 | triIntersectionTest(p23, p24, p21, p33, p34, p31)) | |||||
| 888 | return 1e20; | |||||
| 889 | } | |||||
| 890 | ELL_3V_SUB(diff1,p13,p12)((diff1)[0] = (p13)[0] - (p12)[0], (diff1)[1] = (p13)[1] - (p12 )[1], (diff1)[2] = (p13)[2] - (p12)[2]); | |||||
| 891 | ELL_3V_SUB(diff2,p23,p22)((diff2)[0] = (p23)[0] - (p22)[0], (diff2)[1] = (p23)[1] - (p22 )[1], (diff2)[2] = (p23)[2] - (p22)[2]); | |||||
| 892 | ret=fabs(ELL_3V_DOT(diff1,n12)((diff1)[0]*(n12)[0] + (diff1)[1]*(n12)[1] + (diff1)[2]*(n12) [2]))+fabs(ELL_3V_DOT(diff1,n13)((diff1)[0]*(n13)[0] + (diff1)[1]*(n13)[1] + (diff1)[2]*(n13) [2]))+ | |||||
| 893 | fabs(ELL_3V_DOT(diff2,n22)((diff2)[0]*(n22)[0] + (diff2)[1]*(n22)[1] + (diff2)[2]*(n22) [2]))+fabs(ELL_3V_DOT(diff2,n23)((diff2)[0]*(n23)[0] + (diff2)[1]*(n23)[1] + (diff2)[2]*(n23) [2])); | |||||
| 894 | if (p31 != NULL((void*)0)) { | |||||
| 895 | ELL_3V_SUB(diff3,p33,p32)((diff3)[0] = (p33)[0] - (p32)[0], (diff3)[1] = (p33)[1] - (p32 )[1], (diff3)[2] = (p33)[2] - (p32)[2]); | |||||
| 896 | ret+=fabs(ELL_3V_DOT(diff3,n32)((diff3)[0]*(n32)[0] + (diff3)[1]*(n32)[1] + (diff3)[2]*(n32) [2]))+fabs(ELL_3V_DOT(diff3,n33)((diff3)[0]*(n33)[0] + (diff3)[1]*(n33)[1] + (diff3)[2]*(n33) [2])); | |||||
| 897 | } | |||||
| 898 | return ret; | |||||
| 899 | } | |||||
| 900 | ||||||
| 901 | /* suggests a connectivity for a non-trivial combination of | |||||
| 902 | * intersection points in the plane. | |||||
| 903 | * pairs is output (permutation of idcs) | |||||
| 904 | * bestval is input/output (best value so far, start with something big) | |||||
| 905 | * ct is the number of points (currently assumed even) | |||||
| 906 | * idcs is input (idcs that still need to be permuted) | |||||
| 907 | * fixedct is input (number of idcs that are already fixed at this depth) | |||||
| 908 | * coords is an array of 2D coordinates | |||||
| 909 | * norms is an array of 2D vectors */ | |||||
| 910 | static void | |||||
| 911 | findConnectivity(signed char *pairs, double *bestval, int ct, char *idcs, | |||||
| 912 | int fixedct, double *coords, double *norms) { | |||||
| 913 | int i,j; | |||||
| 914 | if (fixedct==ct) { | |||||
| 915 | double weight=0; | |||||
| 916 | for (i=0; i<ct-1; i+=2) { | |||||
| 917 | double diff[2]; | |||||
| 918 | ELL_2V_SUB(diff,coords+2*idcs[i],coords+2*idcs[i+1])((diff)[0] = (coords+2*idcs[i])[0] - (coords+2*idcs[i+1])[0], (diff)[1] = (coords+2*idcs[i])[1] - (coords+2*idcs[i+1])[1]); | |||||
| 919 | weight+=fabs(ELL_2V_DOT(diff,norms+2*idcs[i])((diff)[0]*(norms+2*idcs[i])[0] + (diff)[1]*(norms+2*idcs[i]) [1]))+ | |||||
| 920 | fabs(ELL_2V_DOT(diff,norms+2*idcs[i+1])((diff)[0]*(norms+2*idcs[i+1])[0] + (diff)[1]*(norms+2*idcs[i +1])[1])); | |||||
| 921 | } | |||||
| 922 | if (weight<*bestval) { | |||||
| 923 | *bestval=weight; | |||||
| 924 | memcpy(pairs,idcs,sizeof(char)*ct)__builtin___memcpy_chk (pairs, idcs, sizeof(char)*ct, __builtin_object_size (pairs, 0)); | |||||
| 925 | } | |||||
| 926 | return; | |||||
| 927 | } | |||||
| 928 | /* else: we need a recursion */ | |||||
| 929 | for (i=fixedct+1; i<ct; i++) { | |||||
| 930 | int intersect=0; | |||||
| 931 | char *idxnew; | |||||
| 932 | if (NULL((void*)0) == (idxnew = (char*) malloc (sizeof(char)*ct))) | |||||
| 933 | return; | |||||
| 934 | memcpy(idxnew,idcs,sizeof(char)*ct)__builtin___memcpy_chk (idxnew, idcs, sizeof(char)*ct, __builtin_object_size (idxnew, 0)); | |||||
| 935 | /* try any of the remaining indices as a pair */ | |||||
| 936 | idxnew[fixedct+1]=idcs[i]; | |||||
| 937 | idxnew[i]=idcs[fixedct+1]; | |||||
| 938 | /* check if the resulting line causes an intersection */ | |||||
| 939 | for (j=0;j<fixedct;j+=2) { | |||||
| 940 | if (lineIntersectionTest(coords+2*idxnew[fixedct], | |||||
| 941 | coords+2*idxnew[fixedct+1], | |||||
| 942 | coords+2*idxnew[j],coords+2*idxnew[j+1])) { | |||||
| 943 | intersect=1; | |||||
| 944 | break; | |||||
| 945 | } | |||||
| 946 | } | |||||
| 947 | if (!intersect) { | |||||
| 948 | findConnectivity(pairs, bestval, ct, idxnew, fixedct+2, coords, norms); | |||||
| 949 | } | |||||
| 950 | free(idxnew); | |||||
| 951 | } | |||||
| 952 | } | |||||
| 953 | ||||||
| 954 | #define _SEEK_TREATED_REQUEST0x01 0x01 /* this voxel has to be treated */ | |||||
| 955 | #define _SEEK_TREATED_EDGE00x02 0x02 /* unique edge 0 has been treated */ | |||||
| 956 | #define _SEEK_TREATED_EDGE10x04 0x04 /* unique edge 1 has been treated */ | |||||
| 957 | #define _SEEK_TREATED_EDGE20x08 0x08 /* unique edge 2 has been treated */ | |||||
| 958 | #define _SEEK_TREATED_EDGE30x10 0x10 /* unique edge 3 has been treated */ | |||||
| 959 | #define _SEEK_TREATED_EDGE40x20 0x20 /* unique edge 4 has been treated */ | |||||
| 960 | #define _SEEK_TREATED_FACE30x40 0x40 /* unique face 3 has been treated */ | |||||
| 961 | ||||||
| 962 | /* find deg. points, normals, and connectivity on a given (unique) face | |||||
| 963 | * now refines the search if it couldn't find a degenerate point */ | |||||
| 964 | static void | |||||
| 965 | connectFace(seekContext *sctx, baggage *bag, | |||||
| 966 | unsigned int xi, unsigned int yi, unsigned char faceid) { | |||||
| 967 | int edgeid[4][4]={{0, 2, 3, 1}, /* which edges belong to which unique face? */ | |||||
| 968 | {0, 5, 8, 4}, | |||||
| 969 | {1, 6, 9, 4}, | |||||
| 970 | {8,10,11, 9}}; | |||||
| 971 | unsigned int sx = AIR_CAST(unsigned int, sctx->sx)((unsigned int)(sctx->sx)); | |||||
| 972 | unsigned int si = xi + sx*yi; | |||||
| 973 | unsigned int six = xi + 1 + sx*yi; | |||||
| 974 | unsigned int siy = xi + sx*(yi+1); | |||||
| 975 | unsigned int sixy = xi + 1 + sx*(yi+1); | |||||
| 976 | char inter[12]; /* indices of intersections */ | |||||
| 977 | int pass; /* allow multiple refined passes */ | |||||
| 978 | int i; | |||||
| 979 | /* voxel in which treated information is stored for local edge i */ | |||||
| 980 | /* which vertices form which unique face? */ | |||||
| 981 | int verti[4][4]; | |||||
| 982 | int voxel[4][4]; | |||||
| 983 | /* mask for treated information in the above voxel */ | |||||
| 984 | char mask[4][4]={{_SEEK_TREATED_EDGE00x02, _SEEK_TREATED_EDGE10x04, | |||||
| 985 | _SEEK_TREATED_EDGE00x02, _SEEK_TREATED_EDGE10x04}, | |||||
| 986 | {_SEEK_TREATED_EDGE00x02, _SEEK_TREATED_EDGE20x08, | |||||
| 987 | _SEEK_TREATED_EDGE30x10, _SEEK_TREATED_EDGE20x08}, | |||||
| 988 | {_SEEK_TREATED_EDGE10x04, _SEEK_TREATED_EDGE20x08, | |||||
| 989 | _SEEK_TREATED_EDGE40x20, _SEEK_TREATED_EDGE20x08}, | |||||
| 990 | {_SEEK_TREATED_EDGE30x10, _SEEK_TREATED_EDGE40x20, | |||||
| 991 | _SEEK_TREATED_EDGE30x10, _SEEK_TREATED_EDGE40x20}}; | |||||
| 992 | /* start- and endpoints of the edges */ | |||||
| 993 | int verts[4][4], verte[4][4]; | |||||
| 994 | char treat[4]={0,0,0,0}; | |||||
| 995 | double dpthresh[3]={0.7,0.8,0.9}; | |||||
| 996 | /* candidates for degenerate points */ | |||||
| 997 | double candidates[18]={0.5,0.5, 0.25,0.25, 0.25,0.75, | |||||
| 998 | 0.75,0.25, 0.75,0.75, 0.5,0.25, | |||||
| 999 | 0.25,0.5, 0.75,0.5, 0.6,0.75}; | |||||
| 1000 | int cand_idx[4]={0, 1, 5, 9}; | |||||
| 1001 | int interct; | |||||
| 1002 | ||||||
| 1003 | /* apparently, some C compilers cannot make these initializations in-place */ | |||||
| 1004 | ELL_4V_SET(verti[0], 0+2*si, 0+2*six, 0+2*siy, 0+2*sixy)((verti[0])[0] = (0+2*si), (verti[0])[1] = (0+2*six), (verti[ 0])[2] = (0+2*siy), (verti[0])[3] = (0+2*sixy)); | |||||
| 1005 | ELL_4V_SET(verti[1], 0+2*si, 0+2*six, 1+2*si, 1+2*six)((verti[1])[0] = (0+2*si), (verti[1])[1] = (0+2*six), (verti[ 1])[2] = (1+2*si), (verti[1])[3] = (1+2*six)); | |||||
| 1006 | ELL_4V_SET(verti[2], 0+2*si, 0+2*siy, 1+2*si, 1+2*siy)((verti[2])[0] = (0+2*si), (verti[2])[1] = (0+2*siy), (verti[ 2])[2] = (1+2*si), (verti[2])[3] = (1+2*siy)); | |||||
| 1007 | ELL_4V_SET(verti[3], 1+2*si, 1+2*six, 1+2*siy, 1+2*sixy)((verti[3])[0] = (1+2*si), (verti[3])[1] = (1+2*six), (verti[ 3])[2] = (1+2*siy), (verti[3])[3] = (1+2*sixy)); | |||||
| 1008 | ELL_4V_SET(voxel[0], si, six, siy, si)((voxel[0])[0] = (si), (voxel[0])[1] = (six), (voxel[0])[2] = (siy), (voxel[0])[3] = (si)); | |||||
| 1009 | ELL_4V_SET(voxel[1], si, six, si, si)((voxel[1])[0] = (si), (voxel[1])[1] = (six), (voxel[1])[2] = (si), (voxel[1])[3] = (si)); | |||||
| 1010 | ELL_4V_SET(voxel[2], si, siy, si, si)((voxel[2])[0] = (si), (voxel[2])[1] = (siy), (voxel[2])[2] = (si), (voxel[2])[3] = (si)); | |||||
| 1011 | ELL_4V_SET(voxel[3], si, six, siy, si)((voxel[3])[0] = (si), (voxel[3])[1] = (six), (voxel[3])[2] = (siy), (voxel[3])[3] = (si)); | |||||
| 1012 | ELL_4V_SET(verts[0], 0+2*si, 0+2*six, 0+2*siy, 0+2*si)((verts[0])[0] = (0+2*si), (verts[0])[1] = (0+2*six), (verts[ 0])[2] = (0+2*siy), (verts[0])[3] = (0+2*si)); | |||||
| 1013 | ELL_4V_SET(verts[1], 0+2*si, 0+2*six, 1+2*si, 0+2*si)((verts[1])[0] = (0+2*si), (verts[1])[1] = (0+2*six), (verts[ 1])[2] = (1+2*si), (verts[1])[3] = (0+2*si)); | |||||
| 1014 | ELL_4V_SET(verts[2], 0+2*si, 0+2*siy, 1+2*si, 0+2*si)((verts[2])[0] = (0+2*si), (verts[2])[1] = (0+2*siy), (verts[ 2])[2] = (1+2*si), (verts[2])[3] = (0+2*si)); | |||||
| 1015 | ELL_4V_SET(verts[3], 1+2*si, 1+2*six, 1+2*siy, 1+2*si)((verts[3])[0] = (1+2*si), (verts[3])[1] = (1+2*six), (verts[ 3])[2] = (1+2*siy), (verts[3])[3] = (1+2*si)); | |||||
| 1016 | ELL_4V_SET(verte[0], 0+2*six, 0+2*sixy, 0+2*sixy, 0+2*siy)((verte[0])[0] = (0+2*six), (verte[0])[1] = (0+2*sixy), (verte [0])[2] = (0+2*sixy), (verte[0])[3] = (0+2*siy)); | |||||
| 1017 | ELL_4V_SET(verte[1], 0+2*six, 1+2*six, 1+2*six, 1+2*si)((verte[1])[0] = (0+2*six), (verte[1])[1] = (1+2*six), (verte [1])[2] = (1+2*six), (verte[1])[3] = (1+2*si)); | |||||
| 1018 | ELL_4V_SET(verte[2], 0+2*siy, 1+2*siy, 1+2*siy, 1+2*si)((verte[2])[0] = (0+2*siy), (verte[2])[1] = (1+2*siy), (verte [2])[2] = (1+2*siy), (verte[2])[3] = (1+2*si)); | |||||
| 1019 | ELL_4V_SET(verte[3], 1+2*six, 1+2*sixy, 1+2*sixy, 1+2*siy)((verte[3])[0] = (1+2*six), (verte[3])[1] = (1+2*sixy), (verte [3])[2] = (1+2*sixy), (verte[3])[3] = (1+2*siy)); | |||||
| 1020 | ||||||
| 1021 | /* find out which edges have not yet been treated */ | |||||
| 1022 | for (i=0; i<4; i++) { | |||||
| 1023 | if (!(sctx->treated[voxel[faceid][i]]&mask[faceid][i])) { | |||||
| 1024 | treat[i]=1; /* we need to treat this */ | |||||
| 1025 | sctx->treated[voxel[faceid][i]] |= mask[faceid][i]; | |||||
| 1026 | } | |||||
| 1027 | } | |||||
| 1028 | ||||||
| 1029 | for (pass=0; pass<3; pass++) { | |||||
| 1030 | /* first, find intersections for edges that need treatment */ | |||||
| 1031 | int j; | |||||
| 1032 | for (j=0; j<4; j++) { | |||||
| 1033 | double interpos[8]; | |||||
| 1034 | if (!treat[j]) continue; | |||||
| 1035 | interct=findFeatureIntersection(interpos, | |||||
| 1036 | sctx->t + 9*verts[faceid][j], | |||||
| 1037 | sctx->hess + 9*verts[faceid][j], | |||||
| 1038 | sctx->grad + 3*verts[faceid][j], | |||||
| 1039 | sctx->t + 9*verte[faceid][j], | |||||
| 1040 | sctx->hess + 9*verte[faceid][j], | |||||
| 1041 | sctx->grad + 3*verte[faceid][j], | |||||
| 1042 | 0.0, 1.0, bag->esIdx==2, | |||||
| 1043 | sctx->evalDiffThresh, | |||||
| 1044 | dpthresh[pass]); | |||||
| 1045 | if (interct>3) interct=3; | |||||
| 1046 | for (i=0; i<interct; i++) { | |||||
| 1047 | double x=0, y=0, z=0; unsigned int xb=0, yb=0, idb=0; | |||||
| 1048 | sctx->edgealpha[3*(bag->evti[edgeid[faceid][j]]+5*si)+i] = interpos[i]; | |||||
| 1049 | switch (edgeid[faceid][j]) { | |||||
| 1050 | case 0: x=xi+interpos[i]; y=yi; z=bag->zi; | |||||
| 1051 | xb=xi; yb=yi; idb=0; break; | |||||
| 1052 | case 1: x=xi; y=yi+interpos[i]; z=bag->zi; | |||||
| 1053 | xb=xi; yb=yi; idb=1; break; | |||||
| 1054 | case 2: x=xi+1; y=yi+interpos[i]; z=bag->zi; | |||||
| 1055 | xb=xi+1; yb=yi; idb=1; break; | |||||
| 1056 | case 3: x=xi+interpos[i]; y=yi+1; z=bag->zi; | |||||
| 1057 | xb=xi; yb=yi+1; idb=0; break; | |||||
| 1058 | case 4: x=xi; y=yi; z=bag->zi+interpos[i]; | |||||
| 1059 | xb=xi; yb=yi; idb=2; break; | |||||
| 1060 | case 5: x=xi+1; y=yi; z=bag->zi+interpos[i]; | |||||
| 1061 | xb=xi+1; yb=yi; idb=2; break; | |||||
| 1062 | case 6: x=xi; y=yi+1; z=bag->zi+interpos[i]; | |||||
| 1063 | xb=xi; yb=yi+1; idb=2; break; | |||||
| 1064 | case 7: x=xi+1; y=yi+1; z=bag->zi+interpos[i]; | |||||
| 1065 | xb=xi+1; yb=yi+1; idb=2; break; | |||||
| 1066 | case 8: x=xi+interpos[i]; y=yi; z=bag->zi+1; | |||||
| 1067 | xb=xi; yb=yi; idb=3; break; | |||||
| 1068 | case 9: x=xi; y=yi+interpos[i]; z=bag->zi+1; | |||||
| 1069 | xb=xi; yb=yi; idb=4; break; | |||||
| 1070 | case 10: x=xi+1; y=yi+interpos[i]; z=bag->zi+1; | |||||
| 1071 | xb=xi+1; yb=yi; idb=4; break; | |||||
| 1072 | case 11: x=xi+interpos[i]; y=yi+1; z=bag->zi+1; | |||||
| 1073 | xb=xi; yb=yi+1; idb=3; break; | |||||
| 1074 | } | |||||
| 1075 | ELL_3V_SET(sctx->edgeicoord+9*(bag->evti[edgeid[faceid][j]]+5*si)+3*i,((sctx->edgeicoord+9*(bag->evti[edgeid[faceid][j]]+5*si )+3*i)[0] = (x), (sctx->edgeicoord+9*(bag->evti[edgeid[ faceid][j]]+5*si)+3*i)[1] = (y), (sctx->edgeicoord+9*(bag-> evti[edgeid[faceid][j]]+5*si)+3*i)[2] = (z)) | |||||
| 1076 | x, y, z)((sctx->edgeicoord+9*(bag->evti[edgeid[faceid][j]]+5*si )+3*i)[0] = (x), (sctx->edgeicoord+9*(bag->evti[edgeid[ faceid][j]]+5*si)+3*i)[1] = (y), (sctx->edgeicoord+9*(bag-> evti[edgeid[faceid][j]]+5*si)+3*i)[2] = (z)); | |||||
| 1077 | computeEdgeGradient(sctx, bag, sctx->edgenorm+ | |||||
| 1078 | 9*(bag->evti[edgeid[faceid][j]]+5*si)+3*i, | |||||
| 1079 | xb, yb, idb, interpos[i]); | |||||
| 1080 | } | |||||
| 1081 | } | |||||
| 1082 | ||||||
| 1083 | interct=0; /* number of feature intersections */ | |||||
| 1084 | for (i=0; i<3; i++) { | |||||
| 1085 | if (sctx->edgealpha[3*(bag->evti[edgeid[faceid][0]]+5*si)+i]>=0) | |||||
| 1086 | inter[interct++]=i; /* numbering is local w.r.t. face */ | |||||
| 1087 | if (sctx->edgealpha[3*(bag->evti[edgeid[faceid][1]]+5*si)+i]>=0) | |||||
| 1088 | inter[interct++]=3+i; | |||||
| 1089 | if (sctx->edgealpha[3*(bag->evti[edgeid[faceid][2]]+5*si)+i]>=0) | |||||
| 1090 | inter[interct++]=6+i; | |||||
| 1091 | if (sctx->edgealpha[3*(bag->evti[edgeid[faceid][3]]+5*si)+i]>=0) | |||||
| 1092 | inter[interct++]=9+i; | |||||
| 1093 | } | |||||
| 1094 | if (interct%2==1) { /* we need to look for a degeneracy */ | |||||
| 1095 | int k; | |||||
| 1096 | for (k=cand_idx[pass]; k<cand_idx[pass+1]; k++) { | |||||
| 1097 | ELL_2V_SET(sctx->facecoord+2*(faceid+4*si),((sctx->facecoord+2*(faceid+4*si))[0]=(candidates[2*k]), ( sctx->facecoord+2*(faceid+4*si))[1]=(candidates[2*k+1])) | |||||
| 1098 | candidates[2*k], candidates[2*k+1])((sctx->facecoord+2*(faceid+4*si))[0]=(candidates[2*k]), ( sctx->facecoord+2*(faceid+4*si))[1]=(candidates[2*k+1])); | |||||
| 1099 | if (!seekDescendToDeg(sctx->facecoord+2*(faceid+4*si), | |||||
| 1100 | sctx->hess + 9*verti[faceid][0], | |||||
| 1101 | sctx->hess + 9*verti[faceid][1], | |||||
| 1102 | sctx->hess + 9*verti[faceid][2], | |||||
| 1103 | sctx->hess + 9*verti[faceid][3], | |||||
| 1104 | 50, 1e-9, (bag->esIdx==2)?'l':'p')) { | |||||
| 1105 | inter[interct++]=12; /* 12 means "deg. point on this face */ | |||||
| 1106 | break; | |||||
| 1107 | } | |||||
| 1108 | } | |||||
| 1109 | if ((pass==2) && (inter[interct-1]!=12)) { | |||||
| 1110 | /* nothing helped, so insert a dummy vertex */ | |||||
| 1111 | ELL_2V_SET(sctx->facecoord+2*(faceid+4*si), 0.5, 0.5)((sctx->facecoord+2*(faceid+4*si))[0]=(0.5), (sctx->facecoord +2*(faceid+4*si))[1]=(0.5)); | |||||
| 1112 | inter[interct++]=12; | |||||
| 1113 | } | |||||
| 1114 | if (inter[interct-1]==12) { | |||||
| 1115 | computeFaceGradient(sctx, sctx->facenorm+3*(faceid+4*si), | |||||
| 1116 | xi, yi, faceid, sctx->facecoord+2*(faceid+4*si)); | |||||
| 1117 | switch (faceid) { | |||||
| 1118 | case 0: ELL_3V_SET(sctx->faceicoord+3*(faceid+4*si),((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord [2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] = (yi+sctx->facecoord[2*(faceid+4*si)+1]), (sctx->faceicoord +3*(faceid+4*si))[2] = (bag->zi)) | |||||
| 1119 | xi+sctx->facecoord[2*(faceid+4*si)],((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord [2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] = (yi+sctx->facecoord[2*(faceid+4*si)+1]), (sctx->faceicoord +3*(faceid+4*si))[2] = (bag->zi)) | |||||
| 1120 | yi+sctx->facecoord[2*(faceid+4*si)+1], bag->zi)((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord [2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] = (yi+sctx->facecoord[2*(faceid+4*si)+1]), (sctx->faceicoord +3*(faceid+4*si))[2] = (bag->zi)); | |||||
| 1121 | break; | |||||
| 1122 | case 1: ELL_3V_SET(sctx->faceicoord+3*(faceid+4*si),((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord [2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] = (yi), (sctx->faceicoord+3*(faceid+4*si))[2] = (bag->zi +sctx->facecoord[2*(faceid+4*si)+1])) | |||||
| 1123 | xi+sctx->facecoord[2*(faceid+4*si)], yi,((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord [2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] = (yi), (sctx->faceicoord+3*(faceid+4*si))[2] = (bag->zi +sctx->facecoord[2*(faceid+4*si)+1])) | |||||
| 1124 | bag->zi+sctx->facecoord[2*(faceid+4*si)+1])((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord [2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] = (yi), (sctx->faceicoord+3*(faceid+4*si))[2] = (bag->zi +sctx->facecoord[2*(faceid+4*si)+1])); | |||||
| 1125 | break; | |||||
| 1126 | case 2: ELL_3V_SET(sctx->faceicoord+3*(faceid+4*si), xi,((sctx->faceicoord+3*(faceid+4*si))[0] = (xi), (sctx->faceicoord +3*(faceid+4*si))[1] = (yi+sctx->facecoord[2*(faceid+4*si) ]), (sctx->faceicoord+3*(faceid+4*si))[2] = (bag->zi+sctx ->facecoord[2*(faceid+4*si)+1])) | |||||
| 1127 | yi+sctx->facecoord[2*(faceid+4*si)],((sctx->faceicoord+3*(faceid+4*si))[0] = (xi), (sctx->faceicoord +3*(faceid+4*si))[1] = (yi+sctx->facecoord[2*(faceid+4*si) ]), (sctx->faceicoord+3*(faceid+4*si))[2] = (bag->zi+sctx ->facecoord[2*(faceid+4*si)+1])) | |||||
| 1128 | bag->zi+sctx->facecoord[2*(faceid+4*si)+1])((sctx->faceicoord+3*(faceid+4*si))[0] = (xi), (sctx->faceicoord +3*(faceid+4*si))[1] = (yi+sctx->facecoord[2*(faceid+4*si) ]), (sctx->faceicoord+3*(faceid+4*si))[2] = (bag->zi+sctx ->facecoord[2*(faceid+4*si)+1])); | |||||
| 1129 | break; | |||||
| 1130 | case 3: ELL_3V_SET(sctx->faceicoord+3*(faceid+4*si),((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord [2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] = (yi+sctx->facecoord[2*(faceid+4*si)+1]), (sctx->faceicoord +3*(faceid+4*si))[2] = (bag->zi+1)) | |||||
| 1131 | xi+sctx->facecoord[2*(faceid+4*si)],((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord [2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] = (yi+sctx->facecoord[2*(faceid+4*si)+1]), (sctx->faceicoord +3*(faceid+4*si))[2] = (bag->zi+1)) | |||||
| 1132 | yi+sctx->facecoord[2*(faceid+4*si)+1], bag->zi+1)((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord [2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] = (yi+sctx->facecoord[2*(faceid+4*si)+1]), (sctx->faceicoord +3*(faceid+4*si))[2] = (bag->zi+1)); | |||||
| 1133 | break; | |||||
| 1134 | } | |||||
| 1135 | } | |||||
| 1136 | } | |||||
| 1137 | if (interct%2==0) { /* we can break out */ | |||||
| 1138 | break; | |||||
| 1139 | } | |||||
| 1140 | } | |||||
| 1141 | ||||||
| 1142 | if (interct<=1) { /* there is no connectivity on this face */ | |||||
| 1143 | ELL_4V_SET(sctx->pairs+12*(faceid+4*si),-1,-1,-1,-1)((sctx->pairs+12*(faceid+4*si))[0] = (-1), (sctx->pairs +12*(faceid+4*si))[1] = (-1), (sctx->pairs+12*(faceid+4*si ))[2] = (-1), (sctx->pairs+12*(faceid+4*si))[3] = (-1)); | |||||
| 1144 | } else if (interct==2) { /* connectivity is straightforward */ | |||||
| 1145 | ELL_4V_SET(sctx->pairs+12*(faceid+4*si),inter[0],inter[1],-1,-1)((sctx->pairs+12*(faceid+4*si))[0] = (inter[0]), (sctx-> pairs+12*(faceid+4*si))[1] = (inter[1]), (sctx->pairs+12*( faceid+4*si))[2] = (-1), (sctx->pairs+12*(faceid+4*si))[3] = (-1)); | |||||
| 1146 | } else { /* we need gradients and coordinates to make a decision */ | |||||
| 1147 | double interc[24]; /* 2D coordinates of intersection points */ | |||||
| 1148 | double intern[24]; /* 2D normals at intersection points */ | |||||
| 1149 | /* used to find the best pairing without self-intersection */ | |||||
| 1150 | double bestscore=1e20; | |||||
| 1151 | char idcs[12]; /* consider if we need to restrict this */ | |||||
| 1152 | for (i=0; i<interct; i++) { | |||||
| 1153 | if (inter[i]<12) { /* edge feature */ | |||||
| 1154 | int resolved=edgeid[faceid][inter[i]/3]; | |||||
| 1155 | int offset=inter[i]%3; | |||||
| 1156 | switch (faceid) { | |||||
| 1157 | case 0: case 3: | |||||
| 1158 | ELL_2V_SET(interc+2*i,((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved ]+5*si)+3*offset]), (interc+2*i)[1]=(sctx->edgeicoord[9*(bag ->evti[resolved]+5*si)+3*offset+1])) | |||||
| 1159 | sctx->edgeicoord[9*(bag->evti[resolved]+5*si)+3*offset],((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved ]+5*si)+3*offset]), (interc+2*i)[1]=(sctx->edgeicoord[9*(bag ->evti[resolved]+5*si)+3*offset+1])) | |||||
| 1160 | sctx->edgeicoord[9*(bag->evti[resolved]+5*si)+3*offset+1])((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved ]+5*si)+3*offset]), (interc+2*i)[1]=(sctx->edgeicoord[9*(bag ->evti[resolved]+5*si)+3*offset+1])); | |||||
| 1161 | ELL_2V_SET(intern+2*i,((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved] +5*si)+3*offset]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag-> evti[resolved]+5*si)+3*offset+1])) | |||||
| 1162 | sctx->edgenorm[9*(bag->evti[resolved]+5*si)+3*offset],((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved] +5*si)+3*offset]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag-> evti[resolved]+5*si)+3*offset+1])) | |||||
| 1163 | sctx->edgenorm[9*(bag->evti[resolved]+5*si)+3*offset+1])((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved] +5*si)+3*offset]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag-> evti[resolved]+5*si)+3*offset+1])); | |||||
| 1164 | break; | |||||
| 1165 | case 1: | |||||
| 1166 | ELL_2V_SET(interc+2*i,((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved ]+5*si)+3*offset]), (interc+2*i)[1]=(sctx->edgeicoord[9*(bag ->evti[resolved]+5*si)+3*offset+2])) | |||||
| 1167 | sctx->edgeicoord[9*(bag->evti[resolved]+5*si)+3*offset],((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved ]+5*si)+3*offset]), (interc+2*i)[1]=(sctx->edgeicoord[9*(bag ->evti[resolved]+5*si)+3*offset+2])) | |||||
| 1168 | sctx->edgeicoord[9*(bag->evti[resolved]+5*si)+3*offset+2])((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved ]+5*si)+3*offset]), (interc+2*i)[1]=(sctx->edgeicoord[9*(bag ->evti[resolved]+5*si)+3*offset+2])); | |||||
| 1169 | ELL_2V_SET(intern+2*i,((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved] +5*si)+3*offset]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag-> evti[resolved]+5*si)+3*offset+2])) | |||||
| 1170 | sctx->edgenorm[9*(bag->evti[resolved]+5*si)+3*offset],((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved] +5*si)+3*offset]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag-> evti[resolved]+5*si)+3*offset+2])) | |||||
| 1171 | sctx->edgenorm[9*(bag->evti[resolved]+5*si)+3*offset+2])((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved] +5*si)+3*offset]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag-> evti[resolved]+5*si)+3*offset+2])); | |||||
| 1172 | break; | |||||
| 1173 | case 2: | |||||
| 1174 | ELL_2V_SET(interc+2*i,((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved ]+5*si)+3*offset+1]), (interc+2*i)[1]=(sctx->edgeicoord[9* (bag->evti[resolved]+5*si)+3*offset+2])) | |||||
| 1175 | sctx->edgeicoord[9*(bag->evti[resolved]+5*si)+3*offset+1],((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved ]+5*si)+3*offset+1]), (interc+2*i)[1]=(sctx->edgeicoord[9* (bag->evti[resolved]+5*si)+3*offset+2])) | |||||
| 1176 | sctx->edgeicoord[9*(bag->evti[resolved]+5*si)+3*offset+2])((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved ]+5*si)+3*offset+1]), (interc+2*i)[1]=(sctx->edgeicoord[9* (bag->evti[resolved]+5*si)+3*offset+2])); | |||||
| 1177 | ELL_2V_SET(intern+2*i,((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved] +5*si)+3*offset+1]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag ->evti[resolved]+5*si)+3*offset+2])) | |||||
| 1178 | sctx->edgenorm[9*(bag->evti[resolved]+5*si)+3*offset+1],((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved] +5*si)+3*offset+1]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag ->evti[resolved]+5*si)+3*offset+2])) | |||||
| 1179 | sctx->edgenorm[9*(bag->evti[resolved]+5*si)+3*offset+2])((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved] +5*si)+3*offset+1]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag ->evti[resolved]+5*si)+3*offset+2])); | |||||
| 1180 | break; | |||||
| 1181 | } | |||||
| 1182 | } else { /* face feature */ | |||||
| 1183 | switch (faceid) { | |||||
| 1184 | case 0: case 3: | |||||
| 1185 | ELL_2V_SET(interc+2*i, sctx->faceicoord[3*(faceid+4*si)],((interc+2*i)[0]=(sctx->faceicoord[3*(faceid+4*si)]), (interc +2*i)[1]=(sctx->faceicoord[3*(faceid+4*si)+1])) | |||||
| 1186 | sctx->faceicoord[3*(faceid+4*si)+1])((interc+2*i)[0]=(sctx->faceicoord[3*(faceid+4*si)]), (interc +2*i)[1]=(sctx->faceicoord[3*(faceid+4*si)+1])); | |||||
| 1187 | ELL_2V_SET(intern+2*i, sctx->facenorm[3*(faceid+4*si)],((intern+2*i)[0]=(sctx->facenorm[3*(faceid+4*si)]), (intern +2*i)[1]=(sctx->facenorm[3*(faceid+4*si)+1])) | |||||
| 1188 | sctx->facenorm[3*(faceid+4*si)+1])((intern+2*i)[0]=(sctx->facenorm[3*(faceid+4*si)]), (intern +2*i)[1]=(sctx->facenorm[3*(faceid+4*si)+1])); | |||||
| 1189 | break; | |||||
| 1190 | case 1: | |||||
| 1191 | ELL_2V_SET(interc+2*i, sctx->faceicoord[3*(faceid+4*si)],((interc+2*i)[0]=(sctx->faceicoord[3*(faceid+4*si)]), (interc +2*i)[1]=(sctx->faceicoord[3*(faceid+4*si)+2])) | |||||
| 1192 | sctx->faceicoord[3*(faceid+4*si)+2])((interc+2*i)[0]=(sctx->faceicoord[3*(faceid+4*si)]), (interc +2*i)[1]=(sctx->faceicoord[3*(faceid+4*si)+2])); | |||||
| 1193 | ELL_2V_SET(intern+2*i, sctx->facenorm[3*(faceid+4*si)],((intern+2*i)[0]=(sctx->facenorm[3*(faceid+4*si)]), (intern +2*i)[1]=(sctx->facenorm[3*(faceid+4*si)+2])) | |||||
| 1194 | sctx->facenorm[3*(faceid+4*si)+2])((intern+2*i)[0]=(sctx->facenorm[3*(faceid+4*si)]), (intern +2*i)[1]=(sctx->facenorm[3*(faceid+4*si)+2])); | |||||
| 1195 | break; | |||||
| 1196 | case 2: | |||||
| 1197 | ELL_2V_SET(interc+2*i, sctx->faceicoord[3*(faceid+4*si)+1],((interc+2*i)[0]=(sctx->faceicoord[3*(faceid+4*si)+1]), (interc +2*i)[1]=(sctx->faceicoord[3*(faceid+4*si)+2])) | |||||
| 1198 | sctx->faceicoord[3*(faceid+4*si)+2])((interc+2*i)[0]=(sctx->faceicoord[3*(faceid+4*si)+1]), (interc +2*i)[1]=(sctx->faceicoord[3*(faceid+4*si)+2])); | |||||
| 1199 | ELL_2V_SET(intern+2*i, sctx->facenorm[3*(faceid+4*si)+1],((intern+2*i)[0]=(sctx->facenorm[3*(faceid+4*si)+1]), (intern +2*i)[1]=(sctx->facenorm[3*(faceid+4*si)+2])) | |||||
| 1200 | sctx->facenorm[3*(faceid+4*si)+2])((intern+2*i)[0]=(sctx->facenorm[3*(faceid+4*si)+1]), (intern +2*i)[1]=(sctx->facenorm[3*(faceid+4*si)+2])); | |||||
| 1201 | break; | |||||
| 1202 | } | |||||
| 1203 | } | |||||
| 1204 | } | |||||
| 1205 | for (i=0; i<interct; i++) { | |||||
| 1206 | sctx->pairs[12*(faceid+4*si)+i]=i; | |||||
| 1207 | idcs[i]=i; | |||||
| 1208 | } | |||||
| 1209 | findConnectivity(sctx->pairs+12*(faceid+4*si), &bestscore, interct, | |||||
| 1210 | idcs, 0, interc, intern); | |||||
| 1211 | for (i=0; i<interct; i++) | |||||
| 1212 | sctx->pairs[12*(faceid+4*si)+i]=inter[sctx->pairs[12*(faceid+4*si)+i]]; | |||||
| 1213 | for (i=interct; i<12; i++) | |||||
| 1214 | sctx->pairs[12*(faceid+4*si)+i]=-1; | |||||
| 1215 | } | |||||
| 1216 | } | |||||
| 1217 | ||||||
| 1218 | static void | |||||
| 1219 | intersectionShuffleProbe(seekContext *sctx, baggage *bag) { | |||||
| 1220 | unsigned int xi, yi, sx, sy, si; | |||||
| 1221 | int i; | |||||
| 1222 | ||||||
| 1223 | sx = AIR_CAST(unsigned int, sctx->sx)((unsigned int)(sctx->sx)); | |||||
| 1224 | sy = AIR_CAST(unsigned int, sctx->sy)((unsigned int)(sctx->sy)); | |||||
| 1225 | ||||||
| 1226 | for (yi=0; yi<sy; yi++) { | |||||
| 1227 | for (xi=0; xi<sx; xi++) { | |||||
| 1228 | si = xi + sx*yi; | |||||
| 1229 | /* take care of facevidx array */ | |||||
| 1230 | if (!bag->zi) { /* initialize, else copy over */ | |||||
| 1231 | sctx->facevidx[0 + 4*si] = -1; | |||||
| 1232 | } else { | |||||
| 1233 | sctx->facevidx[0 + 4*si] = sctx->facevidx[3 + 4*si]; | |||||
| 1234 | } | |||||
| 1235 | sctx->facevidx[1 + 4*si] = sctx->facevidx[2 + 4*si] = | |||||
| 1236 | sctx->facevidx[3 + 4*si] = -1; | |||||
| 1237 | ||||||
| 1238 | /* copy or reset data on the 5 unique edges */ | |||||
| 1239 | ||||||
| 1240 | if (sctx->treated[si]&_SEEK_TREATED_EDGE30x10) { | |||||
| 1241 | /* has been treated, just copy results */ | |||||
| 1242 | ELL_3V_COPY(sctx->edgealpha+3*(0+5*si), sctx->edgealpha+3*(3+5*si))((sctx->edgealpha+3*(0+5*si))[0] = (sctx->edgealpha+3*( 3+5*si))[0], (sctx->edgealpha+3*(0+5*si))[1] = (sctx->edgealpha +3*(3+5*si))[1], (sctx->edgealpha+3*(0+5*si))[2] = (sctx-> edgealpha+3*(3+5*si))[2]); | |||||
| 1243 | ELL_3M_COPY(sctx->edgenorm+9*(0+5*si), sctx->edgenorm+9*(3+5*si))((((sctx->edgenorm+9*(0+5*si))+0)[0] = ((sctx->edgenorm +9*(3+5*si))+0)[0], ((sctx->edgenorm+9*(0+5*si))+0)[1] = ( (sctx->edgenorm+9*(3+5*si))+0)[1], ((sctx->edgenorm+9*( 0+5*si))+0)[2] = ((sctx->edgenorm+9*(3+5*si))+0)[2]), (((sctx ->edgenorm+9*(0+5*si))+3)[0] = ((sctx->edgenorm+9*(3+5* si))+3)[0], ((sctx->edgenorm+9*(0+5*si))+3)[1] = ((sctx-> edgenorm+9*(3+5*si))+3)[1], ((sctx->edgenorm+9*(0+5*si))+3 )[2] = ((sctx->edgenorm+9*(3+5*si))+3)[2]), (((sctx->edgenorm +9*(0+5*si))+6)[0] = ((sctx->edgenorm+9*(3+5*si))+6)[0], ( (sctx->edgenorm+9*(0+5*si))+6)[1] = ((sctx->edgenorm+9* (3+5*si))+6)[1], ((sctx->edgenorm+9*(0+5*si))+6)[2] = ((sctx ->edgenorm+9*(3+5*si))+6)[2])); | |||||
| 1244 | ELL_3M_COPY(sctx->edgeicoord+9*(0+5*si), sctx->edgeicoord+9*(3+5*si))((((sctx->edgeicoord+9*(0+5*si))+0)[0] = ((sctx->edgeicoord +9*(3+5*si))+0)[0], ((sctx->edgeicoord+9*(0+5*si))+0)[1] = ((sctx->edgeicoord+9*(3+5*si))+0)[1], ((sctx->edgeicoord +9*(0+5*si))+0)[2] = ((sctx->edgeicoord+9*(3+5*si))+0)[2]) , (((sctx->edgeicoord+9*(0+5*si))+3)[0] = ((sctx->edgeicoord +9*(3+5*si))+3)[0], ((sctx->edgeicoord+9*(0+5*si))+3)[1] = ((sctx->edgeicoord+9*(3+5*si))+3)[1], ((sctx->edgeicoord +9*(0+5*si))+3)[2] = ((sctx->edgeicoord+9*(3+5*si))+3)[2]) , (((sctx->edgeicoord+9*(0+5*si))+6)[0] = ((sctx->edgeicoord +9*(3+5*si))+6)[0], ((sctx->edgeicoord+9*(0+5*si))+6)[1] = ((sctx->edgeicoord+9*(3+5*si))+6)[1], ((sctx->edgeicoord +9*(0+5*si))+6)[2] = ((sctx->edgeicoord+9*(3+5*si))+6)[2]) ); | |||||
| 1245 | sctx->treated[si]|=_SEEK_TREATED_EDGE00x02; | |||||
| 1246 | } else if (xi!=sx-1) { | |||||
| 1247 | ELL_3V_SET(sctx->edgealpha+3*(0+5*si),-1,-1,-1)((sctx->edgealpha+3*(0+5*si))[0] = (-1), (sctx->edgealpha +3*(0+5*si))[1] = (-1), (sctx->edgealpha+3*(0+5*si))[2] = ( -1)); | |||||
| 1248 | sctx->treated[si]&=0xFF^_SEEK_TREATED_EDGE00x02; | |||||
| 1249 | } | |||||
| 1250 | ||||||
| 1251 | if (sctx->treated[si]&_SEEK_TREATED_EDGE40x20) { | |||||
| 1252 | /* has been treated, just copy results */ | |||||
| 1253 | ELL_3V_COPY(sctx->edgealpha+3*(1+5*si), sctx->edgealpha+3*(4+5*si))((sctx->edgealpha+3*(1+5*si))[0] = (sctx->edgealpha+3*( 4+5*si))[0], (sctx->edgealpha+3*(1+5*si))[1] = (sctx->edgealpha +3*(4+5*si))[1], (sctx->edgealpha+3*(1+5*si))[2] = (sctx-> edgealpha+3*(4+5*si))[2]); | |||||
| 1254 | ELL_3M_COPY(sctx->edgenorm+9*(1+5*si), sctx->edgenorm+9*(4+5*si))((((sctx->edgenorm+9*(1+5*si))+0)[0] = ((sctx->edgenorm +9*(4+5*si))+0)[0], ((sctx->edgenorm+9*(1+5*si))+0)[1] = ( (sctx->edgenorm+9*(4+5*si))+0)[1], ((sctx->edgenorm+9*( 1+5*si))+0)[2] = ((sctx->edgenorm+9*(4+5*si))+0)[2]), (((sctx ->edgenorm+9*(1+5*si))+3)[0] = ((sctx->edgenorm+9*(4+5* si))+3)[0], ((sctx->edgenorm+9*(1+5*si))+3)[1] = ((sctx-> edgenorm+9*(4+5*si))+3)[1], ((sctx->edgenorm+9*(1+5*si))+3 )[2] = ((sctx->edgenorm+9*(4+5*si))+3)[2]), (((sctx->edgenorm +9*(1+5*si))+6)[0] = ((sctx->edgenorm+9*(4+5*si))+6)[0], ( (sctx->edgenorm+9*(1+5*si))+6)[1] = ((sctx->edgenorm+9* (4+5*si))+6)[1], ((sctx->edgenorm+9*(1+5*si))+6)[2] = ((sctx ->edgenorm+9*(4+5*si))+6)[2])); | |||||
| 1255 | ELL_3M_COPY(sctx->edgeicoord+9*(1+5*si), sctx->edgeicoord+9*(4+5*si))((((sctx->edgeicoord+9*(1+5*si))+0)[0] = ((sctx->edgeicoord +9*(4+5*si))+0)[0], ((sctx->edgeicoord+9*(1+5*si))+0)[1] = ((sctx->edgeicoord+9*(4+5*si))+0)[1], ((sctx->edgeicoord +9*(1+5*si))+0)[2] = ((sctx->edgeicoord+9*(4+5*si))+0)[2]) , (((sctx->edgeicoord+9*(1+5*si))+3)[0] = ((sctx->edgeicoord +9*(4+5*si))+3)[0], ((sctx->edgeicoord+9*(1+5*si))+3)[1] = ((sctx->edgeicoord+9*(4+5*si))+3)[1], ((sctx->edgeicoord +9*(1+5*si))+3)[2] = ((sctx->edgeicoord+9*(4+5*si))+3)[2]) , (((sctx->edgeicoord+9*(1+5*si))+6)[0] = ((sctx->edgeicoord +9*(4+5*si))+6)[0], ((sctx->edgeicoord+9*(1+5*si))+6)[1] = ((sctx->edgeicoord+9*(4+5*si))+6)[1], ((sctx->edgeicoord +9*(1+5*si))+6)[2] = ((sctx->edgeicoord+9*(4+5*si))+6)[2]) ); | |||||
| 1256 | sctx->treated[si]|=_SEEK_TREATED_EDGE10x04; | |||||
| 1257 | } else if (yi!=sy-1) { | |||||
| 1258 | ELL_3V_SET(sctx->edgealpha+3*(1+5*si),-1,-1,-1)((sctx->edgealpha+3*(1+5*si))[0] = (-1), (sctx->edgealpha +3*(1+5*si))[1] = (-1), (sctx->edgealpha+3*(1+5*si))[2] = ( -1)); | |||||
| 1259 | sctx->treated[si]&=0xFF^_SEEK_TREATED_EDGE10x04; | |||||
| 1260 | } | |||||
| 1261 | ||||||
| 1262 | /* edges within and at top of the slab are new */ | |||||
| 1263 | ELL_3V_SET(sctx->edgealpha+3*(2+5*si),-1,-1,-1)((sctx->edgealpha+3*(2+5*si))[0] = (-1), (sctx->edgealpha +3*(2+5*si))[1] = (-1), (sctx->edgealpha+3*(2+5*si))[2] = ( -1)); | |||||
| 1264 | sctx->treated[si]&=0xFF^_SEEK_TREATED_EDGE20x08; | |||||
| 1265 | ||||||
| 1266 | ELL_3V_SET(sctx->edgealpha+3*(3+5*si),-1,-1,-1)((sctx->edgealpha+3*(3+5*si))[0] = (-1), (sctx->edgealpha +3*(3+5*si))[1] = (-1), (sctx->edgealpha+3*(3+5*si))[2] = ( -1)); | |||||
| 1267 | sctx->treated[si]&=0xFF^_SEEK_TREATED_EDGE30x10; | |||||
| 1268 | ||||||
| 1269 | ELL_3V_SET(sctx->edgealpha+3*(4+5*si),-1,-1,-1)((sctx->edgealpha+3*(4+5*si))[0] = (-1), (sctx->edgealpha +3*(4+5*si))[1] = (-1), (sctx->edgealpha+3*(4+5*si))[2] = ( -1)); | |||||
| 1270 | sctx->treated[si]&=0xFF^_SEEK_TREATED_EDGE40x20; | |||||
| 1271 | } | |||||
| 1272 | } | |||||
| 1273 | ||||||
| 1274 | /* find missing deg. points, edge intersections, normals, and | |||||
| 1275 | * connectivity on the four unique faces | |||||
| 1276 | * this is done in a separate pass to make sure that all edge information | |||||
| 1277 | * has been updated */ | |||||
| 1278 | for (yi=0; yi<sy; yi++) { | |||||
| 1279 | for (xi=0; xi<sx; xi++) { | |||||
| 1280 | si = xi + sx*yi; | |||||
| 1281 | if (sctx->treated[si]&_SEEK_TREATED_FACE30x40) { | |||||
| 1282 | /* we can copy previous results */ | |||||
| 1283 | ELL_2V_COPY(sctx->facecoord+2*(0+4*si), sctx->facecoord+2*(3+4*si))((sctx->facecoord+2*(0+4*si))[0] = (sctx->facecoord+2*( 3+4*si))[0], (sctx->facecoord+2*(0+4*si))[1] = (sctx->facecoord +2*(3+4*si))[1]); | |||||
| 1284 | ELL_3V_COPY(sctx->faceicoord+3*(0+4*si), sctx->faceicoord+3*(3+4*si))((sctx->faceicoord+3*(0+4*si))[0] = (sctx->faceicoord+3 *(3+4*si))[0], (sctx->faceicoord+3*(0+4*si))[1] = (sctx-> faceicoord+3*(3+4*si))[1], (sctx->faceicoord+3*(0+4*si))[2 ] = (sctx->faceicoord+3*(3+4*si))[2]); | |||||
| 1285 | ELL_3V_COPY(sctx->facenorm+3*(0+4*si), sctx->facenorm+3*(3+4*si))((sctx->facenorm+3*(0+4*si))[0] = (sctx->facenorm+3*(3+ 4*si))[0], (sctx->facenorm+3*(0+4*si))[1] = (sctx->facenorm +3*(3+4*si))[1], (sctx->facenorm+3*(0+4*si))[2] = (sctx-> facenorm+3*(3+4*si))[2]); | |||||
| 1286 | for (i=0; i<3; i++) | |||||
| 1287 | ELL_4V_COPY(sctx->pairs+12*(0+4*si)+4*i, sctx->pairs+12*(3+4*si)+4*i)((sctx->pairs+12*(0+4*si)+4*i)[0] = (sctx->pairs+12*(3+ 4*si)+4*i)[0], (sctx->pairs+12*(0+4*si)+4*i)[1] = (sctx-> pairs+12*(3+4*si)+4*i)[1], (sctx->pairs+12*(0+4*si)+4*i)[2 ] = (sctx->pairs+12*(3+4*si)+4*i)[2], (sctx->pairs+12*( 0+4*si)+4*i)[3] = (sctx->pairs+12*(3+4*si)+4*i)[3]); | |||||
| 1288 | } else if (xi!=sx-1 && yi!=sy-1) { | |||||
| 1289 | if (sctx->treated[si]&_SEEK_TREATED_REQUEST0x01) | |||||
| 1290 | connectFace(sctx, bag, xi, yi, 0); | |||||
| 1291 | else | |||||
| 1292 | ELL_4V_SET(sctx->pairs+12*(0+4*si),-1,-1,-1,-1)((sctx->pairs+12*(0+4*si))[0] = (-1), (sctx->pairs+12*( 0+4*si))[1] = (-1), (sctx->pairs+12*(0+4*si))[2] = (-1), ( sctx->pairs+12*(0+4*si))[3] = (-1)); | |||||
| 1293 | } | |||||
| 1294 | if (xi!=sx-1) { | |||||
| 1295 | if (sctx->treated[si]&_SEEK_TREATED_REQUEST0x01 || | |||||
| 1296 | (yi!=0 && sctx->treated[xi+sx*(yi-1)]&_SEEK_TREATED_REQUEST0x01)) | |||||
| 1297 | connectFace(sctx, bag, xi, yi, 1); | |||||
| 1298 | else ELL_4V_SET(sctx->pairs+12*(1+4*si),-1,-1,-1,-1)((sctx->pairs+12*(1+4*si))[0] = (-1), (sctx->pairs+12*( 1+4*si))[1] = (-1), (sctx->pairs+12*(1+4*si))[2] = (-1), ( sctx->pairs+12*(1+4*si))[3] = (-1)); | |||||
| 1299 | } | |||||
| 1300 | if (yi!=sy-1) { | |||||
| 1301 | if (sctx->treated[si]&_SEEK_TREATED_REQUEST0x01 || | |||||
| 1302 | (xi!=0 && sctx->treated[xi-1+sx*yi]&_SEEK_TREATED_REQUEST0x01)) | |||||
| 1303 | connectFace(sctx, bag, xi, yi, 2); | |||||
| 1304 | else ELL_4V_SET(sctx->pairs+12*(2+4*si),-1,-1,-1,-1)((sctx->pairs+12*(2+4*si))[0] = (-1), (sctx->pairs+12*( 2+4*si))[1] = (-1), (sctx->pairs+12*(2+4*si))[2] = (-1), ( sctx->pairs+12*(2+4*si))[3] = (-1)); | |||||
| 1305 | if (xi!=sx-1) { | |||||
| 1306 | if (sctx->treated[si]&_SEEK_TREATED_REQUEST0x01) { | |||||
| 1307 | connectFace(sctx, bag, xi, yi, 3); | |||||
| 1308 | sctx->treated[si]|=_SEEK_TREATED_FACE30x40; | |||||
| 1309 | } else { | |||||
| 1310 | ELL_4V_SET(sctx->pairs+12*(3+4*si),-1,-1,-1,-1)((sctx->pairs+12*(3+4*si))[0] = (-1), (sctx->pairs+12*( 3+4*si))[1] = (-1), (sctx->pairs+12*(3+4*si))[2] = (-1), ( sctx->pairs+12*(3+4*si))[3] = (-1)); | |||||
| 1311 | sctx->treated[si]&=0xFF^_SEEK_TREATED_FACE30x40; | |||||
| 1312 | } | |||||
| 1313 | } | |||||
| 1314 | } | |||||
| 1315 | } | |||||
| 1316 | } | |||||
| 1317 | } | |||||
| 1318 | ||||||
| 1319 | /* special triangulation routine for use with T-based extraction */ | |||||
| 1320 | int | |||||
| 1321 | _seekTriangulateT(seekContext *sctx, baggage *bag, limnPolyData *lpld) { | |||||
| 1322 | unsigned xi, yi, sx, sy, si, i; | |||||
| 1323 | ||||||
| 1324 | /* map edge indices w.r.t. faces (as used in sctx->pairs) back to | |||||
| 1325 | * edge indices w.r.t. voxel */ | |||||
| 1326 | char edges[6][5]={{0, 2, 3, 1,12}, | |||||
| 1327 | {0, 5, 8, 4,13}, | |||||
| 1328 | {2, 7,10, 5,14}, | |||||
| 1329 | {3, 7,11, 6,15}, | |||||
| 1330 | {1, 6, 9, 4,16}, | |||||
| 1331 | {8,10,11, 9,17}}; | |||||
| 1332 | ||||||
| 1333 | sx = AIR_CAST(unsigned int, sctx->sx)((unsigned int)(sctx->sx)); | |||||
| 1334 | sy = AIR_CAST(unsigned int, sctx->sy)((unsigned int)(sctx->sy)); | |||||
| 1335 | ||||||
| 1336 | for (yi=0; yi<sy-1; yi++) { | |||||
| 1337 | for (xi=0; xi<sx-1; xi++) { | |||||
| 1338 | int fvti[6]; /* indices into unique face array */ | |||||
| 1339 | char connections[84];/* (12 edges * 3 possible intersections+6 faces)*2 */ | |||||
| 1340 | char degeneracies[6]; | |||||
| 1341 | int degct=0; | |||||
| 1342 | ||||||
| 1343 | unsigned int face; | |||||
| 1344 | ||||||
| 1345 | if (sctx->strengthUse && sctx->stng[0+2*(xi+sx*yi)] < sctx->strength && | |||||
| 1346 | sctx->stng[1+2*(xi+sx*yi)] < sctx->strength && | |||||
| 1347 | sctx->stng[0+2*(xi+1+sx*yi)] < sctx->strength && | |||||
| 1348 | sctx->stng[1+2*(xi+1+sx*yi)] < sctx->strength && | |||||
| 1349 | sctx->stng[0+2*(xi+sx*(yi+1))] < sctx->strength && | |||||
| 1350 | sctx->stng[1+2*(xi+sx*(yi+1))] < sctx->strength && | |||||
| 1351 | sctx->stng[0+2*(xi+1+sx*(yi+1))] < sctx->strength && | |||||
| 1352 | sctx->stng[1+2*(xi+1+sx*(yi+1))] < sctx->strength) | |||||
| 1353 | continue;/* all vertices below strength limit, do not create geometry */ | |||||
| 1354 | ||||||
| 1355 | si = xi + sx*yi; | |||||
| 1356 | ELL_3V_SET(fvti, 0 + 4*si, 1 + 4*si, 2 + 4*(xi+1 + sx*yi))((fvti)[0] = (0 + 4*si), (fvti)[1] = (1 + 4*si), (fvti)[2] = ( 2 + 4*(xi+1 + sx*yi))); | |||||
| 1357 | ELL_3V_SET(fvti+3, 1 + 4*(xi + sx*(yi+1)), 2 + 4*si, 3 + 4*si)((fvti+3)[0] = (1 + 4*(xi + sx*(yi+1))), (fvti+3)[1] = (2 + 4 *si), (fvti+3)[2] = (3 + 4*si)); | |||||
| 1358 | ||||||
| 1359 | /* collect all intersection + connectivity info for this voxel */ | |||||
| 1360 | memset(connections,-1,sizeof(connections))__builtin___memset_chk (connections, -1, sizeof(connections), __builtin_object_size (connections, 0)); | |||||
| 1361 | for (face=0; face<6; face++) { | |||||
| 1362 | for (i=0; i<6; i++) { | |||||
| 1363 | int idx1, offset1, idx2, offset2, idxmap1, idxmap2; | |||||
| 1364 | if (sctx->pairs[12*fvti[face]+2*i]==-1) break; | |||||
| 1365 | idx1=edges[face][sctx->pairs[12*fvti[face]+2*i]/3]; | |||||
| 1366 | offset1=sctx->pairs[12*fvti[face]+2*i]%3; | |||||
| 1367 | idx2=edges[face][sctx->pairs[12*fvti[face]+2*i+1]/3]; | |||||
| 1368 | offset2=sctx->pairs[12*fvti[face]+2*i+1]%3; | |||||
| 1369 | idxmap1=3*idx1+offset1; | |||||
| 1370 | idxmap2=3*idx2+offset2; | |||||
| 1371 | if (idx1>11) { | |||||
| 1372 | idxmap1=idx1+24; /* +36-12 */ | |||||
| 1373 | degeneracies[degct++] = idxmap1; | |||||
| 1374 | } | |||||
| 1375 | if (idx2>11) { | |||||
| 1376 | idxmap2=idx2+24; | |||||
| 1377 | degeneracies[degct++] = idxmap2; | |||||
| 1378 | } | |||||
| 1379 | ||||||
| 1380 | if (connections[2*idxmap1]==-1) | |||||
| 1381 | connections[2*idxmap1]=idxmap2; | |||||
| 1382 | else | |||||
| 1383 | connections[2*idxmap1+1]=idxmap2; | |||||
| 1384 | if (connections[2*idxmap2]==-1) | |||||
| 1385 | connections[2*idxmap2]=idxmap1; | |||||
| 1386 | else | |||||
| 1387 | connections[2*idxmap2+1]=idxmap1; | |||||
| 1388 | } | |||||
| 1389 | } | |||||
| 1390 | ||||||
| 1391 | /* connect the degenerate points */ | |||||
| 1392 | if (degct==2) { | |||||
| 1393 | connections[2*degeneracies[0]+1]=degeneracies[1]; | |||||
| 1394 | connections[2*degeneracies[1]+1]=degeneracies[0]; | |||||
| 1395 | } else if (degct==4) { | |||||
| 1396 | int bestchoice=0; | |||||
| 1397 | int eidcs[4], fidcs[4]; | |||||
| 1398 | int k; | |||||
| 1399 | double bestscore, score; | |||||
| 1400 | for (k=0; k<4; ++k) { | |||||
| 1401 | eidcs[k]=3*(bag->evti[connections[2*degeneracies[k]]/3]+5*si)+ | |||||
| 1402 | connections[2*degeneracies[k]]%3; | |||||
| 1403 | fidcs[k]=fvti[degeneracies[k]-36]; | |||||
| 1404 | } | |||||
| 1405 | bestscore=evaluateDegConnection(sctx->edgeicoord+3*eidcs[0], | |||||
| 1406 | sctx->faceicoord+3*fidcs[0], | |||||
| 1407 | sctx->faceicoord+3*fidcs[1], | |||||
| 1408 | sctx->edgeicoord+3*eidcs[1], | |||||
| 1409 | sctx->edgeicoord+3*eidcs[2], | |||||
| 1410 | sctx->faceicoord+3*fidcs[2], | |||||
| 1411 | sctx->faceicoord+3*fidcs[3], | |||||
| 1412 | sctx->edgeicoord+3*eidcs[3], | |||||
| 1413 | NULL((void*)0), NULL((void*)0), NULL((void*)0), NULL((void*)0), | |||||
| 1414 | sctx->facenorm+3*fidcs[0], | |||||
| 1415 | sctx->facenorm+3*fidcs[1], | |||||
| 1416 | sctx->facenorm+3*fidcs[2], | |||||
| 1417 | sctx->facenorm+3*fidcs[3], | |||||
| 1418 | NULL((void*)0), NULL((void*)0)); | |||||
| 1419 | score=evaluateDegConnection(sctx->edgeicoord+3*eidcs[0], | |||||
| 1420 | sctx->faceicoord+3*fidcs[0], | |||||
| 1421 | sctx->faceicoord+3*fidcs[2], | |||||
| 1422 | sctx->edgeicoord+3*eidcs[2], | |||||
| 1423 | sctx->edgeicoord+3*eidcs[1], | |||||
| 1424 | sctx->faceicoord+3*fidcs[1], | |||||
| 1425 | sctx->faceicoord+3*fidcs[3], | |||||
| 1426 | sctx->edgeicoord+3*eidcs[3], | |||||
| 1427 | NULL((void*)0), NULL((void*)0), NULL((void*)0), NULL((void*)0), | |||||
| 1428 | sctx->facenorm+3*fidcs[0], | |||||
| 1429 | sctx->facenorm+3*fidcs[2], | |||||
| 1430 | sctx->facenorm+3*fidcs[1], | |||||
| 1431 | sctx->facenorm+3*fidcs[3], | |||||
| 1432 | NULL((void*)0), NULL((void*)0)); | |||||
| 1433 | if (score<bestscore) { | |||||
| 1434 | bestscore=score; | |||||
| 1435 | bestchoice=1; | |||||
| 1436 | } | |||||
| 1437 | score=evaluateDegConnection(sctx->edgeicoord+3*eidcs[0], | |||||
| 1438 | sctx->faceicoord+3*fidcs[0], | |||||
| 1439 | sctx->faceicoord+3*fidcs[3], | |||||
| 1440 | sctx->edgeicoord+3*eidcs[3], | |||||
| 1441 | sctx->edgeicoord+3*eidcs[1], | |||||
| 1442 | sctx->faceicoord+3*fidcs[1], | |||||
| 1443 | sctx->faceicoord+3*fidcs[2], | |||||
| 1444 | sctx->edgeicoord+3*eidcs[2], | |||||
| 1445 | NULL((void*)0), NULL((void*)0), NULL((void*)0), NULL((void*)0), | |||||
| 1446 | sctx->facenorm+3*fidcs[0], | |||||
| 1447 | sctx->facenorm+3*fidcs[3], | |||||
| 1448 | sctx->facenorm+3*fidcs[1], | |||||
| 1449 | sctx->facenorm+3*fidcs[2], | |||||
| 1450 | NULL((void*)0), NULL((void*)0)); | |||||
| 1451 | if (score<bestscore) { | |||||
| 1452 | bestscore=score; | |||||
| 1453 | bestchoice=2; | |||||
| 1454 | } | |||||
| 1455 | switch (bestchoice) { | |||||
| 1456 | case 0: connections[2*degeneracies[0]+1]=degeneracies[1]; | |||||
| 1457 | connections[2*degeneracies[1]+1]=degeneracies[0]; | |||||
| 1458 | connections[2*degeneracies[2]+1]=degeneracies[3]; | |||||
| 1459 | connections[2*degeneracies[3]+1]=degeneracies[2]; | |||||
| 1460 | break; | |||||
| 1461 | case 1: connections[2*degeneracies[0]+1]=degeneracies[2]; | |||||
| 1462 | connections[2*degeneracies[2]+1]=degeneracies[0]; | |||||
| 1463 | connections[2*degeneracies[1]+1]=degeneracies[3]; | |||||
| 1464 | connections[2*degeneracies[3]+1]=degeneracies[1]; | |||||
| 1465 | break; | |||||
| 1466 | case 2: connections[2*degeneracies[0]+1]=degeneracies[3]; | |||||
| 1467 | connections[2*degeneracies[3]+1]=degeneracies[0]; | |||||
| 1468 | connections[2*degeneracies[1]+1]=degeneracies[2]; | |||||
| 1469 | connections[2*degeneracies[2]+1]=degeneracies[1]; | |||||
| 1470 | break; | |||||
| 1471 | } | |||||
| 1472 | } else if (degct==6) { | |||||
| 1473 | int bestchoice=0; | |||||
| 1474 | int eidcs[6], fidcs[6]; | |||||
| 1475 | int k; | |||||
| 1476 | double bestscore; | |||||
| 1477 | int pairings[15][6]={{0,1,2,3,4,5},{0,1,2,4,3,5},{0,1,2,5,3,4}, | |||||
| 1478 | {0,2,1,3,4,5},{0,2,1,4,3,5},{0,2,1,5,3,4}, | |||||
| 1479 | {0,3,1,2,4,5},{0,3,1,4,2,5},{0,3,1,5,2,4}, | |||||
| 1480 | {0,4,1,2,3,5},{0,4,1,3,2,5},{0,4,1,5,2,3}, | |||||
| 1481 | {0,5,1,2,3,4},{0,5,1,3,2,4},{0,5,1,4,2,3}}; | |||||
| 1482 | for (k=0; k<6; ++k) { | |||||
| 1483 | eidcs[k]=3*(bag->evti[connections[2*degeneracies[k]]/3]+5*si)+ | |||||
| 1484 | connections[2*degeneracies[k]]%3; | |||||
| 1485 | fidcs[k]=fvti[degeneracies[k]-36]; | |||||
| 1486 | } | |||||
| 1487 | bestscore=evaluateDegConnection(sctx->edgeicoord+3*eidcs[0], | |||||
| 1488 | sctx->faceicoord+3*fidcs[0], | |||||
| 1489 | sctx->faceicoord+3*fidcs[1], | |||||
| 1490 | sctx->edgeicoord+3*eidcs[1], | |||||
| 1491 | sctx->edgeicoord+3*eidcs[2], | |||||
| 1492 | sctx->faceicoord+3*fidcs[2], | |||||
| 1493 | sctx->faceicoord+3*fidcs[3], | |||||
| 1494 | sctx->edgeicoord+3*eidcs[3], | |||||
| 1495 | sctx->edgeicoord+3*eidcs[4], | |||||
| 1496 | sctx->faceicoord+3*fidcs[4], | |||||
| 1497 | sctx->faceicoord+3*fidcs[5], | |||||
| 1498 | sctx->edgeicoord+3*eidcs[5], | |||||
| 1499 | sctx->facenorm+3*fidcs[0], | |||||
| 1500 | sctx->facenorm+3*fidcs[1], | |||||
| 1501 | sctx->facenorm+3*fidcs[2], | |||||
| 1502 | sctx->facenorm+3*fidcs[3], | |||||
| 1503 | sctx->facenorm+3*fidcs[4], | |||||
| 1504 | sctx->facenorm+3*fidcs[5]); | |||||
| 1505 | for (k=1; k<15; ++k) { | |||||
| 1506 | double score=evaluateDegConnection | |||||
| 1507 | (sctx->edgeicoord+3*eidcs[pairings[k][0]], | |||||
| 1508 | sctx->faceicoord+3*fidcs[pairings[k][0]], | |||||
| 1509 | sctx->faceicoord+3*fidcs[pairings[k][1]], | |||||
| 1510 | sctx->edgeicoord+3*eidcs[pairings[k][1]], | |||||
| 1511 | sctx->edgeicoord+3*eidcs[pairings[k][2]], | |||||
| 1512 | sctx->faceicoord+3*fidcs[pairings[k][2]], | |||||
| 1513 | sctx->faceicoord+3*fidcs[pairings[k][3]], | |||||
| 1514 | sctx->edgeicoord+3*eidcs[pairings[k][3]], | |||||
| 1515 | sctx->edgeicoord+3*eidcs[pairings[k][4]], | |||||
| 1516 | sctx->faceicoord+3*fidcs[pairings[k][4]], | |||||
| 1517 | sctx->faceicoord+3*fidcs[pairings[k][5]], | |||||
| 1518 | sctx->edgeicoord+3*eidcs[pairings[k][5]], | |||||
| 1519 | sctx->facenorm+3*fidcs[pairings[k][0]], | |||||
| 1520 | sctx->facenorm+3*fidcs[pairings[k][1]], | |||||
| 1521 | sctx->facenorm+3*fidcs[pairings[k][2]], | |||||
| 1522 | sctx->facenorm+3*fidcs[pairings[k][3]], | |||||
| 1523 | sctx->facenorm+3*fidcs[pairings[k][4]], | |||||
| 1524 | sctx->facenorm+3*fidcs[pairings[k][5]]); | |||||
| 1525 | if (score<bestscore) { | |||||
| 1526 | bestscore=score; bestchoice=k; | |||||
| 1527 | } | |||||
| 1528 | } | |||||
| 1529 | connections[2*degeneracies[pairings[bestchoice][0]]+1]= | |||||
| 1530 | degeneracies[pairings[bestchoice][1]]; | |||||
| 1531 | connections[2*degeneracies[pairings[bestchoice][1]]+1]= | |||||
| 1532 | degeneracies[pairings[bestchoice][0]]; | |||||
| 1533 | connections[2*degeneracies[pairings[bestchoice][2]]+1]= | |||||
| 1534 | degeneracies[pairings[bestchoice][3]]; | |||||
| 1535 | connections[2*degeneracies[pairings[bestchoice][3]]+1]= | |||||
| 1536 | degeneracies[pairings[bestchoice][2]]; | |||||
| 1537 | connections[2*degeneracies[pairings[bestchoice][4]]+1]= | |||||
| 1538 | degeneracies[pairings[bestchoice][5]]; | |||||
| 1539 | connections[2*degeneracies[pairings[bestchoice][5]]+1]= | |||||
| 1540 | degeneracies[pairings[bestchoice][4]]; | |||||
| 1541 | } | |||||
| 1542 | ||||||
| 1543 | /* sufficient to run to 36: each polygon will contain at least | |||||
| 1544 | * one edge vertex */ | |||||
| 1545 | for (i=0; i<36; i++) { | |||||
| 1546 | if (connections[2*i]!=-1) { | |||||
| 1547 | /* extract polygon from connections array */ | |||||
| 1548 | signed char polygon[42]; | |||||
| 1549 | unsigned char polyct=0; | |||||
| 1550 | char thiz=i; | |||||
| 1551 | char next=connections[2*i]; | |||||
| 1552 | polygon[polyct++]=i; | |||||
| 1553 | connections[2*i]=-1; | |||||
| 1554 | while (next!=-1) { | |||||
| 1555 | char helpnext; | |||||
| 1556 | polygon[polyct++]=next; | |||||
| 1557 | if (connections[2*next]==thiz) { | |||||
| 1558 | helpnext=connections[2*next+1]; | |||||
| 1559 | } else { | |||||
| 1560 | helpnext=connections[2*next]; | |||||
| 1561 | } | |||||
| 1562 | connections[2*next]=connections[2*next+1]=-1; | |||||
| 1563 | thiz = next; next = helpnext; | |||||
| 1564 | if (next==polygon[0]) | |||||
| 1565 | break; /* polygon is closed */ | |||||
| 1566 | } | |||||
| 1567 | if (next!=-1) { /* else: discard unclosed polygon */ | |||||
| 1568 | /* make sure all required vertices are there */ | |||||
| 1569 | int j; | |||||
| 1570 | for (j=0; j<polyct; ++j) { | |||||
| 1571 | double tvertA[4], tvertB[4]; | |||||
| 1572 | if (polygon[j]<36) { /* we may need to insert an edge vertex */ | |||||
| 1573 | int eidx=3*(bag->evti[polygon[j]/3] + 5*si)+polygon[j]%3; | |||||
| 1574 | if (-1 == sctx->vidx[eidx]) { | |||||
| 1575 | int ovi; | |||||
| 1576 | ELL_3V_COPY(tvertA, sctx->edgeicoord+3*eidx)((tvertA)[0] = (sctx->edgeicoord+3*eidx)[0], (tvertA)[1] = (sctx->edgeicoord+3*eidx)[1], (tvertA)[2] = (sctx->edgeicoord +3*eidx)[2]); | |||||
| 1577 | tvertA[3]=1.0; | |||||
| 1578 | ||||||
| 1579 | /* tvertB in input index space */ | |||||
| 1580 | ELL_4MV_MUL(tvertB, sctx->txfIdx, tvertA)((tvertB)[0]=(sctx->txfIdx)[ 0]*(tvertA)[0]+(sctx->txfIdx )[ 1]*(tvertA)[1]+(sctx->txfIdx)[ 2]*(tvertA)[2]+(sctx-> txfIdx)[ 3]*(tvertA)[3], (tvertB)[1]=(sctx->txfIdx)[ 4]*(tvertA )[0]+(sctx->txfIdx)[ 5]*(tvertA)[1]+(sctx->txfIdx)[ 6]* (tvertA)[2]+(sctx->txfIdx)[ 7]*(tvertA)[3], (tvertB)[2]=(sctx ->txfIdx)[ 8]*(tvertA)[0]+(sctx->txfIdx)[ 9]*(tvertA)[1 ]+(sctx->txfIdx)[10]*(tvertA)[2]+(sctx->txfIdx)[11]*(tvertA )[3], (tvertB)[3]=(sctx->txfIdx)[12]*(tvertA)[0]+(sctx-> txfIdx)[13]*(tvertA)[1]+(sctx->txfIdx)[14]*(tvertA)[2]+(sctx ->txfIdx)[15]*(tvertA)[3]); | |||||
| 1581 | /* tvertA in world space */ | |||||
| 1582 | ELL_4MV_MUL(tvertA, sctx->shape->ItoW, tvertB)((tvertA)[0]=(sctx->shape->ItoW)[ 0]*(tvertB)[0]+(sctx-> shape->ItoW)[ 1]*(tvertB)[1]+(sctx->shape->ItoW)[ 2] *(tvertB)[2]+(sctx->shape->ItoW)[ 3]*(tvertB)[3], (tvertA )[1]=(sctx->shape->ItoW)[ 4]*(tvertB)[0]+(sctx->shape ->ItoW)[ 5]*(tvertB)[1]+(sctx->shape->ItoW)[ 6]*(tvertB )[2]+(sctx->shape->ItoW)[ 7]*(tvertB)[3], (tvertA)[2]=( sctx->shape->ItoW)[ 8]*(tvertB)[0]+(sctx->shape-> ItoW)[ 9]*(tvertB)[1]+(sctx->shape->ItoW)[10]*(tvertB)[ 2]+(sctx->shape->ItoW)[11]*(tvertB)[3], (tvertA)[3]=(sctx ->shape->ItoW)[12]*(tvertB)[0]+(sctx->shape->ItoW )[13]*(tvertB)[1]+(sctx->shape->ItoW)[14]*(tvertB)[2]+( sctx->shape->ItoW)[15]*(tvertB)[3]); | |||||
| 1583 | ELL_4V_HOMOG(tvertA, tvertA)((tvertA)[0] = (tvertA)[0]/(tvertA)[3], (tvertA)[1] = (tvertA )[1]/(tvertA)[3], (tvertA)[2] = (tvertA)[2]/(tvertA)[3], (tvertA )[3] = 1.0); | |||||
| 1584 | ||||||
| 1585 | ovi = sctx->vidx[eidx] = | |||||
| 1586 | airArrayLenIncr(bag->xyzwArr, 1); | |||||
| 1587 | ELL_4V_SET_TT(lpld->xyzw + 4*ovi, float,((lpld->xyzw + 4*ovi)[0] = ((float)((tvertA[0]))), (lpld-> xyzw + 4*ovi)[1] = ((float)((tvertA[1]))), (lpld->xyzw + 4 *ovi)[2] = ((float)((tvertA[2]))), (lpld->xyzw + 4*ovi)[3] = ((float)((1.0)))) | |||||
| 1588 | tvertA[0], tvertA[1], tvertA[2], 1.0)((lpld->xyzw + 4*ovi)[0] = ((float)((tvertA[0]))), (lpld-> xyzw + 4*ovi)[1] = ((float)((tvertA[1]))), (lpld->xyzw + 4 *ovi)[2] = ((float)((tvertA[2]))), (lpld->xyzw + 4*ovi)[3] = ((float)((1.0)))); | |||||
| 1589 | ||||||
| 1590 | if (sctx->normalsFind) { | |||||
| 1591 | double len=ELL_3V_LEN(sctx->edgenorm+3*eidx)(sqrt((((sctx->edgenorm+3*eidx))[0]*((sctx->edgenorm+3* eidx))[0] + ((sctx->edgenorm+3*eidx))[1]*((sctx->edgenorm +3*eidx))[1] + ((sctx->edgenorm+3*eidx))[2]*((sctx->edgenorm +3*eidx))[2]))); | |||||
| 1592 | airArrayLenIncr(bag->normArr, 1); | |||||
| 1593 | ELL_3V_SCALE_TT(lpld->norm + 3*ovi, float, 1.0/len,((lpld->norm + 3*ovi)[0] = ((float)((1.0/len)*(sctx->edgenorm +3*eidx)[0])), (lpld->norm + 3*ovi)[1] = ((float)((1.0/len )*(sctx->edgenorm+3*eidx)[1])), (lpld->norm + 3*ovi)[2] = ((float)((1.0/len)*(sctx->edgenorm+3*eidx)[2]))) | |||||
| 1594 | sctx->edgenorm+3*eidx)((lpld->norm + 3*ovi)[0] = ((float)((1.0/len)*(sctx->edgenorm +3*eidx)[0])), (lpld->norm + 3*ovi)[1] = ((float)((1.0/len )*(sctx->edgenorm+3*eidx)[1])), (lpld->norm + 3*ovi)[2] = ((float)((1.0/len)*(sctx->edgenorm+3*eidx)[2]))); | |||||
| 1595 | } | |||||
| 1596 | ||||||
| 1597 | sctx->vertNum++; | |||||
| 1598 | } | |||||
| 1599 | } else { /* we may need to insert a face vertex */ | |||||
| 1600 | int fidx=fvti[polygon[j]-36]; | |||||
| 1601 | if (-1 == sctx->facevidx[fidx]) { | |||||
| 1602 | int ovi; | |||||
| 1603 | ELL_3V_COPY(tvertA, sctx->faceicoord+3*fidx)((tvertA)[0] = (sctx->faceicoord+3*fidx)[0], (tvertA)[1] = (sctx->faceicoord+3*fidx)[1], (tvertA)[2] = (sctx->faceicoord +3*fidx)[2]); | |||||
| 1604 | tvertA[3]=1.0; | |||||
| 1605 | /* tvertB in input index space */ | |||||
| 1606 | ELL_4MV_MUL(tvertB, sctx->txfIdx, tvertA)((tvertB)[0]=(sctx->txfIdx)[ 0]*(tvertA)[0]+(sctx->txfIdx )[ 1]*(tvertA)[1]+(sctx->txfIdx)[ 2]*(tvertA)[2]+(sctx-> txfIdx)[ 3]*(tvertA)[3], (tvertB)[1]=(sctx->txfIdx)[ 4]*(tvertA )[0]+(sctx->txfIdx)[ 5]*(tvertA)[1]+(sctx->txfIdx)[ 6]* (tvertA)[2]+(sctx->txfIdx)[ 7]*(tvertA)[3], (tvertB)[2]=(sctx ->txfIdx)[ 8]*(tvertA)[0]+(sctx->txfIdx)[ 9]*(tvertA)[1 ]+(sctx->txfIdx)[10]*(tvertA)[2]+(sctx->txfIdx)[11]*(tvertA )[3], (tvertB)[3]=(sctx->txfIdx)[12]*(tvertA)[0]+(sctx-> txfIdx)[13]*(tvertA)[1]+(sctx->txfIdx)[14]*(tvertA)[2]+(sctx ->txfIdx)[15]*(tvertA)[3]); | |||||
| 1607 | /* tvertA in world space */ | |||||
| 1608 | ELL_4MV_MUL(tvertA, sctx->shape->ItoW, tvertB)((tvertA)[0]=(sctx->shape->ItoW)[ 0]*(tvertB)[0]+(sctx-> shape->ItoW)[ 1]*(tvertB)[1]+(sctx->shape->ItoW)[ 2] *(tvertB)[2]+(sctx->shape->ItoW)[ 3]*(tvertB)[3], (tvertA )[1]=(sctx->shape->ItoW)[ 4]*(tvertB)[0]+(sctx->shape ->ItoW)[ 5]*(tvertB)[1]+(sctx->shape->ItoW)[ 6]*(tvertB )[2]+(sctx->shape->ItoW)[ 7]*(tvertB)[3], (tvertA)[2]=( sctx->shape->ItoW)[ 8]*(tvertB)[0]+(sctx->shape-> ItoW)[ 9]*(tvertB)[1]+(sctx->shape->ItoW)[10]*(tvertB)[ 2]+(sctx->shape->ItoW)[11]*(tvertB)[3], (tvertA)[3]=(sctx ->shape->ItoW)[12]*(tvertB)[0]+(sctx->shape->ItoW )[13]*(tvertB)[1]+(sctx->shape->ItoW)[14]*(tvertB)[2]+( sctx->shape->ItoW)[15]*(tvertB)[3]); | |||||
| 1609 | ELL_4V_HOMOG(tvertA, tvertA)((tvertA)[0] = (tvertA)[0]/(tvertA)[3], (tvertA)[1] = (tvertA )[1]/(tvertA)[3], (tvertA)[2] = (tvertA)[2]/(tvertA)[3], (tvertA )[3] = 1.0); | |||||
| 1610 | ||||||
| 1611 | ovi = sctx->facevidx[fidx] = | |||||
| 1612 | airArrayLenIncr(bag->xyzwArr, 1); | |||||
| 1613 | ELL_4V_SET_TT(lpld->xyzw + 4*ovi, float,((lpld->xyzw + 4*ovi)[0] = ((float)((tvertA[0]))), (lpld-> xyzw + 4*ovi)[1] = ((float)((tvertA[1]))), (lpld->xyzw + 4 *ovi)[2] = ((float)((tvertA[2]))), (lpld->xyzw + 4*ovi)[3] = ((float)((1.0)))) | |||||
| 1614 | tvertA[0], tvertA[1], tvertA[2], 1.0)((lpld->xyzw + 4*ovi)[0] = ((float)((tvertA[0]))), (lpld-> xyzw + 4*ovi)[1] = ((float)((tvertA[1]))), (lpld->xyzw + 4 *ovi)[2] = ((float)((tvertA[2]))), (lpld->xyzw + 4*ovi)[3] = ((float)((1.0)))); | |||||
| 1615 | ||||||
| 1616 | if (sctx->normalsFind) { | |||||
| 1617 | double len=ELL_3V_LEN(sctx->facenorm+3*fidx)(sqrt((((sctx->facenorm+3*fidx))[0]*((sctx->facenorm+3* fidx))[0] + ((sctx->facenorm+3*fidx))[1]*((sctx->facenorm +3*fidx))[1] + ((sctx->facenorm+3*fidx))[2]*((sctx->facenorm +3*fidx))[2]))); | |||||
| 1618 | airArrayLenIncr(bag->normArr, 1); | |||||
| 1619 | ELL_3V_SCALE_TT(lpld->norm + 3*ovi, float, 1.0/len,((lpld->norm + 3*ovi)[0] = ((float)((1.0/len)*(sctx->facenorm +3*fidx)[0])), (lpld->norm + 3*ovi)[1] = ((float)((1.0/len )*(sctx->facenorm+3*fidx)[1])), (lpld->norm + 3*ovi)[2] = ((float)((1.0/len)*(sctx->facenorm+3*fidx)[2]))) | |||||
| 1620 | sctx->facenorm+3*fidx)((lpld->norm + 3*ovi)[0] = ((float)((1.0/len)*(sctx->facenorm +3*fidx)[0])), (lpld->norm + 3*ovi)[1] = ((float)((1.0/len )*(sctx->facenorm+3*fidx)[1])), (lpld->norm + 3*ovi)[2] = ((float)((1.0/len)*(sctx->facenorm+3*fidx)[2]))); | |||||
| 1621 | } | |||||
| 1622 | ||||||
| 1623 | sctx->vertNum++; | |||||
| 1624 | } | |||||
| 1625 | } | |||||
| 1626 | } | |||||
| 1627 | if (polyct>4) { /* we need to insert a helper vertex */ | |||||
| 1628 | double tvertA[4], tvertB[4], tvertAsum[4]={0,0,0,0}, | |||||
| 1629 | normsum[3]={0,0,0}; | |||||
| 1630 | int ovi; | |||||
| 1631 | unsigned int vii[3]; | |||||
| 1632 | ||||||
| 1633 | for (j=0; j<polyct; j++) { | |||||
| 1634 | if (polygon[j]<36) { | |||||
| 1635 | int eidx=3*(bag->evti[polygon[j]/3] + 5*si)+polygon[j]%3; | |||||
| 1636 | ELL_3V_COPY(tvertA, sctx->edgeicoord+3*eidx)((tvertA)[0] = (sctx->edgeicoord+3*eidx)[0], (tvertA)[1] = (sctx->edgeicoord+3*eidx)[1], (tvertA)[2] = (sctx->edgeicoord +3*eidx)[2]); | |||||
| 1637 | tvertA[3]=1.0; | |||||
| 1638 | ELL_4V_INCR(tvertAsum,tvertA)((tvertAsum)[0] += (tvertA)[0], (tvertAsum)[1] += (tvertA)[1] , (tvertAsum)[2] += (tvertA)[2], (tvertAsum)[3] += (tvertA)[3 ]); | |||||
| 1639 | if (ELL_3V_DOT(normsum,sctx->edgenorm+3*eidx)((normsum)[0]*(sctx->edgenorm+3*eidx)[0] + (normsum)[1]*(sctx ->edgenorm+3*eidx)[1] + (normsum)[2]*(sctx->edgenorm+3* eidx)[2])<0) | |||||
| 1640 | ELL_3V_SUB(normsum,normsum,sctx->edgenorm+3*eidx)((normsum)[0] = (normsum)[0] - (sctx->edgenorm+3*eidx)[0], (normsum)[1] = (normsum)[1] - (sctx->edgenorm+3*eidx)[1], (normsum)[2] = (normsum)[2] - (sctx->edgenorm+3*eidx)[2]); | |||||
| 1641 | else | |||||
| 1642 | ELL_3V_INCR(normsum,sctx->edgenorm+3*eidx)((normsum)[0] += (sctx->edgenorm+3*eidx)[0], (normsum)[1] += (sctx->edgenorm+3*eidx)[1], (normsum)[2] += (sctx->edgenorm +3*eidx)[2]); | |||||
| 1643 | } else { | |||||
| 1644 | int fidx=fvti[polygon[j]-36]; | |||||
| 1645 | ELL_3V_COPY(tvertA, sctx->faceicoord+3*fidx)((tvertA)[0] = (sctx->faceicoord+3*fidx)[0], (tvertA)[1] = (sctx->faceicoord+3*fidx)[1], (tvertA)[2] = (sctx->faceicoord +3*fidx)[2]); | |||||
| 1646 | tvertA[3]=1.0; | |||||
| 1647 | ELL_4V_INCR(tvertAsum,tvertA)((tvertAsum)[0] += (tvertA)[0], (tvertAsum)[1] += (tvertA)[1] , (tvertAsum)[2] += (tvertA)[2], (tvertAsum)[3] += (tvertA)[3 ]); | |||||
| 1648 | if (ELL_3V_DOT(normsum,sctx->facenorm+3*fidx)((normsum)[0]*(sctx->facenorm+3*fidx)[0] + (normsum)[1]*(sctx ->facenorm+3*fidx)[1] + (normsum)[2]*(sctx->facenorm+3* fidx)[2])<0) | |||||
| 1649 | ELL_3V_SUB(normsum,normsum,sctx->facenorm+3*fidx)((normsum)[0] = (normsum)[0] - (sctx->facenorm+3*fidx)[0], (normsum)[1] = (normsum)[1] - (sctx->facenorm+3*fidx)[1], (normsum)[2] = (normsum)[2] - (sctx->facenorm+3*fidx)[2]); | |||||
| 1650 | else | |||||
| 1651 | ELL_3V_INCR(normsum,sctx->facenorm+3*fidx)((normsum)[0] += (sctx->facenorm+3*fidx)[0], (normsum)[1] += (sctx->facenorm+3*fidx)[1], (normsum)[2] += (sctx->facenorm +3*fidx)[2]); | |||||
| 1652 | } | |||||
| 1653 | } | |||||
| 1654 | /* tvertB in input index space */ | |||||
| 1655 | ELL_4MV_MUL(tvertB, sctx->txfIdx, tvertAsum)((tvertB)[0]=(sctx->txfIdx)[ 0]*(tvertAsum)[0]+(sctx->txfIdx )[ 1]*(tvertAsum)[1]+(sctx->txfIdx)[ 2]*(tvertAsum)[2]+(sctx ->txfIdx)[ 3]*(tvertAsum)[3], (tvertB)[1]=(sctx->txfIdx )[ 4]*(tvertAsum)[0]+(sctx->txfIdx)[ 5]*(tvertAsum)[1]+(sctx ->txfIdx)[ 6]*(tvertAsum)[2]+(sctx->txfIdx)[ 7]*(tvertAsum )[3], (tvertB)[2]=(sctx->txfIdx)[ 8]*(tvertAsum)[0]+(sctx-> txfIdx)[ 9]*(tvertAsum)[1]+(sctx->txfIdx)[10]*(tvertAsum)[ 2]+(sctx->txfIdx)[11]*(tvertAsum)[3], (tvertB)[3]=(sctx-> txfIdx)[12]*(tvertAsum)[0]+(sctx->txfIdx)[13]*(tvertAsum)[ 1]+(sctx->txfIdx)[14]*(tvertAsum)[2]+(sctx->txfIdx)[15] *(tvertAsum)[3]); | |||||
| 1656 | /* tvertA in world space */ | |||||
| 1657 | ELL_4MV_MUL(tvertA, sctx->shape->ItoW, tvertB)((tvertA)[0]=(sctx->shape->ItoW)[ 0]*(tvertB)[0]+(sctx-> shape->ItoW)[ 1]*(tvertB)[1]+(sctx->shape->ItoW)[ 2] *(tvertB)[2]+(sctx->shape->ItoW)[ 3]*(tvertB)[3], (tvertA )[1]=(sctx->shape->ItoW)[ 4]*(tvertB)[0]+(sctx->shape ->ItoW)[ 5]*(tvertB)[1]+(sctx->shape->ItoW)[ 6]*(tvertB )[2]+(sctx->shape->ItoW)[ 7]*(tvertB)[3], (tvertA)[2]=( sctx->shape->ItoW)[ 8]*(tvertB)[0]+(sctx->shape-> ItoW)[ 9]*(tvertB)[1]+(sctx->shape->ItoW)[10]*(tvertB)[ 2]+(sctx->shape->ItoW)[11]*(tvertB)[3], (tvertA)[3]=(sctx ->shape->ItoW)[12]*(tvertB)[0]+(sctx->shape->ItoW )[13]*(tvertB)[1]+(sctx->shape->ItoW)[14]*(tvertB)[2]+( sctx->shape->ItoW)[15]*(tvertB)[3]); | |||||
| 1658 | ELL_4V_HOMOG(tvertA, tvertA)((tvertA)[0] = (tvertA)[0]/(tvertA)[3], (tvertA)[1] = (tvertA )[1]/(tvertA)[3], (tvertA)[2] = (tvertA)[2]/(tvertA)[3], (tvertA )[3] = 1.0); | |||||
| 1659 | ||||||
| 1660 | ovi = airArrayLenIncr(bag->xyzwArr, 1); | |||||
| 1661 | ELL_4V_SET_TT(lpld->xyzw + 4*ovi, float,((lpld->xyzw + 4*ovi)[0] = ((float)((tvertA[0]))), (lpld-> xyzw + 4*ovi)[1] = ((float)((tvertA[1]))), (lpld->xyzw + 4 *ovi)[2] = ((float)((tvertA[2]))), (lpld->xyzw + 4*ovi)[3] = ((float)((1.0)))) | |||||
| 1662 | tvertA[0], tvertA[1], tvertA[2], 1.0)((lpld->xyzw + 4*ovi)[0] = ((float)((tvertA[0]))), (lpld-> xyzw + 4*ovi)[1] = ((float)((tvertA[1]))), (lpld->xyzw + 4 *ovi)[2] = ((float)((tvertA[2]))), (lpld->xyzw + 4*ovi)[3] = ((float)((1.0)))); | |||||
| 1663 | if (sctx->normalsFind) { | |||||
| 1664 | double len=ELL_3V_LEN(normsum)(sqrt((((normsum))[0]*((normsum))[0] + ((normsum))[1]*((normsum ))[1] + ((normsum))[2]*((normsum))[2]))); | |||||
| 1665 | airArrayLenIncr(bag->normArr, 1); | |||||
| 1666 | ELL_3V_SCALE_TT(lpld->norm + 3*ovi, float, 1.0/len, normsum)((lpld->norm + 3*ovi)[0] = ((float)((1.0/len)*(normsum)[0] )), (lpld->norm + 3*ovi)[1] = ((float)((1.0/len)*(normsum) [1])), (lpld->norm + 3*ovi)[2] = ((float)((1.0/len)*(normsum )[2]))); | |||||
| 1667 | } | |||||
| 1668 | sctx->vertNum++; | |||||
| 1669 | ||||||
| 1670 | vii[0]=ovi; | |||||
| 1671 | vii[1]=sctx->vidx[3*(bag->evti[polygon[0]/3]+5*si)+polygon[0]%3]; | |||||
| 1672 | for (j=0; j<polyct; ++j) { | |||||
| 1673 | double edgeA[3], edgeB[3]; | |||||
| 1674 | double norm[3]; | |||||
| 1675 | vii[2]=vii[1]; | |||||
| 1676 | if (j==polyct-1) { | |||||
| 1677 | if (polygon[0]<36) | |||||
| 1678 | vii[1]=sctx->vidx[3*(bag->evti[polygon[0]/3] + 5*si)+ | |||||
| 1679 | polygon[0]%3]; | |||||
| 1680 | else vii[1]=sctx->facevidx[fvti[polygon[0]-36]]; | |||||
| 1681 | } else { | |||||
| 1682 | if (polygon[j+1]<36) | |||||
| 1683 | vii[1]=sctx->vidx[3*(bag->evti[polygon[j+1]/3] + 5*si)+ | |||||
| 1684 | polygon[j+1]%3]; | |||||
| 1685 | else vii[1]=sctx->facevidx[fvti[polygon[j+1]-36]]; | |||||
| 1686 | } | |||||
| 1687 | ||||||
| 1688 | /* check for degenerate tris */ | |||||
| 1689 | ELL_3V_SUB(edgeA, lpld->xyzw+4*vii[1], lpld->xyzw+4*vii[0])((edgeA)[0] = (lpld->xyzw+4*vii[1])[0] - (lpld->xyzw+4* vii[0])[0], (edgeA)[1] = (lpld->xyzw+4*vii[1])[1] - (lpld-> xyzw+4*vii[0])[1], (edgeA)[2] = (lpld->xyzw+4*vii[1])[2] - (lpld->xyzw+4*vii[0])[2]); | |||||
| 1690 | ELL_3V_SUB(edgeB, lpld->xyzw+4*vii[2], lpld->xyzw+4*vii[0])((edgeB)[0] = (lpld->xyzw+4*vii[2])[0] - (lpld->xyzw+4* vii[0])[0], (edgeB)[1] = (lpld->xyzw+4*vii[2])[1] - (lpld-> xyzw+4*vii[0])[1], (edgeB)[2] = (lpld->xyzw+4*vii[2])[2] - (lpld->xyzw+4*vii[0])[2]); | |||||
| 1691 | ELL_3V_CROSS(norm, edgeA, edgeB)((norm)[0] = (edgeA)[1]*(edgeB)[2] - (edgeA)[2]*(edgeB)[1], ( norm)[1] = (edgeA)[2]*(edgeB)[0] - (edgeA)[0]*(edgeB)[2], (norm )[2] = (edgeA)[0]*(edgeB)[1] - (edgeA)[1]*(edgeB)[0]); | |||||
| 1692 | if (ELL_3V_DOT(norm,norm)((norm)[0]*(norm)[0] + (norm)[1]*(norm)[1] + (norm)[2]*(norm) [2])!=0) { | |||||
| 1693 | unsigned iii = airArrayLenIncr(bag->indxArr, 3); | |||||
| 1694 | ELL_3V_COPY(lpld->indx + iii, vii)((lpld->indx + iii)[0] = (vii)[0], (lpld->indx + iii)[1 ] = (vii)[1], (lpld->indx + iii)[2] = (vii)[2]); | |||||
| 1695 | lpld->icnt[0] += 3; | |||||
| 1696 | sctx->faceNum++; | |||||
| 1697 | } | |||||
| 1698 | /* else: degeneracies are caused by intersections that | |||||
| 1699 | * more or less coincide with a grid vertex. They | |||||
| 1700 | * should be harmless, so just don't create | |||||
| 1701 | * deg. triangles in this case */ | |||||
| 1702 | } | |||||
| 1703 | } else if (polyct>2) { | |||||
| 1704 | /* insert the actual triangles */ | |||||
| 1705 | unsigned int vii[3], iii; | |||||
| 1706 | if (polygon[0]<36) | |||||
| 1707 | vii[0]=sctx->vidx[3*(bag->evti[polygon[0]/3] + 5*si)+ | |||||
| 1708 | polygon[0]%3]; | |||||
| 1709 | else vii[0]=sctx->facevidx[fvti[polygon[0]-36]]; | |||||
| 1710 | if (polygon[1]<36) | |||||
| 1711 | vii[1]=sctx->vidx[3*(bag->evti[polygon[1]/3] + 5*si)+ | |||||
| 1712 | polygon[1]%3]; | |||||
| 1713 | else vii[1]=sctx->facevidx[fvti[polygon[1]-36]]; | |||||
| 1714 | if (polygon[2]<36) | |||||
| 1715 | vii[2]=sctx->vidx[3*(bag->evti[polygon[2]/3] + 5*si)+ | |||||
| 1716 | polygon[2]%3]; | |||||
| 1717 | else vii[2]=sctx->facevidx[fvti[polygon[2]-36]]; | |||||
| 1718 | iii = airArrayLenIncr(bag->indxArr, 3); | |||||
| 1719 | ELL_3V_COPY(lpld->indx + iii, vii)((lpld->indx + iii)[0] = (vii)[0], (lpld->indx + iii)[1 ] = (vii)[1], (lpld->indx + iii)[2] = (vii)[2]); | |||||
| 1720 | lpld->icnt[0] += 3; | |||||
| 1721 | sctx->faceNum++; | |||||
| 1722 | ||||||
| 1723 | if (polyct==4) { | |||||
| 1724 | vii[1]=vii[2]; | |||||
| 1725 | if (polygon[3]<36) | |||||
| 1726 | vii[2]=sctx->vidx[3*(bag->evti[polygon[3]/3] + 5*si)+ | |||||
| 1727 | polygon[3]%3]; | |||||
| 1728 | else vii[2]=sctx->facevidx[fvti[polygon[3]-36]]; | |||||
| 1729 | iii = airArrayLenIncr(bag->indxArr, 3); | |||||
| 1730 | ELL_3V_COPY(lpld->indx + iii, vii)((lpld->indx + iii)[0] = (vii)[0], (lpld->indx + iii)[1 ] = (vii)[1], (lpld->indx + iii)[2] = (vii)[2]); | |||||
| 1731 | lpld->icnt[0] += 3; | |||||
| 1732 | sctx->faceNum++; | |||||
| 1733 | } | |||||
| 1734 | } | |||||
| 1735 | } | |||||
| 1736 | } | |||||
| 1737 | } | |||||
| 1738 | } | |||||
| 1739 | } | |||||
| 1740 | return 0; | |||||
| 1741 | } | |||||
| 1742 | ||||||
| 1743 | static void | |||||
| 1744 | shuffleT(seekContext *sctx, baggage *bag) { | |||||
| 1745 | unsigned int xi, yi, sx, sy, si; | |||||
| 1746 | ||||||
| 1747 | sx = AIR_CAST(unsigned int, sctx->sx)((unsigned int)(sctx->sx)); | |||||
| 1748 | sy = AIR_CAST(unsigned int, sctx->sy)((unsigned int)(sctx->sy)); | |||||
| 1749 | ||||||
| 1750 | if (sctx->strengthUse) { /* requests need to be cleared initially */ | |||||
| 1751 | for (yi=0; yi<sy; yi++) { | |||||
| 1752 | for (xi=0; xi<sx; xi++) { | |||||
| 1753 | sctx->treated[xi+sx*yi] &= 0xFF^_SEEK_TREATED_REQUEST0x01; | |||||
| 1754 | } | |||||
| 1755 | } | |||||
| 1756 | } /* else, the request bits are always on */ | |||||
| 1757 | ||||||
| 1758 | for (yi=0; yi<sy; yi++) { | |||||
| 1759 | for (xi=0; xi<sx; xi++) { | |||||
| 1760 | si = xi + sx*yi; | |||||
| 1761 | ||||||
| 1762 | /* vidx neither needs past nor future context */ | |||||
| 1763 | if (!bag->zi) { | |||||
| 1764 | ELL_3V_SET(sctx->vidx+3*(0+5*si), -1, -1, -1)((sctx->vidx+3*(0+5*si))[0] = (-1), (sctx->vidx+3*(0+5* si))[1] = (-1), (sctx->vidx+3*(0+5*si))[2] = (-1)); | |||||
| 1765 | ELL_3V_SET(sctx->vidx+3*(1+5*si), -1, -1, -1)((sctx->vidx+3*(1+5*si))[0] = (-1), (sctx->vidx+3*(1+5* si))[1] = (-1), (sctx->vidx+3*(1+5*si))[2] = (-1)); | |||||
| 1766 | } else { | |||||
| 1767 | ELL_3V_COPY(sctx->vidx+3*(0+5*si), sctx->vidx+3*(3+5*si))((sctx->vidx+3*(0+5*si))[0] = (sctx->vidx+3*(3+5*si))[0 ], (sctx->vidx+3*(0+5*si))[1] = (sctx->vidx+3*(3+5*si)) [1], (sctx->vidx+3*(0+5*si))[2] = (sctx->vidx+3*(3+5*si ))[2]); | |||||
| 1768 | ELL_3V_COPY(sctx->vidx+3*(1+5*si), sctx->vidx+3*(4+5*si))((sctx->vidx+3*(1+5*si))[0] = (sctx->vidx+3*(4+5*si))[0 ], (sctx->vidx+3*(1+5*si))[1] = (sctx->vidx+3*(4+5*si)) [1], (sctx->vidx+3*(1+5*si))[2] = (sctx->vidx+3*(4+5*si ))[2]); | |||||
| 1769 | } | |||||
| 1770 | ELL_3V_SET(sctx->vidx+3*(2+5*si),-1,-1,-1)((sctx->vidx+3*(2+5*si))[0] = (-1), (sctx->vidx+3*(2+5* si))[1] = (-1), (sctx->vidx+3*(2+5*si))[2] = (-1)); | |||||
| 1771 | ELL_3V_SET(sctx->vidx+3*(3+5*si),-1,-1,-1)((sctx->vidx+3*(3+5*si))[0] = (-1), (sctx->vidx+3*(3+5* si))[1] = (-1), (sctx->vidx+3*(3+5*si))[2] = (-1)); | |||||
| 1772 | ELL_3V_SET(sctx->vidx+3*(4+5*si),-1,-1,-1)((sctx->vidx+3*(4+5*si))[0] = (-1), (sctx->vidx+3*(4+5* si))[1] = (-1), (sctx->vidx+3*(4+5*si))[2] = (-1)); | |||||
| 1773 | ||||||
| 1774 | /* strength only has future context */ | |||||
| 1775 | if (sctx->strengthUse) { | |||||
| 1776 | sctx->stng[0 + 2*si] = sctx->stng[1 + 2*si]; | |||||
| 1777 | sctx->stng[1 + 2*si] = sctx->stngcontext[si]; | |||||
| 1778 | if (sctx->stng[0+2*si]>sctx->strength || | |||||
| 1779 | sctx->stng[1+2*si]>sctx->strength) { | |||||
| 1780 | /* set up to four request bits */ | |||||
| 1781 | sctx->treated[si] |= _SEEK_TREATED_REQUEST0x01; | |||||
| 1782 | if (xi!=0) sctx->treated[xi-1+sx*yi] |= _SEEK_TREATED_REQUEST0x01; | |||||
| 1783 | if (yi!=0) sctx->treated[xi+sx*(yi-1)] |= _SEEK_TREATED_REQUEST0x01; | |||||
| 1784 | if (xi!=0 && yi!=0) | |||||
| 1785 | sctx->treated[xi-1+sx*(yi-1)] |= _SEEK_TREATED_REQUEST0x01; | |||||
| 1786 | } | |||||
| 1787 | } | |||||
| 1788 | ||||||
| 1789 | /* shuffle grad, hess and t in three steps: move to past context, | |||||
| 1790 | * shuffle in slab itself, move from future context */ | |||||
| 1791 | ||||||
| 1792 | ELL_3V_COPY(sctx->gradcontext + 3*(0+2*si), sctx->grad + 3*(0+2*si))((sctx->gradcontext + 3*(0+2*si))[0] = (sctx->grad + 3* (0+2*si))[0], (sctx->gradcontext + 3*(0+2*si))[1] = (sctx-> grad + 3*(0+2*si))[1], (sctx->gradcontext + 3*(0+2*si))[2] = (sctx->grad + 3*(0+2*si))[2]); | |||||
| 1793 | ELL_3V_COPY(sctx->grad + 3*(0+2*si), sctx->grad + 3*(1+2*si))((sctx->grad + 3*(0+2*si))[0] = (sctx->grad + 3*(1+2*si ))[0], (sctx->grad + 3*(0+2*si))[1] = (sctx->grad + 3*( 1+2*si))[1], (sctx->grad + 3*(0+2*si))[2] = (sctx->grad + 3*(1+2*si))[2]); | |||||
| 1794 | ELL_3V_COPY(sctx->grad + 3*(1+2*si), sctx->gradcontext + 3*(1+2*si))((sctx->grad + 3*(1+2*si))[0] = (sctx->gradcontext + 3* (1+2*si))[0], (sctx->grad + 3*(1+2*si))[1] = (sctx->gradcontext + 3*(1+2*si))[1], (sctx->grad + 3*(1+2*si))[2] = (sctx-> gradcontext + 3*(1+2*si))[2]); | |||||
| 1795 | ||||||
| 1796 | ELL_3M_COPY(sctx->hesscontext + 9*(0+2*si), sctx->hess + 9*(0+2*si))((((sctx->hesscontext + 9*(0+2*si))+0)[0] = ((sctx->hess + 9*(0+2*si))+0)[0], ((sctx->hesscontext + 9*(0+2*si))+0) [1] = ((sctx->hess + 9*(0+2*si))+0)[1], ((sctx->hesscontext + 9*(0+2*si))+0)[2] = ((sctx->hess + 9*(0+2*si))+0)[2]), ( ((sctx->hesscontext + 9*(0+2*si))+3)[0] = ((sctx->hess + 9*(0+2*si))+3)[0], ((sctx->hesscontext + 9*(0+2*si))+3)[1 ] = ((sctx->hess + 9*(0+2*si))+3)[1], ((sctx->hesscontext + 9*(0+2*si))+3)[2] = ((sctx->hess + 9*(0+2*si))+3)[2]), ( ((sctx->hesscontext + 9*(0+2*si))+6)[0] = ((sctx->hess + 9*(0+2*si))+6)[0], ((sctx->hesscontext + 9*(0+2*si))+6)[1 ] = ((sctx->hess + 9*(0+2*si))+6)[1], ((sctx->hesscontext + 9*(0+2*si))+6)[2] = ((sctx->hess + 9*(0+2*si))+6)[2])); | |||||
| 1797 | ELL_3M_COPY(sctx->hess + 9*(0+2*si), sctx->hess + 9*(1+2*si))((((sctx->hess + 9*(0+2*si))+0)[0] = ((sctx->hess + 9*( 1+2*si))+0)[0], ((sctx->hess + 9*(0+2*si))+0)[1] = ((sctx-> hess + 9*(1+2*si))+0)[1], ((sctx->hess + 9*(0+2*si))+0)[2] = ((sctx->hess + 9*(1+2*si))+0)[2]), (((sctx->hess + 9 *(0+2*si))+3)[0] = ((sctx->hess + 9*(1+2*si))+3)[0], ((sctx ->hess + 9*(0+2*si))+3)[1] = ((sctx->hess + 9*(1+2*si)) +3)[1], ((sctx->hess + 9*(0+2*si))+3)[2] = ((sctx->hess + 9*(1+2*si))+3)[2]), (((sctx->hess + 9*(0+2*si))+6)[0] = ((sctx->hess + 9*(1+2*si))+6)[0], ((sctx->hess + 9*(0+ 2*si))+6)[1] = ((sctx->hess + 9*(1+2*si))+6)[1], ((sctx-> hess + 9*(0+2*si))+6)[2] = ((sctx->hess + 9*(1+2*si))+6)[2 ])); | |||||
| 1798 | ELL_3M_COPY(sctx->hess + 9*(1+2*si), sctx->hesscontext + 9*(1+2*si))((((sctx->hess + 9*(1+2*si))+0)[0] = ((sctx->hesscontext + 9*(1+2*si))+0)[0], ((sctx->hess + 9*(1+2*si))+0)[1] = ( (sctx->hesscontext + 9*(1+2*si))+0)[1], ((sctx->hess + 9 *(1+2*si))+0)[2] = ((sctx->hesscontext + 9*(1+2*si))+0)[2] ), (((sctx->hess + 9*(1+2*si))+3)[0] = ((sctx->hesscontext + 9*(1+2*si))+3)[0], ((sctx->hess + 9*(1+2*si))+3)[1] = ( (sctx->hesscontext + 9*(1+2*si))+3)[1], ((sctx->hess + 9 *(1+2*si))+3)[2] = ((sctx->hesscontext + 9*(1+2*si))+3)[2] ), (((sctx->hess + 9*(1+2*si))+6)[0] = ((sctx->hesscontext + 9*(1+2*si))+6)[0], ((sctx->hess + 9*(1+2*si))+6)[1] = ( (sctx->hesscontext + 9*(1+2*si))+6)[1], ((sctx->hess + 9 *(1+2*si))+6)[2] = ((sctx->hesscontext + 9*(1+2*si))+6)[2] )); | |||||
| 1799 | ||||||
| 1800 | ELL_3M_COPY(sctx->tcontext + 9*(0+2*si), sctx->t + 9*(0+2*si))((((sctx->tcontext + 9*(0+2*si))+0)[0] = ((sctx->t + 9* (0+2*si))+0)[0], ((sctx->tcontext + 9*(0+2*si))+0)[1] = (( sctx->t + 9*(0+2*si))+0)[1], ((sctx->tcontext + 9*(0+2* si))+0)[2] = ((sctx->t + 9*(0+2*si))+0)[2]), (((sctx->tcontext + 9*(0+2*si))+3)[0] = ((sctx->t + 9*(0+2*si))+3)[0], ((sctx ->tcontext + 9*(0+2*si))+3)[1] = ((sctx->t + 9*(0+2*si) )+3)[1], ((sctx->tcontext + 9*(0+2*si))+3)[2] = ((sctx-> t + 9*(0+2*si))+3)[2]), (((sctx->tcontext + 9*(0+2*si))+6) [0] = ((sctx->t + 9*(0+2*si))+6)[0], ((sctx->tcontext + 9*(0+2*si))+6)[1] = ((sctx->t + 9*(0+2*si))+6)[1], ((sctx ->tcontext + 9*(0+2*si))+6)[2] = ((sctx->t + 9*(0+2*si) )+6)[2])); | |||||
| 1801 | ELL_3M_COPY(sctx->t + 9*(0+2*si), sctx->t + 9*(1+2*si))((((sctx->t + 9*(0+2*si))+0)[0] = ((sctx->t + 9*(1+2*si ))+0)[0], ((sctx->t + 9*(0+2*si))+0)[1] = ((sctx->t + 9 *(1+2*si))+0)[1], ((sctx->t + 9*(0+2*si))+0)[2] = ((sctx-> t + 9*(1+2*si))+0)[2]), (((sctx->t + 9*(0+2*si))+3)[0] = ( (sctx->t + 9*(1+2*si))+3)[0], ((sctx->t + 9*(0+2*si))+3 )[1] = ((sctx->t + 9*(1+2*si))+3)[1], ((sctx->t + 9*(0+ 2*si))+3)[2] = ((sctx->t + 9*(1+2*si))+3)[2]), (((sctx-> t + 9*(0+2*si))+6)[0] = ((sctx->t + 9*(1+2*si))+6)[0], ((sctx ->t + 9*(0+2*si))+6)[1] = ((sctx->t + 9*(1+2*si))+6)[1] , ((sctx->t + 9*(0+2*si))+6)[2] = ((sctx->t + 9*(1+2*si ))+6)[2])); | |||||
| 1802 | ELL_3M_COPY(sctx->t + 9*(1+2*si), sctx->tcontext + 9*(1+2*si))((((sctx->t + 9*(1+2*si))+0)[0] = ((sctx->tcontext + 9* (1+2*si))+0)[0], ((sctx->t + 9*(1+2*si))+0)[1] = ((sctx-> tcontext + 9*(1+2*si))+0)[1], ((sctx->t + 9*(1+2*si))+0)[2 ] = ((sctx->tcontext + 9*(1+2*si))+0)[2]), (((sctx->t + 9*(1+2*si))+3)[0] = ((sctx->tcontext + 9*(1+2*si))+3)[0], ((sctx->t + 9*(1+2*si))+3)[1] = ((sctx->tcontext + 9*( 1+2*si))+3)[1], ((sctx->t + 9*(1+2*si))+3)[2] = ((sctx-> tcontext + 9*(1+2*si))+3)[2]), (((sctx->t + 9*(1+2*si))+6) [0] = ((sctx->tcontext + 9*(1+2*si))+6)[0], ((sctx->t + 9*(1+2*si))+6)[1] = ((sctx->tcontext + 9*(1+2*si))+6)[1], ((sctx->t + 9*(1+2*si))+6)[2] = ((sctx->tcontext + 9*( 1+2*si))+6)[2])); | |||||
| 1803 | } | |||||
| 1804 | } | |||||
| 1805 | } | |||||
| 1806 | ||||||
| 1807 | static void | |||||
| 1808 | probeT(seekContext *sctx, baggage *bag, double zi) { | |||||
| 1809 | unsigned int xi, yi, sx, sy, si; | |||||
| 1810 | ||||||
| 1811 | sx = AIR_CAST(unsigned int, sctx->sx)((unsigned int)(sctx->sx)); | |||||
| 1812 | sy = AIR_CAST(unsigned int, sctx->sy)((unsigned int)(sctx->sy)); | |||||
| 1813 | ||||||
| 1814 | for (yi=0; yi<sy; yi++) { | |||||
| 1815 | for (xi=0; xi<sx; xi++) { | |||||
| 1816 | si = xi + sx*yi; | |||||
| 1817 | ||||||
| 1818 | if (sctx->gctx) { /* HEY: need this check, what's the right way? */ | |||||
| 1819 | _seekIdxProbe(sctx, bag, xi, yi, zi); | |||||
| 1820 | } | |||||
| 1821 | if (sctx->strengthUse) { | |||||
| 1822 | sctx->stngcontext[si] = sctx->strengthSign*sctx->stngAns[0]; | |||||
| 1823 | if (sctx->strengthSeenMax==AIR_NAN(airFloatQNaN.f)) { | |||||
| 1824 | sctx->strengthSeenMax = sctx->stngcontext[si]; | |||||
| 1825 | } | |||||
| 1826 | sctx->strengthSeenMax = AIR_MAX(sctx->strengthSeenMax,((sctx->strengthSeenMax) > (sctx->stngcontext[si]) ? (sctx->strengthSeenMax) : (sctx->stngcontext[si])) | |||||
| 1827 | sctx->stngcontext[si])((sctx->strengthSeenMax) > (sctx->stngcontext[si]) ? (sctx->strengthSeenMax) : (sctx->stngcontext[si])); | |||||
| 1828 | } | |||||
| 1829 | ELL_3V_COPY(sctx->gradcontext + 3*(1 + 2*si), sctx->gradAns)((sctx->gradcontext + 3*(1 + 2*si))[0] = (sctx->gradAns )[0], (sctx->gradcontext + 3*(1 + 2*si))[1] = (sctx->gradAns )[1], (sctx->gradcontext + 3*(1 + 2*si))[2] = (sctx->gradAns )[2]); | |||||
| 1830 | ELL_3M_COPY(sctx->hesscontext + 9*(1 + 2*si), sctx->hessAns)((((sctx->hesscontext + 9*(1 + 2*si))+0)[0] = ((sctx->hessAns )+0)[0], ((sctx->hesscontext + 9*(1 + 2*si))+0)[1] = ((sctx ->hessAns)+0)[1], ((sctx->hesscontext + 9*(1 + 2*si))+0 )[2] = ((sctx->hessAns)+0)[2]), (((sctx->hesscontext + 9 *(1 + 2*si))+3)[0] = ((sctx->hessAns)+3)[0], ((sctx->hesscontext + 9*(1 + 2*si))+3)[1] = ((sctx->hessAns)+3)[1], ((sctx-> hesscontext + 9*(1 + 2*si))+3)[2] = ((sctx->hessAns)+3)[2] ), (((sctx->hesscontext + 9*(1 + 2*si))+6)[0] = ((sctx-> hessAns)+6)[0], ((sctx->hesscontext + 9*(1 + 2*si))+6)[1] = ((sctx->hessAns)+6)[1], ((sctx->hesscontext + 9*(1 + 2 *si))+6)[2] = ((sctx->hessAns)+6)[2])); | |||||
| 1831 | _seekHess2T(sctx->tcontext + 9*(1 + 2*si), sctx->evalAns, sctx->evecAns, | |||||
| 1832 | sctx->evalDiffThresh, (sctx->type==seekTypeRidgeSurfaceT)); | |||||
| 1833 | } | |||||
| 1834 | } | |||||
| 1835 | } | |||||
| 1836 | ||||||
| 1837 | /* it has now become much easier to make this its own routine | |||||
| 1838 | * (vs. adding many more case distinctions to shuffleProbe) | |||||
| 1839 | * this only duplicates little (and trivial) code */ | |||||
| 1840 | int | |||||
| 1841 | _seekShuffleProbeT(seekContext *sctx, baggage *bag) { | |||||
| 1842 | /* for high-quality normal estimation, we need two slices of data | |||||
| 1843 | * context; to keep the code simple, separate shuffle and probe | |||||
| 1844 | * operations - let's hope this doesn't destroy cache performance */ | |||||
| 1845 | ||||||
| 1846 | if (!bag->zi) { | |||||
| 1847 | if (sctx->strengthUse) | |||||
| 1848 | /* before the first round, initialize treated to zero */ | |||||
| 1849 | memset(sctx->treated, 0, sizeof(char)*sctx->sx*sctx->sy)__builtin___memset_chk (sctx->treated, 0, sizeof(char)*sctx ->sx*sctx->sy, __builtin_object_size (sctx->treated, 0)); | |||||
| 1850 | else /* request all edges */ | |||||
| 1851 | memset(sctx->treated, _SEEK_TREATED_REQUEST,__builtin___memset_chk (sctx->treated, 0x01, sizeof(char)* sctx->sx*sctx->sy, __builtin_object_size (sctx->treated , 0)) | |||||
| 1852 | sizeof(char)*sctx->sx*sctx->sy)__builtin___memset_chk (sctx->treated, 0x01, sizeof(char)* sctx->sx*sctx->sy, __builtin_object_size (sctx->treated , 0)); | |||||
| 1853 | probeT(sctx, bag, 0); | |||||
| 1854 | shuffleT(sctx, bag); | |||||
| 1855 | probeT(sctx, bag, 1); | |||||
| 1856 | } | |||||
| 1857 | shuffleT(sctx, bag); | |||||
| 1858 | if (bag->zi!=sctx->sz-2) | |||||
| 1859 | probeT(sctx, bag, bag->zi+2); | |||||
| 1860 | ||||||
| 1861 | intersectionShuffleProbe(sctx, bag); | |||||
| 1862 | ||||||
| 1863 | return 0; | |||||
| 1864 | } | |||||
| 1865 | ||||||
| 1866 | /* For all vertices in pld, use sctx to probe the strength measure, | |||||
| 1867 | * and return the answer (times strengthSign) in nval. The intended | |||||
| 1868 | * use is postfiltering (with limnPolyDataClip), which is obligatory | |||||
| 1869 | * when using seekType*SurfaceT | |||||
| 1870 | * | |||||
| 1871 | * Returns 1 and adds a message to biff upon error | |||||
| 1872 | * Returns 0 on success, -n when probing n vertices failed (strength | |||||
| 1873 | * is set to AIR_NAN for those); note that positions outside the field | |||||
| 1874 | * are clamped to lie on its boundary. | |||||
| 1875 | * | |||||
| 1876 | * This routine assumes that a strength has been set in sctx and | |||||
| 1877 | * seekUpdate() has been run. | |||||
| 1878 | * This routine does not modify sctx->strengthSeenMax. | |||||
| 1879 | */ | |||||
| 1880 | int | |||||
| 1881 | seekVertexStrength(Nrrd *nval, seekContext *sctx, limnPolyData *pld) { | |||||
| 1882 | static const char me[]="seekVertexStrength"; | |||||
| 1883 | unsigned int i; | |||||
| 1884 | double *data; | |||||
| 1885 | int E=0; | |||||
| 1886 | ||||||
| 1887 | if (!(nval && sctx && pld)) { | |||||
| 1888 | biffAddf(SEEKseekBiffKey, "%s: got NULL pointer", me); | |||||
| 1889 | return 1; | |||||
| 1890 | } | |||||
| 1891 | if (!(sctx->gctx && sctx->pvl)) { | |||||
| 1892 | biffAddf(SEEKseekBiffKey, "%s: need sctx with attached gageContext", me); | |||||
| 1893 | return 1; | |||||
| 1894 | } | |||||
| 1895 | if (!sctx->stngAns) { | |||||
| 1896 | biffAddf(SEEKseekBiffKey, "%s: no strength item found. Did you enable strengthUse?", | |||||
| 1897 | me); | |||||
| 1898 | return 1; | |||||
| 1899 | } | |||||
| 1900 | if (nrrdAlloc_va(nval, nrrdTypeDouble, 1, (size_t) pld->xyzwNum)) { | |||||
| 1901 | biffAddf(SEEKseekBiffKey, "%s: could not allocate output", me); | |||||
| 1902 | return 1; | |||||
| 1903 | } | |||||
| 1904 | ||||||
| 1905 | data = (double*) nval->data; | |||||
| 1906 | for (i=0; i<pld->xyzwNum; i++) { | |||||
| 1907 | float homog[4]; | |||||
| 1908 | ELL_4V_HOMOG(homog, pld->xyzw+4*i)((homog)[0] = (pld->xyzw+4*i)[0]/(pld->xyzw+4*i)[3], (homog )[1] = (pld->xyzw+4*i)[1]/(pld->xyzw+4*i)[3], (homog)[2 ] = (pld->xyzw+4*i)[2]/(pld->xyzw+4*i)[3], (homog)[3] = 1.0); | |||||
| 1909 | if (!gageProbeSpace(sctx->gctx,homog[0],homog[1],homog[2],0,1)) { | |||||
| 1910 | *(data++)=*(sctx->stngAns)*sctx->strengthSign; | |||||
| 1911 | } else { | |||||
| 1912 | *(data++)=AIR_NAN(airFloatQNaN.f); | |||||
| 1913 | E--; | |||||
| 1914 | } | |||||
| 1915 | } | |||||
| 1916 | return E; | |||||
| 1917 | } |