本文整理汇总了C++中VectorI::size方法的典型用法代码示例。如果您正苦于以下问题:C++ VectorI::size方法的具体用法?C++ VectorI::size怎么用?C++ VectorI::size使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VectorI
的用法示例。
在下文中一共展示了VectorI::size方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: write_faces
void write_faces(std::ofstream& fout,
const VectorI& faces,
const size_t vertex_per_face,
const VectorI& uv_indices=VectorI::Zero(0)) {
if (vertex_per_face != 3 && vertex_per_face != 4) {
std::stringstream err_msg;
err_msg << "OBJ format does not support non-triangle non-quad face with "
<< vertex_per_face << " vertices." << std::endl;
throw RuntimeError(err_msg.str());
}
const size_t num_faces = faces.size() / vertex_per_face;
const size_t num_uvs = uv_indices.size() / 2;
if (num_uvs == 0) {
for (size_t i=0; i<num_faces; i++) {
const auto& f = faces.segment(i*vertex_per_face, vertex_per_face);
fout << "f";
for (size_t j=0; j<vertex_per_face; j++) {
fout << " " << f[j] + 1;
}
fout << std::endl;
}
} else {
for (size_t i=0; i<num_faces; i++) {
const auto& f = faces.segment(i*vertex_per_face, vertex_per_face);
const auto& uv = uv_indices.segment(i*vertex_per_face, vertex_per_face);
fout << "f ";
for (size_t j=0; j<vertex_per_face; j++) {
fout << f[j] + 1 << "/" << uv[j] + 1 << " ";
}
fout << std::endl;
}
}
}
示例2: match
bool match(HashGrid::Ptr grid, const Vector3F& v) {
VectorI candidates = grid->get_items_near_point(v);
if (candidates.size() != 1) {
std::cout << "<" << v.transpose() << "> : " << candidates.transpose()
<< std::endl;
}
return candidates.size() > 0;
}
示例3: assign_vector
inline void assign_vector(
VectorI &v_src,
VectorI &v_ind,
VectorI &v_val,
VectorJ &v_out,
Accum accum)
{
using namespace detail;
if (v_val.size() != v_ind.size())
{
return;
}
assign_vector_helper(v_src, v_ind, v_val.begin(), v_out, accum);
}
示例4: ZSparseMatrix
ZSparseMatrix Assembler2D::getDisplacementStrainMatrix() {
typedef Eigen::Triplet<double> T;
std::vector<T> triplets;
for (size_t i=0; i<m_mesh->getNbrElements(); i++) {
Eigen::MatrixXd dN = m_DN[i];
VectorI idx = m_mesh->getElement(i);
assert(idx.size() == 3);
double V = m_mesh->getElementVolume(i);
// e_xx
size_t row = i * 3;
for (size_t k=0; k<3; k++) {
triplets.push_back(T(row, idx[k]*2, dN(k,0)));
}
// e_yy
row++;
for (size_t k=0; k<3; k++) {
triplets.push_back(T(row, idx[k]*2+1, dN(k,1)));
}
// e_xy
row++;
for (size_t k=0; k<3; k++) {
triplets.push_back(T(row, idx[k]*2 , dN(k,1) / 2.0));
triplets.push_back(T(row, idx[k]*2+1, dN(k,0) / 2.0));
}
}
Eigen::SparseMatrix<double> B = Eigen::SparseMatrix<double>(3*m_mesh->getNbrElements(), 2*m_mesh->getNbrNodes());
B.setFromTriplets(triplets.begin(), triplets.end());
return ZSparseMatrix(B);
}
示例5: assert
void Assembler2D::precomputeShapeFunctionDerivatives() {
Eigen::MatrixXd selector = Eigen::MatrixXd::Zero(3,2);
selector << 0.0, 0.0,
1.0, 0.0,
0.0, 1.0;
m_DN.resize(m_mesh->getNbrElements());
for (size_t i=0; i<m_mesh->getNbrElements(); ++i)
{
VectorI idx = m_mesh->getElement(i);
assert(idx.size() == 3);
VectorF u[3];
u[0] = m_mesh->getNode(idx[0]);
u[1] = m_mesh->getNode(idx[1]);
u[2] = m_mesh->getNode(idx[2]);
Eigen::MatrixXd P = Eigen::MatrixXd::Zero(3,3);
P << 1.0, 1.0, 1.0,
u[0][0], u[1][0], u[2][0],
u[0][1], u[1][1], u[2][1];
// DN is a 4x3 matrix containing the gradients of the
// 4 shape functions (one for each node)
//
m_DN[i] = P.inverse() * selector /* * -1.0 */;
}
}
示例6: NotImplementedError
std::vector<VectorI> enumerate(const VectorI& repetitions) {
std::vector<VectorI> result;
const size_t dim = repetitions.size();
if (dim == 2) {
for (size_t i=0; i<repetitions[0]; i++) {
for (size_t j=0; j<repetitions[1]; j++) {
result.push_back(Vector2I(i,j));
}
}
} else if (dim == 3) {
for (size_t i=0; i<repetitions[0]; i++) {
for (size_t j=0; j<repetitions[1]; j++) {
for (size_t k=0; k<repetitions[2]; k++) {
result.push_back(Vector3I(i,j,k));
}
}
}
} else {
std::stringstream err_msg;
err_msg << "Unsupported dim: " << dim;
throw NotImplementedError(err_msg.str());
}
return result;
}
示例7: compute_vertex_normals_from_face
void VertexNormalAttribute::compute_vertex_normals_from_face(Mesh& mesh) {
const size_t dim = mesh.get_dim();
const size_t num_vertices = mesh.get_num_vertices();
const size_t num_faces = mesh.get_num_faces();
const size_t vertex_per_face = mesh.get_vertex_per_face();
const VectorF& normals = get_attribute(mesh, "face_normal");
const VectorF& areas = get_attribute(mesh, "face_area");
assert(normals.size() == 3 * num_faces);
assert(areas.size() == num_faces);
VectorF& v_normals = m_values;
v_normals = VectorF::Zero(dim * num_vertices);
for (size_t i=0; i<num_faces; i++) {
VectorI face = mesh.get_face(i);
assert(face.size() == vertex_per_face);
VectorF face_normal = normals.segment(i*dim, dim);
Float face_area = areas[i];
for (size_t j=0; j<vertex_per_face; j++) {
size_t vi = face[j];
v_normals.segment(vi*dim, dim) += face_normal * face_area;
}
}
for (size_t i=0; i<num_vertices; i++) {
VectorF n = v_normals.segment(dim*i, dim);
Float n_len = n.norm();
if (n_len > 0.0) n /= n_len;
v_normals.segment(dim*i, dim) = n;
}
}
示例8: getCurlNorm
VectorF Assembler::getCurlNorm(double* vector_field, int num_vector_field) {
size_t num_node = m_mesh->getNbrNodes();
size_t num_elem = m_mesh->getNbrElements();
size_t dim = m_mesh->getDim();
assert(num_vector_field == dim*num_node);
VectorF curl_norm(num_elem);
for (size_t i=0; i<num_elem; i++) {
VectorI elem = m_mesh->getElement(i);
const Eigen::MatrixXd& DN = m_DN[i];
Eigen::Vector3d curl(0, 0, 0);
for (size_t j=0; j<elem.size(); j++) {
Eigen::Vector3d v(0, 0, 0);
Eigen::Vector3d grad(0, 0, 0);
for (size_t k=0; k<dim; k++) {
v[k] = vector_field[elem[j]*dim+k];
grad[k] = DN(j, k);
}
curl = curl + grad.cross(v);
}
curl_norm[i] = curl.norm();
}
return curl_norm;
}
示例9: B
ZSparseMatrix Assembler2D::getLaplacianMatrix() {
typedef Eigen::Triplet<double> T;
std::vector<T> triplets;
for (size_t i=0; i<m_mesh->getNbrElements(); ++i)
{
VectorI idx = m_mesh->getElement(i);
assert(idx.size() == 3);
Eigen::MatrixXd& dN = m_DN[i];
// Small strain-displacement matrix
//
Eigen::MatrixXd B(2,3);
B << dN(0,0), dN(1,0), dN(2,0),
dN(0,1), dN(1,1), dN(2,1);
Eigen::MatrixXd k_el = B.transpose() * B * m_mesh->getElementVolume(i);
for (size_t j=0; j<3; ++j)
for (size_t k=0; k<3; ++k)
triplets.push_back(T(idx[j], idx[k], k_el(j,k)));
}
Eigen::SparseMatrix<double> L = Eigen::SparseMatrix<double>(m_mesh->getNbrNodes(), m_mesh->getNbrNodes());
L.setFromTriplets(triplets.begin(), triplets.end());
return ZSparseMatrix(L);
}
示例10: set_soft_ctrs
void Deform::set_soft_ctrs(const VectorF &T, const VectorI &idx_T)
{
assert(T.size()/3 == idx_T.size());
for (int i = 0, i_end = idx_T.size(); i < i_end; ++ i)
{
int cid = idx_T[i];
Eigen::Vector3f ctr;
ctr << T[3*i], T[3*i+1], T[3*i+2];
soft_ctrs.push_back(Constraint(ctr, cid));
}
std::sort(soft_ctrs.begin(), soft_ctrs.end(), ConstraintCompare());
}
示例11: map_indices
VectorI map_indices(const VectorI& face, const VectorI& index_map) {
const size_t vertex_per_face = face.size();
VectorI index(vertex_per_face);
for (size_t i=0; i<vertex_per_face; i++) {
index[i] = index_map[face[i]];
}
return index;
}
示例12: get_material_tensor
Float ElementWiseMaterial::get_material_tensor(
size_t i, size_t j, size_t k, size_t l, VectorF coord) const {
const VectorI voxel_ids = look_up_voxels(coord);
assert(voxel_ids.size() > 0);
const size_t voxel_id = voxel_ids[0];
assert(voxel_id < m_materials.size());
return m_materials[voxel_id]->get_material_tensor(i,j,k,l,coord);
}
示例13: strain_to_stress
MatrixF ElementWiseMaterial::strain_to_stress(
const MatrixF& strain, VectorF coord) const {
const VectorI voxel_ids = look_up_voxels(coord);
assert(voxel_ids.size() > 0);
const size_t voxel_id = voxel_ids[0];
assert(voxel_id < m_materials.size());
return m_materials[voxel_id]->strain_to_stress(strain, coord);
}
示例14: extract_faces_from_hexes
void MeshGeometry::extract_faces_from_hexes() {
const VectorI& voxels = m_voxels;
typedef std::map<Multiplet, int> FaceCounter;
FaceCounter face_counter;
for (size_t i=0; i<voxels.size(); i+= m_vertex_per_voxel) {
VectorI voxel = voxels.segment(i, m_vertex_per_voxel);
// Note that the order of vertices below are predefined by MSH format,
// each face should have normal pointing outward.
assert(voxel.size() == 8);
Multiplet voxel_faces[6] = {
Multiplet(Vector4I(voxel[0], voxel[1], voxel[5], voxel[4])), // Bottom
Multiplet(Vector4I(voxel[2], voxel[3], voxel[7], voxel[6])), // Top
Multiplet(Vector4I(voxel[0], voxel[4], voxel[7], voxel[3])), // Left
Multiplet(Vector4I(voxel[1], voxel[2], voxel[6], voxel[5])), // Right
Multiplet(Vector4I(voxel[4], voxel[5], voxel[6], voxel[7])), // Front
Multiplet(Vector4I(voxel[0], voxel[3], voxel[2], voxel[1])) // Back
};
for (size_t j=0; j<6; j++) {
if (face_counter.find(voxel_faces[j]) == face_counter.end()) {
face_counter[voxel_faces[j]] = 1;
} else {
face_counter[voxel_faces[j]] += 1;
}
}
}
std::vector<int> vertex_buffer;
for (FaceCounter::const_iterator itr = face_counter.begin();
itr!=face_counter.end(); itr++) {
if (itr->second != 1 && itr->second != 2) {
const Vector4I& face = itr->first.get_ori_data();
std::stringstream err_msg;
err_msg << "Non-manifold mesh detected!" << std::endl;
err_msg << "Face <"
<< face[0] << ", "
<< face[1] << ", "
<< face[2] << ", "
<< face[3] << "> has "
<< itr->second << " adjacent volume elements";
throw RuntimeError(err_msg.str());
}
if (itr->second == 1) {
const VectorI& f = itr->first.get_ori_data();
assert(f.size() == 4);
vertex_buffer.push_back(f[0]);
vertex_buffer.push_back(f[1]);
vertex_buffer.push_back(f[2]);
vertex_buffer.push_back(f[3]);
}
}
m_faces.resize(vertex_buffer.size());
std::copy(vertex_buffer.begin(), vertex_buffer.end(), m_faces.data());
m_vertex_per_face = 4;
}
示例15: minpoly
ALGEB minpoly(MKernelVector kv, ALGEB* args)
{
int i;
ALGEB retlist, blank;
char err[] = "ERROR! Associated blackbox object does not exist!";
int key = MapleToInteger32(kv,args[1]), flag;
std::map<int,int>::iterator f_i;
std::map<int,void*>::iterator h_i;
// Get the data from the hash table
f_i = typeTable.find(key);
if( f_i == typeTable.end() )
MapleRaiseError(kv,err);
else
flag = f_i->second;
h_i = hashTable.find(key);
if(h_i != hashTable.end() ) { // We've got data
switch( flag ) {
// Getting the minimal polynomial is rather complicated, so both instances of this code were
// wrapped up inside a block, to cut down at the clutter at the top of this function.
// First declares a vector of the proper type and casts the pointer. Then computes the minimal
// polynomial. It then builds the proper Maple list structure for this application.
case BlackBoxi: {
Vectorl mpreturn;
Vectorl::iterator mp_i;
TriplesBBi* BB = (TriplesBBi*) h_i->second;
LinBox::minpoly( mpreturn, *BB, BB->field() );
retlist = MapleListAlloc(kv, mpreturn.size() );
for(i = 1, mp_i = mpreturn.begin(); mp_i != mpreturn.end(); ++mp_i, ++i)
MapleListAssign(kv, retlist, i, ToMapleInteger(kv, *mp_i));
}
break;
case BlackBoxI: {
VectorI mpreturn;
VectorI::iterator mp_i;
TriplesBBI* BB = (TriplesBBI*) h_i->second;
LinBox::minpoly( mpreturn, *BB, BB->field() );
retlist = MapleListAlloc(kv, mpreturn.size());
for(i = 1, mp_i = mpreturn.begin(); mp_i != mpreturn.end(); ++mp_i, ++i)
MapleListAssign(kv, retlist, i, LiToM(kv, *mp_i, blank));
}
break;
}
}
else
MapleRaiseError(kv,err);
return retlist;
}