PolyFEM
Loading...
Searching...
No Matches
InterpolatedFunction.cpp
Go to the documentation of this file.
1
#include "
InterpolatedFunction.hpp
"
2
3
#include <igl/in_element.h>
4
#include <igl/barycentric_coordinates.h>
5
6
#include <iostream>
7
8
namespace
polyfem
9
{
10
namespace
utils
11
{
12
InterpolatedFunction2d::InterpolatedFunction2d
(
const
Eigen::MatrixXd &fun,
const
Eigen::MatrixXd &pts,
const
Eigen::MatrixXi &tris)
13
{
14
init
(fun, pts, tris);
15
}
16
17
void
InterpolatedFunction2d::init
(
const
Eigen::MatrixXd &fun,
const
Eigen::MatrixXd &pts,
const
Eigen::MatrixXi &tris)
18
{
19
assert(pts.cols() == 2);
20
assert(pts.rows() == fun.rows());
21
assert(tris.cols() == 3);
22
23
fun_
= fun;
24
pts_
= pts;
25
tris_
= tris;
26
27
tree_
.init(
pts_
,
tris_
);
28
}
29
30
Eigen::MatrixXd
InterpolatedFunction2d::interpolate
(
const
Eigen::MatrixXd &pts)
const
31
{
32
assert(pts.cols() == 2);
33
34
Eigen::VectorXi I;
35
igl::in_element(
pts_
,
tris_
, pts,
tree_
, I);
36
37
Eigen::MatrixXd res(pts.rows(),
fun_
.cols());
38
res.setZero();
39
40
Eigen::MatrixXd bc;
41
42
for
(
long
i = 0; i < pts.rows(); ++i)
43
{
44
const
int
index = I(i);
45
46
if
(index < 0)
47
{
48
continue
;
49
}
50
51
const
Eigen::MatrixXd pt = pts.row(i);
52
const
Eigen::MatrixXd A =
pts_
.row(
tris_
(index, 0));
53
const
Eigen::MatrixXd B =
pts_
.row(
tris_
(index, 1));
54
const
Eigen::MatrixXd C =
pts_
.row(
tris_
(index, 2));
55
igl::barycentric_coordinates(pt, A, B, C, bc);
56
// std::cout<<pt<<"\tii:"<<index<<"\tr:"<<bc<<std::endl;
57
58
for
(
int
j = 0; j < 3; ++j)
59
res.row(i) +=
fun_
.row(
tris_
(index, j)) * bc(j);
60
}
61
62
return
res;
63
}
64
}
// namespace utils
65
}
// namespace polyfem
InterpolatedFunction.hpp
polyfem::utils::InterpolatedFunction2d::tris_
Eigen::MatrixXi tris_
Definition
InterpolatedFunction.hpp:24
polyfem::utils::InterpolatedFunction2d::fun_
Eigen::MatrixXd fun_
Definition
InterpolatedFunction.hpp:22
polyfem::utils::InterpolatedFunction2d::init
void init(const Eigen::MatrixXd &fun, const Eigen::MatrixXd &pts, const Eigen::MatrixXi &tris)
Definition
InterpolatedFunction.cpp:17
polyfem::utils::InterpolatedFunction2d::pts_
Eigen::MatrixXd pts_
Definition
InterpolatedFunction.hpp:23
polyfem::utils::InterpolatedFunction2d::tree_
igl::AABB< Eigen::MatrixXd, 2 > tree_
Definition
InterpolatedFunction.hpp:21
polyfem::utils::InterpolatedFunction2d::InterpolatedFunction2d
InterpolatedFunction2d()
Definition
InterpolatedFunction.hpp:14
polyfem::utils::InterpolatedFunction2d::interpolate
Eigen::MatrixXd interpolate(const Eigen::MatrixXd &pts) const
Definition
InterpolatedFunction.cpp:30
polyfem
Definition
AMIPSEnergy.cpp:6
src
polyfem
utils
InterpolatedFunction.cpp
Generated by
1.9.8