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); }
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++; } } }