Exemplo n.º 1
0
bool Optimize::eval_g(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Index m, Ipopt::Number *g)
{
    UNUSED(n);
    UNUSED(m);
    UNUSED(new_x);
    if (updateCross(x) == false) return false;
    int i = 0, size = edges.size();
    for (; i < size; i++)
        g[i] = computeEdgeLength(i, x);
    i = size;
    int end = edges.size() + crosses.size();
    for (; i < end; ++i)
    {
        g[i] = computeCrossDiagDistance(i - size, x);
    }
    return true;
}
double TriMesh::computeMaxEdgeLength() const
{
    double maxLen = 0.0;
    for (unsigned face = 0; face < numFaces(); ++face) 
    {
        std::vector<unsigned> fVerts;
        getFaceVerts(face, fVerts);
        assert(fVerts.size() == 3);

        for (unsigned i = 0; i < 3; ++i) 
        {
            unsigned vert0 = fVerts[(i+1)%3];
            unsigned vert1 = fVerts[(i+2)%3];
            double len = computeEdgeLength(vert0, vert1);
            maxLen = std::max(maxLen, len);
        }
    }
    return maxLen;
}