// check whether points lies inside or outside of polygon Eigen::ArrayXd distmesh::utils::pointsInsidePoly( Eigen::Ref<Eigen::ArrayXXd const> const points, Eigen::Ref<Eigen::ArrayXXd const> const polygon) { Eigen::ArrayXd inside = Eigen::ArrayXd::Zero(points.rows()); for (int i = 0, j = polygon.rows() - 1; i < polygon.rows(); j = i++) { inside = (((points.col(1) < polygon(i, 1)) != (points.col(1) < polygon(j, 1))) && (points.col(0) < (polygon(j, 0) - polygon(i, 0)) * (points.col(1) - polygon(i, 1)) / (polygon(j, 1) - polygon(i, 1)) + polygon(i, 0))).select(1.0 - inside, inside); } return inside; }
SEXP GetMatCol(const SEXP data, const int idx) { Eigen::Ref<Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> > A = EigenXPtrToMapEigen<T>(data); Eigen::Matrix<T, Eigen::Dynamic, 1> Am = A.col(idx-1); return(wrap(Am)); }
void SetMatCol(SEXP data, const int idx, SEXP value) { Eigen::Ref<Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> > A = EigenXPtrToMapEigen<T>(data); A.col(idx-1) = as<Eigen::Matrix<T, Eigen::Dynamic, 1> >(value); }