134 const Transform<Real,3,Affine>& bwd_transform,
const Transform<Real,3,Affine>& fwd_transform,
135 const uint dimension,
138 if (dimension == 0) {
140 const Eigen::Matrix<Real,3,1> plane_normal = bwd_transform.linear()*Eigen::Matrix<Real,3,1>(1.0, 0.0, 0.0);
142 const Eigen::Matrix<Real,3,1> plane_point
143 = bwd_transform*Eigen::Matrix<Real,3,1>(
vmesh->getMeshMinLimits()[0], 0.0, 0.0);
145 const Eigen::Matrix<Real,3,1> line_direction = Eigen::Matrix<Real,3,1>(1.0, 0.0, 0.0);
146 const Eigen::Matrix<Real,3,1> line_point(
148 0.5*
vmesh->getCellSize()[1]+
vmesh->getMeshMinLimits()[1],
149 0.5*
vmesh->getCellSize()[2]+
vmesh->getMeshMinLimits()[2]);
150 const Eigen::Matrix<Real,3,1> lagrangian_di = bwd_transform.linear()
151 * Eigen::Matrix<Real,3,1>(
vmesh->getCellSize()[0],0,0.0);
152 const Eigen::Matrix<Real,3,1> euclidian_dj = Eigen::Matrix<Real,3,1>(0,
vmesh->getCellSize()[1],0.0);
153 const Eigen::Matrix<Real,3,1> euclidian_dk = Eigen::Matrix<Real,3,1>(0.0,0.0,
vmesh->getCellSize()[2]);
156 const Eigen::Matrix<Real,3,1> intersection_0_0_0 =
line_plane_intersection(line_point, line_direction, plane_point, plane_normal);
157 const Eigen::Matrix<Real,3,1> intersection_1_0_0 =
line_plane_intersection(line_point, line_direction, plane_point + lagrangian_di, plane_normal);
158 const Eigen::Matrix<Real,3,1> intersection_0_1_0 =
line_plane_intersection(line_point + euclidian_dj, line_direction, plane_point, plane_normal);
159 const Eigen::Matrix<Real,3,1> intersection_0_0_1 =
line_plane_intersection(line_point + euclidian_dk, line_direction, plane_point, plane_normal);
161 intersection_di=intersection_1_0_0[dimension]-intersection_0_0_0[dimension];
162 intersection_dj=intersection_0_1_0[dimension]-intersection_0_0_0[dimension];
163 intersection_dk=intersection_0_0_1[dimension]-intersection_0_0_0[dimension];
165 if (dimension == 1) {
167 const Eigen::Matrix<Real,3,1> plane_normal = bwd_transform.linear()*Eigen::Matrix<Real,3,1>(0.0, 1.0, 0.0);
169 const Eigen::Matrix<Real,3,1> plane_point
170 = bwd_transform*Eigen::Matrix<Real,3,1>(0.0,
vmesh->getMeshMinLimits()[1], 0.0);
172 const Eigen::Matrix<Real,3,1> line_direction = Eigen::Matrix<Real,3,1>(0.0, 1.0, 0.0);
173 const Eigen::Matrix<Real,3,1> line_point(
174 0.5*
vmesh->getCellSize()[0]+
vmesh->getMeshMinLimits()[0],
176 0.5*
vmesh->getCellSize()[2]+
vmesh->getMeshMinLimits()[2]);
177 const Eigen::Matrix<Real,3,1> euclidian_di
178 = Eigen::Matrix<Real,3,1>(
vmesh->getCellSize()[0], 0.0, 0.0);
179 const Eigen::Matrix<Real,3,1> lagrangian_dj
180 = bwd_transform.linear()*Eigen::Matrix<Real,3,1>(0.0 ,
vmesh->getCellSize()[1], 0.0);
181 const Eigen::Matrix<Real,3,1> euclidian_dk
182 = Eigen::Matrix<Real,3,1>(0.0 , 0.0 ,
vmesh->getCellSize()[2]);
185 const Eigen::Matrix<Real,3,1> intersection_0_0_0 =
line_plane_intersection(line_point,line_direction,plane_point,plane_normal);
186 const Eigen::Matrix<Real,3,1> intersection_1_0_0 =
line_plane_intersection(line_point + euclidian_di, line_direction, plane_point, plane_normal);
187 const Eigen::Matrix<Real,3,1> intersection_0_1_0 =
line_plane_intersection(line_point, line_direction, plane_point + lagrangian_dj, plane_normal);
188 const Eigen::Matrix<Real,3,1> intersection_0_0_1 =
line_plane_intersection(line_point + euclidian_dk, line_direction, plane_point, plane_normal);
191 intersection_di=intersection_1_0_0[dimension]-intersection_0_0_0[dimension];
192 intersection_dj=intersection_0_1_0[dimension]-intersection_0_0_0[dimension];
193 intersection_dk=intersection_0_0_1[dimension]-intersection_0_0_0[dimension];
196 if (dimension == 2) {
201 const Eigen::Matrix<Real,3,1> plane_normal
202 = bwd_transform.linear()*Eigen::Matrix<Real,3,1>(0,0,1.0);
205 const Eigen::Matrix<Real,3,1> plane_point
206 = bwd_transform*Eigen::Matrix<Real,3,1>(0.0,0.0,
vmesh->getMeshMinLimits()[2]);
209 const Eigen::Matrix<Real,3,1> line_direction = Eigen::Matrix<Real,3,1>(0,0,1.0);
210 const Eigen::Matrix<Real,3,1> line_point(
211 0.5*
vmesh->getCellSize()[0]+
vmesh->getMeshMinLimits()[0],
212 0.5*
vmesh->getCellSize()[1]+
vmesh->getMeshMinLimits()[1],
214 const Eigen::Matrix<Real,3,1> euclidian_di
215 = Eigen::Matrix<Real,3,1>(
vmesh->getCellSize()[0],0,0.0);
216 const Eigen::Matrix<Real,3,1> euclidian_dj
217 = Eigen::Matrix<Real,3,1>(0,
vmesh->getCellSize()[1],0.0);
218 const Eigen::Matrix<Real,3,1> lagrangian_dk
219 = bwd_transform.linear()*Eigen::Matrix<Real,3,1>(0.0,0.0,
vmesh->getCellSize()[2]);
222 const Eigen::Matrix<Real,3,1> intersection_0_0_0 =
line_plane_intersection(line_point,line_direction,plane_point,plane_normal);
223 const Eigen::Matrix<Real,3,1> intersection_1_0_0 =
line_plane_intersection(line_point + euclidian_di, line_direction, plane_point, plane_normal);
224 const Eigen::Matrix<Real,3,1> intersection_0_1_0 =
line_plane_intersection(line_point + euclidian_dj, line_direction, plane_point, plane_normal);
225 const Eigen::Matrix<Real,3,1> intersection_0_0_1 =
line_plane_intersection(line_point, line_direction, plane_point + lagrangian_dk, plane_normal);
227 intersection_di=intersection_1_0_0[dimension]-intersection_0_0_0[dimension];
228 intersection_dj=intersection_0_1_0[dimension]-intersection_0_0_0[dimension];
229 intersection_dk=intersection_0_0_1[dimension]-intersection_0_0_0[dimension];
248 const Transform<Real,3,Affine>& bwd_transform,
const Transform<Real,3,Affine>& fwd_transform,
249 const uint dimension,
252 if (dimension == 0) {
257 const Eigen::Matrix<Real,3,1> plane_normal = Eigen::Matrix<Real,3,1>(0.0, 1.0, 0.0);
260 Eigen::Matrix<Real,3,1> plane_point
261 = Eigen::Matrix<Real,3,1>(0,
vmesh->getMeshMinLimits()[1]+
vmesh->getCellSize()[1]*0.5,0);
262 const Eigen::Matrix<Real,3,1> lagrangian_di
263 = bwd_transform.linear()*Eigen::Matrix<Real,3,1>(
vmesh->getCellSize()[0],0,0.0);
266 const Eigen::Matrix<Real,3,1> euclidian_dj
267 = Eigen::Matrix<Real,3,1>(0,
vmesh->getCellSize()[1],0.0);
268 const Eigen::Matrix<Real,3,1> lagrangian_dk
269 = bwd_transform.linear()*Eigen::Matrix<Real,3,1>(0.0,0.0,
vmesh->getCellSize()[2]);
272 const Eigen::Matrix<Real,3,1> line_direction = bwd_transform.linear() * Eigen::Matrix<Real,3,1>(0,1.0,0.0);
273 const Eigen::Matrix<Real,3,1> line_point = bwd_transform * Eigen::Matrix<Real,3,1>(
274 vmesh->getMeshMinLimits()[0],
275 0.5*
vmesh->getCellSize()[1]+
vmesh->getMeshMinLimits()[1],
276 0.5*
vmesh->getCellSize()[2]+
vmesh->getMeshMinLimits()[2]);
280 Eigen::Matrix<Real,3,1> intersect_0_0_0 =
line_plane_intersection(line_point,line_direction,plane_point,plane_normal);
281 Eigen::Matrix<Real,3,1> intersect_1_0_0 =
line_plane_intersection(line_point + lagrangian_di, line_direction, plane_point, plane_normal);
282 Eigen::Matrix<Real,3,1> intersect_0_1_0 =
line_plane_intersection(line_point, line_direction, plane_point + euclidian_dj, plane_normal);
283 Eigen::Matrix<Real,3,1> intersect_0_0_1 =
line_plane_intersection(line_point + lagrangian_dk, line_direction, plane_point, plane_normal);
286 intersection_di = intersect_1_0_0[dimension] - intersect_0_0_0[dimension];
287 intersection_dj = intersect_0_1_0[dimension] - intersect_0_0_0[dimension];
288 intersection_dk = intersect_0_0_1[dimension] - intersect_0_0_0[dimension];
290 if (dimension == 1) {
292 const Eigen::Matrix<Real,3,1> plane_normal = Eigen::Matrix<Real,3,1>(0.0, 0.0, 1.0);
295 Eigen::Matrix<Real,3,1> plane_point
296 = Eigen::Matrix<Real,3,1>(0.0, 0.0,
vmesh->getMeshMinLimits()[2]+
vmesh->getCellSize()[2] * 0.5);
298 const Eigen::Matrix<Real,3,1> lagrangian_di
299 = bwd_transform.linear() * Eigen::Matrix<Real,3,1>(
vmesh->getCellSize()[0], 0.0, 0.0);
300 const Eigen::Matrix<Real,3,1> lagrangian_dj
301 = bwd_transform.linear() * Eigen::Matrix<Real,3,1>(0.0,
vmesh->getCellSize()[1], 0.0);
303 const Eigen::Matrix<Real,3,1> euclidian_dk
304 = Eigen::Matrix<Real,3,1>(0.0, 0.0,
vmesh->getCellSize()[2]);
307 const Eigen::Matrix<Real,3,1> line_direction
308 = bwd_transform.linear() * Eigen::Matrix<Real,3,1>(0.0, 0.0, 1.0);
309 const Eigen::Matrix<Real,3,1> line_point = bwd_transform * Eigen::Matrix<Real,3,1>(
310 0.5*
vmesh->getCellSize()[0] +
vmesh->getMeshMinLimits()[0],
311 vmesh->getMeshMinLimits()[1],
312 0.5*
vmesh->getCellSize()[2] +
vmesh->getMeshMinLimits()[2]);
316 Eigen::Matrix<Real,3,1> intersect_0_0_0 =
line_plane_intersection(line_point,line_direction,plane_point,plane_normal);
317 Eigen::Matrix<Real,3,1> intersect_1_0_0 =
line_plane_intersection(line_point + lagrangian_di, line_direction, plane_point, plane_normal);
318 Eigen::Matrix<Real,3,1> intersect_0_1_0 =
line_plane_intersection(line_point + lagrangian_dj, line_direction, plane_point, plane_normal);
319 Eigen::Matrix<Real,3,1> intersect_0_0_1 =
line_plane_intersection(line_point, line_direction, plane_point + euclidian_dk, plane_normal);
322 intersection_di = intersect_1_0_0[dimension] - intersect_0_0_0[dimension];
323 intersection_dj = intersect_0_1_0[dimension] - intersect_0_0_0[dimension];
324 intersection_dk = intersect_0_0_1[dimension] - intersect_0_0_0[dimension];
327 if (dimension == 2) {
329 const Eigen::Matrix<Real,3,1> plane_normal = Eigen::Matrix<Real,3,1>(1.0, 0.0, 0.0);
331 Eigen::Matrix<Real,3,1> plane_point
332 = Eigen::Matrix<Real,3,1>(
vmesh->getMeshMinLimits()[0]+
vmesh->getCellSize()[0]*0.5, 0.0, 0.0);
334 const Eigen::Matrix<Real,3,1> euclidian_di = Eigen::Matrix<Real,3,1>(
vmesh->getCellSize()[0], 0.0, 0.0);
335 const Eigen::Matrix<Real,3,1> lagrangian_dj
336 = bwd_transform.linear() * Eigen::Matrix<Real,3,1>(0.0,
vmesh->getCellSize()[1], 0.0);
337 const Eigen::Matrix<Real,3,1> lagrangian_dk = bwd_transform.linear() * Eigen::Matrix<Real,3,1>(0.0, 0.0,
vmesh->getCellSize()[2]);
340 const Eigen::Matrix<Real,3,1> line_direction = bwd_transform.linear() * Eigen::Matrix<Real,3,1>(1.0, 0.0, 0.0);
341 const Eigen::Matrix<Real,3,1> line_point = bwd_transform * Eigen::Matrix<Real,3,1>(
342 0.5 *
vmesh->getCellSize()[0] +
vmesh->getMeshMinLimits()[0],
343 0.5 *
vmesh->getCellSize()[1] +
vmesh->getMeshMinLimits()[1],
344 vmesh->getMeshMinLimits()[2]);
348 Eigen::Matrix<Real,3,1> intersect_0_0_0 =
line_plane_intersection(line_point,line_direction,plane_point,plane_normal);
349 Eigen::Matrix<Real,3,1> intersect_1_0_0 =
line_plane_intersection(line_point, line_direction, plane_point + euclidian_di, plane_normal);
350 Eigen::Matrix<Real,3,1> intersect_0_1_0 =
line_plane_intersection(line_point + lagrangian_dj, line_direction, plane_point, plane_normal);
351 Eigen::Matrix<Real,3,1> intersect_0_0_1 =
line_plane_intersection(line_point + lagrangian_dk, line_direction, plane_point, plane_normal);
354 intersection_di = intersect_1_0_0[dimension] - intersect_0_0_0[dimension];
355 intersection_dj = intersect_0_1_0[dimension] - intersect_0_0_0[dimension];
356 intersection_dk = intersect_0_0_1[dimension] - intersect_0_0_0[dimension];
378 const Transform<Real,3,Affine>& bwd_transform,
const Transform<Real,3,Affine>& fwd_transform,
379 const uint dimension,
382 if (dimension == 0) {
383 const Eigen::Matrix<Real,3,1> point_0_0_0 = bwd_transform
384 * Eigen::Matrix<Real,3,1>(0.0 *
vmesh->getCellSize()[0] +
vmesh->getMeshMinLimits()[0],
385 0.5 *
vmesh->getCellSize()[1] +
vmesh->getMeshMinLimits()[1],
386 0.5 *
vmesh->getCellSize()[2] +
vmesh->getMeshMinLimits()[2]);
387 const Eigen::Matrix<Real,3,1> point_1_0_0 = bwd_transform
388 * Eigen::Matrix<Real,3,1>(1.0 *
vmesh->getCellSize()[0] +
vmesh->getMeshMinLimits()[0],
389 0.5 *
vmesh->getCellSize()[1] +
vmesh->getMeshMinLimits()[1],
390 0.5 *
vmesh->getCellSize()[2] +
vmesh->getMeshMinLimits()[2]);
391 const Eigen::Matrix<Real,3,1> point_0_1_0 = bwd_transform
392 * Eigen::Matrix<Real,3,1>(0.0 *
vmesh->getCellSize()[0] +
vmesh->getMeshMinLimits()[0],
393 1.5 *
vmesh->getCellSize()[1] +
vmesh->getMeshMinLimits()[1],
394 0.5 *
vmesh->getCellSize()[2] +
vmesh->getMeshMinLimits()[2]);
395 const Eigen::Matrix<Real,3,1> point_0_0_1 = bwd_transform
396 * Eigen::Matrix<Real,3,1>(0.0 *
vmesh->getCellSize()[0] +
vmesh->getMeshMinLimits()[0],
397 0.5 *
vmesh->getCellSize()[1] +
vmesh->getMeshMinLimits()[1],
398 1.5 *
vmesh->getCellSize()[2] +
vmesh->getMeshMinLimits()[2]);
404 if (dimension == 1) {
407 const Eigen::Matrix<Real,3,1> point_0_0_0 = bwd_transform
408 * Eigen::Matrix<Real,3,1>(0.5 *
vmesh->getCellSize()[0] +
vmesh->getMeshMinLimits()[0],
409 vmesh->getMeshMinLimits()[1],
410 0.5 *
vmesh->getCellSize()[2] +
vmesh->getMeshMinLimits()[2]);
411 const Eigen::Matrix<Real,3,1> point_1_0_0 = bwd_transform
412 * Eigen::Matrix<Real,3,1>(1.5 *
vmesh->getCellSize()[0] +
vmesh->getMeshMinLimits()[0],
413 vmesh->getMeshMinLimits()[1],
414 0.5 *
vmesh->getCellSize()[2] +
vmesh->getMeshMinLimits()[2]);
415 const Eigen::Matrix<Real,3,1> point_0_1_0 = bwd_transform
416 * Eigen::Matrix<Real,3,1>(0.5 *
vmesh->getCellSize()[0] +
vmesh->getMeshMinLimits()[0],
417 1.0 *
vmesh->getCellSize()[1] +
vmesh->getMeshMinLimits()[1],
418 0.5 *
vmesh->getCellSize()[2] +
vmesh->getMeshMinLimits()[2]);
419 const Eigen::Matrix<Real,3,1> point_0_0_1 = bwd_transform
420 * Eigen::Matrix<Real,3,1>(0.5 *
vmesh->getCellSize()[0] +
vmesh->getMeshMinLimits()[0],
421 vmesh->getMeshMinLimits()[1],
422 1.5 *
vmesh->getCellSize()[2] +
vmesh->getMeshMinLimits()[2]);
428 if (dimension == 2) {
429 const Eigen::Matrix<Real,3,1> point_0_0_0 = bwd_transform
430 * Eigen::Matrix<Real,3,1>(0.5 *
vmesh->getCellSize()[0] +
vmesh->getMeshMinLimits()[0],
431 0.5 *
vmesh->getCellSize()[1] +
vmesh->getMeshMinLimits()[1],
432 0.0 *
vmesh->getCellSize()[2] +
vmesh->getMeshMinLimits()[2]);
433 const Eigen::Matrix<Real,3,1> point_1_0_0 = bwd_transform
434 * Eigen::Matrix<Real,3,1>(1.5 *
vmesh->getCellSize()[0] +
vmesh->getMeshMinLimits()[0],
435 0.5 *
vmesh->getCellSize()[1] +
vmesh->getMeshMinLimits()[1],
436 0.0 *
vmesh->getCellSize()[2] +
vmesh->getMeshMinLimits()[2]);
437 const Eigen::Matrix<Real,3,1> point_0_1_0 = bwd_transform
438 * Eigen::Matrix<Real,3,1>(0.5 *
vmesh->getCellSize()[0] +
vmesh->getMeshMinLimits()[0],
439 1.5 *
vmesh->getCellSize()[1] +
vmesh->getMeshMinLimits()[1],
440 0.0 *
vmesh->getCellSize()[2] +
vmesh->getMeshMinLimits()[2]);
441 const Eigen::Matrix<Real,3,1> point_0_0_1 = bwd_transform
442 * Eigen::Matrix<Real,3,1>(0.5 *
vmesh->getCellSize()[0] +
vmesh->getMeshMinLimits()[0],
443 0.5 *
vmesh->getCellSize()[1] +
vmesh->getMeshMinLimits()[1],
444 1.0 *
vmesh->getCellSize()[2] +
vmesh->getMeshMinLimits()[2]);