int maxProfit(vector<int> &prices) {
     if(prices.size() < 2)
         return 0;
     vector<int> cVec(prices.size() , 0);
     int minV = prices[0];
     cVec[0] = prices[0];
     for (int i = 1 ; i < prices.size() ; i++)
     {
         if(prices[i] < minV)
         {
             minV = prices[i];
         }
        cVec[i] = minV;
     }
     vector<int> eVec(prices.size(),0);
     int maxV = prices[prices.size()-1];
     eVec[eVec.size()-1] = prices[prices.size()-1];
     for(int i = prices.size() - 2 ; i >= 0 ; i--)
     {
         if(prices[i] > maxV)
         {
             maxV = prices[i];
            
         }
          eVec[i] = maxV;
     }
     int sum = 0;
     for(int i = 0 ; i < prices.size() - 1 ; i++)
     {
         if(eVec[i+1] - cVec[i] > sum)
             sum = eVec[i+1] - cVec[i];
     }
     return sum;
 }
void Camera :: setModelViewMatrix(void) {
	GLfloat m[16];
	Vector3 eVec(eye.x, eye.y, eye.z); // a vector version of eye 
	m[0] =  u.x; m[4] =  u.y; m[8]  =  u.z;  m[12] = -eVec.dot(u);
	m[1] =  v.x; m[5] =  v.y; m[9]  =  v.z;  m[13] = -eVec.dot(v);
	m[2] =  n.x; m[6] =  n.y; m[10] =  n.z;  m[14] = -eVec.dot(n);
	m[3] =  0;   m[7] =  0;   m[11] =  0;    m[15] = 1.0;
	glMatrixMode(GL_MODELVIEW);
	glLoadMatrixf(m); // load OpenGL's modelview matrix
}
void MySetModelViewMatrix(void)
{ // load modelview matrix with camera values
	mat4 m;
	vec3 eVec(eye.x, eye.y, 	eye.z);// eye as vector
	m[0][0] = u.x; m[0][1] = u.y; m[0][2] = 	u.z; m[0][3] = -dot(eVec,u);
	m[1][0] = v.x; m[1][1] = v.y; m[1][2] = 	v.z; m[1][3] = -dot(eVec,v);
	m[2][0] = n.x; m[2][1] = n.y; m[2][2] = n.z; m[2][3] = -dot(eVec,n);
	m[3][0] = 0;   m[3][1] =   0; m[3][2] =   0; m[3][3] = 1.0;
	NewCamera = m;
	printm(NewCamera);
}
//<<<<<<<<<<<<<<<< setModelViewMatrix >>>>>>>>>>>>>>>> 
void Camera :: setModelViewMatrix(void) 
{ // load modelview matrix with existing camera values 

	if( DEBUG )
		cout << "Calling setModelViewMatrix\n";

    float m[16]; 
    Vector3 eVec(eye.x, eye.y, eye.z); 
    m[0] = u.x; m[4] = u.y; m[8] = u.z; m[12] = -eVec.dot(u); 
    m[1] = v.x; m[5] = v.y; m[9] = v.z; m[13] = -eVec.dot(v); 
    m[2] = n.x; m[6] = n.y; m[10] = n.z; m[14] = -eVec.dot(n); 
    m[3] = 0; m[7] = 0; m[11] = 0; m[15] = 1.0; 
    glMatrixMode(GL_MODELVIEW); 
    glLoadMatrixf(m); 
} 
Example #5
0
Foam::scalar Foam::edgeStats::minLen(Ostream& os) const
{
    label nX = 0;
    label nY = 0;
    label nZ = 0;

    scalar minX = GREAT;
    scalar maxX = -GREAT;
    vector x(1, 0, 0);

    scalar minY = GREAT;
    scalar maxY = -GREAT;
    vector y(0, 1, 0);

    scalar minZ = GREAT;
    scalar maxZ = -GREAT;
    vector z(0, 0, 1);

    scalar minOther = GREAT;
    scalar maxOther = -GREAT;

    const edgeList& edges = mesh_.edges();

    forAll(edges, edgeI)
    {
        const edge& e = edges[edgeI];

        vector eVec(e.vec(mesh_.points()));

        scalar eMag = mag(eVec);

        eVec /= eMag;

        if (mag(eVec & x) > 1-edgeTol_)
        {
            minX = min(minX, eMag);
            maxX = max(maxX, eMag);
            nX++;
        }
        else if (mag(eVec & y) > 1-edgeTol_)
        {
            minY = min(minY, eMag);
            maxY = max(maxY, eMag);
            nY++;
        }
        else if (mag(eVec & z) > 1-edgeTol_)
        {
            minZ = min(minZ, eMag);
            maxZ = max(maxZ, eMag);
            nZ++;
        }
        else
        {
            minOther = min(minOther, eMag);
            maxOther = max(maxOther, eMag);
        }
    }

    os  << "Mesh bounding box:" << boundBox(mesh_.points()) << nl << nl
        << "Mesh edge statistics:" << nl
        << "    x aligned :  number:" << nX << "\tminLen:" << minX
        << "\tmaxLen:" << maxX << nl
        << "    y aligned :  number:" << nY << "\tminLen:" << minY
        << "\tmaxLen:" << maxY << nl
        << "    z aligned :  number:" << nZ << "\tminLen:" << minZ
        << "\tmaxLen:" << maxZ << nl
        << "    other     :  number:" << mesh_.nEdges() - nX - nY - nZ
        << "\tminLen:" << minOther
        << "\tmaxLen:" << maxOther << nl << endl;

    if (normalDir_ == 0)
    {
        return min(minY, min(minZ, minOther));
    }
    else if (normalDir_ == 1)
    {
        return min(minX, min(minZ, minOther));
    }
    else if (normalDir_ == 2)
    {
        return min(minX, min(minY, minOther));
    }
    else
    {
        return min(minX, min(minY, min(minZ, minOther)));
    }
}
void Foam::meshRefinement::snapToSurface
(
    labelList& pointSurfaceRegion,
    labelList& edgeSurfaceRegion,
    scalarField& edgeWeight
)
{
    const edgeList& edges = mesh_.edges();
    const pointField& points = mesh_.points();

    pointSurfaceRegion.setSize(points.size());
    pointSurfaceRegion = -1;

    edgeSurfaceRegion.setSize(edges.size());
    edgeSurfaceRegion = -1;

    edgeWeight.setSize(edges.size());
    edgeWeight = -GREAT;


    // Do test for intersections
    // ~~~~~~~~~~~~~~~~~~~~~~~~~

    labelList surface1;
    List<pointIndexHit> hit1;
    labelList region1;
    //vectorField normal1;

    labelList surface2;
    List<pointIndexHit> hit2;
    labelList region2;
    //vectorField normal2;
    {
        vectorField start(edges.size());
        vectorField end(edges.size());
        forAll(edges, edgei)
        {
            const edge& e = edges[edgei];
            start[edgei] = points[e[0]];
            end[edgei] = points[e[1]];
        }
        
        surfaces_.findNearestIntersection
        (
            //labelList(1, 0),    //identity(surfaces_.surfaces().size()),
            identity(surfaces_.surfaces().size()),
            start,
            end,

            surface1,
            hit1,
            region1,
            //normal1,

            surface2,
            hit2,
            region2
            //normal2
        );
    }

    // Adjust location
    // ~~~~~~~~~~~~~~~

    pointField newPoints(points);
    label nAdjusted = 0;

    const labelListList& pointEdges = mesh_.pointEdges();
    forAll(pointEdges, pointi)
    {
        const point& pt = points[pointi];
        const labelList& pEdges = pointEdges[pointi];

        // Get the nearest intersection
        label minEdgei = -1;
        scalar minFraction = 0.5;   // Harpoon 0.25; // Samm?
        forAll(pEdges, pEdgei)
        {
            label edgei = pEdges[pEdgei];
            if (hit1[edgei].hit())
            {
                const point& hitPt = hit1[edgei].hitPoint();

                const edge& e = edges[edgei];
                label otherPointi = e.otherVertex(pointi);
                const point& otherPt = points[otherPointi];

                vector eVec(otherPt-pt);
                scalar f = eVec&(hitPt-pt)/magSqr(eVec);

                if (f < minFraction)
                {
                    minEdgei = edgei;
                    minFraction = f;
                }
            }
        }
        if (minEdgei != -1 && minFraction >= 0.01)
        {
            // Move point to intersection with minEdgei
            if (pointSurfaceRegion[pointi] == -1)
            {
                pointSurfaceRegion[pointi] = surfaces_.globalRegion
                (
                    surface1[minEdgei],
                    region1[minEdgei]
                );
                newPoints[pointi] = hit1[minEdgei].hitPoint();
                nAdjusted++;
            }
        }
    }