//---------------------------------------------------- void guiQuad::loadSettings(){ string str; for(int i = 0; i < 4; i++){ //These two lines give us: // "QUAD_SRC_0" // "QUAD_SRC_1" etc... str = quadName; str += ofToString(i); srcZeroToOne[i].x = xml.getValue(str+"_X", srcZeroToOne[i].x); srcZeroToOne[i].y = xml.getValue(str+"_Y", srcZeroToOne[i].y); if(srcZeroToOne[i].x > 1) srcZeroToOne[i].x = 1; if(srcZeroToOne[i].y > 1) srcZeroToOne[i].y = 1; } anchorPoint.x = (least(srcZeroToOne[1].x, srcZeroToOne[2].x) + greatest(srcZeroToOne[0].x, srcZeroToOne[3].x))/2; anchorPoint.y = (least(srcZeroToOne[2].y, srcZeroToOne[3].y) + greatest(srcZeroToOne[0].y, srcZeroToOne[1].y))/2; }
//---------------------------------------------------- bool guiQuad::updatePoint(float x, float y, float offsetX, float offsetY, float width, float height){ //nothing to update if(selected == -1) return false; if(width == 0 || height == 0){ //dangerous so we ignore :) return false; } if( x < offsetX ) x = offsetX; if( x > offsetX + width ) x = offsetX + width; if( y < offsetY ) y = offsetY; if( y > offsetY + height) y = offsetY + height; //lets get it in range x(0 - width) y(0 - height) float px = x - offsetX; float py = y - offsetY; //now get in 0-1 range px /= width; py /= height; srcZeroToOne[selected].x = px; srcZeroToOne[selected].y = py; srcScaled[selected].x = px; srcScaled[selected].y = py; anchorPoint.x = (least(srcZeroToOne[1].x, srcZeroToOne[2].x) + greatest(srcZeroToOne[0].x, srcZeroToOne[3].x))/2; anchorPoint.y = (least(srcZeroToOne[2].y, srcZeroToOne[3].y) + greatest(srcZeroToOne[0].y, srcZeroToOne[1].y))/2; return true; }
int main() { float F_N=0, U_b=0; int cur_time=0,T_1=0,n,i,e; printf("\nEnter number of servers\n"); scanf("%d",&n); enterdetails(servers,n); printf("\n\n The largest stop time is %d\n",greatest(servers,n)); while(cur_time<=greatest(servers,n)) { for(i=0;i<n;i++) { if(cur_time==servers[i].start_time && cur_time==smallest(servers,n)) { T_1=cur_time; U_b+=servers[i].u; servers[i].fn=servers[i].exec_time/servers[i].u; } if(cur_time!=smallest(servers,n)&&cur_time==servers[i].start_time) { F_N+=(cur_time-T_1)/U_b; T_1=cur_time; U_b+=servers[i].u; servers[i].fn=F_N+servers[i].exec_time/servers[i].u; } } //disp(servers,n); fnsorting(servers,n); printf("\nTime\t\tServer\t\tfn\t\tF_N\t\tU_b\n"); for(i=0;i<n;i++) { if(servers[i].fn!=0&&servers[i].stop_time>cur_time) { e=servers[i].exec_time; printf("%d\t\t%s\t\t%0.2f\t\t%0.2f\t\t%0.2f\n",cur_time,servers[i].s_name,servers[i].fn,F_N,U_b); if(cur_time<servers[i].stop_time) { servers[i].fn+=servers[i].exec_time/servers[i].u; } else { F_N+=(cur_time-T_1)/U_b; T_1=cur_time; U_b+=servers[i].u; } break; } } //disp(servers,n); cur_time+=e; } }
//---------------------------------------------------- //these should be in the range x(0-maxX) y(0-maxH) //with width = maxW // height = maxH void guiQuad::setQuadPoints( ofxPoint2f * inPts ){ for(int i = 0; i < 4; i++){ srcZeroToOne[i].x = inPts[i].x; srcZeroToOne[i].y = inPts[i].y; if(srcZeroToOne[i].x > 1) srcZeroToOne[i].x = 1; if(srcZeroToOne[i].y > 1) srcZeroToOne[i].y = 1; } anchorPoint.x = (least(srcZeroToOne[1].x, srcZeroToOne[2].x) + greatest(srcZeroToOne[0].x, srcZeroToOne[3].x))/2; anchorPoint.y = (least(srcZeroToOne[2].y, srcZeroToOne[3].y) + greatest(srcZeroToOne[0].y, srcZeroToOne[1].y))/2; }
int main() { int i=100, o=25; int *ip = &o; std::cout << greatest(i, ip) << std::endl; }
void move(int power) // { reset(); for (int cnt=0; cnt<4; cnt++) { motors[cnt].absdifference=abs(motors[cnt].target-nMotorEncoder[lookUpComparison(cnt)]); motors[cnt].P=0; motors[cnt].prevP=0; motors[cnt].I=0; motors[cnt].D=0; motors[cnt].PIDadjustedPower=0; motors[cnt].startPoint=nMotorEncoder[lookUpComparison(cnt)]; } //int greatestTarget=greatest(abs(motors[mfrontLeft].target),abs(motors[mfrontRight].target), abs(motors[mbackLeft].target), abs(motors[mbackRight].target)); while (!allArrived(motors[mfrontLeft].absdifference,motors[mfrontRight].absdifference,motors[mbackLeft].absdifference,motors[mbackRight].absdifference)) { int greatestValue=greatest(abs(motors[mfrontLeft].absdifference),abs(motors[mfrontRight].absdifference), abs(motors[mbackLeft].absdifference), abs(motors[mbackRight].absdifference)); nxtDisplayCenteredTextLine(6, "%d,%d,%d", greatestValue, motors[greatestValue].absdifference, motors[greatestValue].target); for (int cnt=0; cnt<4; cnt++) { nxtDisplayCenteredTextLine(cnt, "%d,%d,%d", nMotorEncoder[lookUpComparison(cnt)], motors[cnt].absdifference, motors[cnt].power); writeDebugStreamLine("%d:%d,%d,%d", cnt,nMotorEncoder[lookUpComparison(cnt)], motors[cnt].absdifference, motors[cnt].power); //nxtDisplayCenteredTextLine(cnt+4, "%d,%d,%d", motors[cnt].absdifference, motors[cnt].P, motors[cnt].PIDadjustedPower); motors[cnt].absdifference=abs(motors[cnt].target-nMotorEncoder[lookUpComparison(cnt)]); motors[cnt].direction=( motors[cnt].target<nMotorEncoder[lookUpComparison(cnt)])?-1:1; motors[cnt].power=calcPower(abs(motors[cnt].absdifference), abs(motors[greatestValue].absdifference),abs(power), motors[cnt].direction); // motors[cnt].expectedPos=(((float)motors[cnt].target-motors[cnt].startPoint) * abs((float)expectedTravelDistance / (float)motors[greatestTarget].target)) +motors[cnt].startPoint; // motors[cnt].P=nMotorEncoder[lookUpComparison(cnt)]-motors[cnt].expectedPos; // motors[cnt].I+=motors[cnt].P; // motors[cnt].D=motors[cnt].P-motors[cnt].prevP; // motors[cnt].prevP=motors[cnt].P; //motors[cnt].PIDadjustedPower=((motors[cnt].P*kP)+(motors[cnt].I*kI)+(motors[cnt].D*kD))+motors[cnt].power; //motors[cnt].PIDadjustedPower=motors[cnt].power;//+(kP*motors[cnt].P); } for (int cnt=0; cnt<4; cnt++) { motor[lookUpComparison(cnt)]=motors[cnt].power; } } stopMotors(); return; }
bool guiQuad::updatePoint(float x, float y, float offsetX, float offsetY, float width, float height, bool noDistorsion){ if(!noDistorsion) { updatePoint(x, y, offsetX, offsetY, width, height); } else { getScaledQuadPoints(width, height); //nothing to update if(selected == -1) return false; if(width == 0 || height == 0){ //dangerous so we ignore :) return false; } if( x < offsetX ) x = offsetX; if( x > offsetX + width ) x = offsetX + width; if( y < offsetY ) y = offsetY; if( y > offsetY + height) y = offsetY + height; //lets get it in range x(0 - width) y(0 - height) float px = x - offsetX; float py = y - offsetY; if (!diag_v){ py = diag_a*px + diag_b; if (py < 0) { py = 0; px = ((py - diag_b)/diag_a); } else if (py > height) { py = height; px = ((py - diag_b)/diag_a); } } else { px = selX; if (px < 0) { px = 0; py = diag_b; } else if (px > width) { px = width; py = diag_a * width + diag_b; } } cout << "px = " << px << endl; cout << "py = " << py << endl; if (selected == 0) { if (sideA_v == -1) { sideA_b = py - (sideA_m * px); cout << "sideA_b = " << sideA_b << endl; if (sideB_v == -1) { float temp_x; if (sideB_m < 0 || sideB_m > 1) { temp_x= (((sideA_m * temp_x) + sideA_b - sideB_b) / sideB_m) / width; } else { temp_x= (((sideB_m * temp_x) + sideB_b - sideA_b) / sideA_m) / width; } srcZeroToOne[1].x = temp_x; srcZeroToOne[1].y = ((sideA_m * (srcZeroToOne[1].x * width)) + sideA_b)/height; } else { srcZeroToOne[1].y = ((sideA_m * (srcZeroToOne[1].x * width)) + sideA_b) / height; } } else { srcZeroToOne[1].x = px/width; srcZeroToOne[1].y = ((sideB_m * px) + sideB_b) / height; } if (sideD_v == -1) { sideD_b = py - (sideD_m * px); cout << "sideD_b = " << sideD_b << endl; if (sideC_v == -1) { float temp_x; if (sideC_m < 0 || sideC_m > 1) { temp_x = (((sideD_m * temp_x) + sideD_b - sideC_b) / sideC_m) / width; } else { temp_x = (((sideC_m * temp_x) + sideC_b - sideD_b) / sideD_m) / width; } srcZeroToOne[3].x = temp_x; cout << "3x = " << temp_x * width << endl; srcZeroToOne[3].y = ((sideD_m * (srcZeroToOne[3].x * width)) + sideD_b)/height; cout << "3y = " << srcZeroToOne[3].y * height << endl; } else { srcZeroToOne[3].y = ((sideD_m * (srcZeroToOne[3].x * width)) + sideD_b) / height; } } else { srcZeroToOne[3].x = px/width; srcZeroToOne[3].y = ((sideC_m * px) + sideC_b) / height; } if (srcZeroToOne[1].x < 0) { srcZeroToOne[1].x = 0; } else if (srcZeroToOne[1].x > 1) { srcZeroToOne[1].x = 1; } if (srcZeroToOne[1].y < 0) { srcZeroToOne[1].y = 0; } else if (srcZeroToOne[1].y > 1) { srcZeroToOne[1].y = 1; } if (srcZeroToOne[3].x < 0) { srcZeroToOne[3].x = 0; } else if (srcZeroToOne[3].x > 1) { srcZeroToOne[3].x = 1; } if (srcZeroToOne[3].y < 0) { srcZeroToOne[3].y = 0; } else if (srcZeroToOne[3].y > 1) { srcZeroToOne[3].y = 1; } } //now get in 0-1 range px /= width;; py /= height; srcZeroToOne[selected].x = px; srcZeroToOne[selected].y = py; anchorPoint.x = (least(srcZeroToOne[1].x, srcZeroToOne[2].x) + greatest(srcZeroToOne[0].x, srcZeroToOne[3].x))/2; anchorPoint.y = (least(srcZeroToOne[2].y, srcZeroToOne[3].y) + greatest(srcZeroToOne[0].y, srcZeroToOne[1].y))/2; } return true; }
using type = typename substitute< _Handle_ >::type; }; public: /*data*/ mutable int uv_error = 0; ref_count refs; type_storage< on_destroy_t > destroy_cb_storage; aligned_storage< MAX_PROPERTY_SIZE, MAX_PROPERTY_ALIGN > property_storage; #ifndef HACK_UV_INTERFACE_PTR handle::uv_interface *uv_interface_ptr = nullptr; #else typename _Handle_::uv_interface *uv_interface_ptr = nullptr; #endif //* all the fields placed before should have immutable layout size across the handle class hierarchy *// alignas(static_cast< const int >( greatest(alignof(::uv_any_handle), alignof(::uv_fs_t)) )) typename uv_t::type uv_handle_struct = { 0,}; private: /*constructors*/ instance() { property_storage.reset< typename _Handle_::properties >(); uv_interface_ptr = &_Handle_::uv_interface::instance(); } template< typename... _Args_ > instance(_Args_&&... _args) { property_storage.reset< typename _Handle_::properties >(std::forward< _Args_ >(_args)...); uv_interface_ptr = &_Handle_::uv_interface::instance(); } public: /* constructors*/