void CXTColorRef::toHSB(double& h, double& s, double& b) const { int red = getRValue(); int green = getGValue(); int blue = getBValue(); int cmax = __max(red, __max(green, blue)); int cmin = __min(red, __min(green, blue)); b = ((double) cmax) / 255.0; if (cmax != 0) s = ((double) (cmax - cmin)) / ((double) cmax); else s = 0; if (s == 0) h = 0; else { double redc = ((double) (cmax - red)) / ((double) (cmax - cmin)); double greenc = ((double) (cmax - green)) / ((double) (cmax - cmin)); double bluec = ((double) (cmax - blue)) / ((double) (cmax - cmin)); if (red == cmax) h = bluec - greenc; else if (green == cmax) h = 2.0 + redc - bluec; else h = 4.0 + greenc - redc; h /= 6.0; if (h < 0) h = h + 1.0; } }
CXTColorRef& CXTColorRef::subtract(const CXTColorRef& clr) { *this = RGB(addColorValue(-clr.getRValue(), getRValue()), addColorValue(-clr.getGValue(), getGValue()), addColorValue(-clr.getBValue(), getBValue())); return *this; }
CXTColorRef& CXTColorRef::blend(const CXTColorRef& clr, int opacity) { *this = RGB(BlendColor(clr.getRValue(), getRValue(), opacity), BlendColor(clr.getGValue(), getGValue(), opacity), BlendColor(clr.getBValue(), getBValue(), opacity)); return *this; }
CXTColorRef& CXTColorRef::operator/=(COLORREF cr) { m_ColorRef = SafeRGB( getRValue() / GetRValue(cr), getGValue() / GetGValue(cr), getBValue() / GetBValue(cr)); return *this; }
/* * Requires parent cell, end node, open and closed lists * sets the cell's h, g, f values as well as its parent * puts the cell in the open list */ int populateOpenList(GridCell* parent, GridCell* destination, std::vector<GridCell*>& open_list, std::vector<GridCell*>& closed_list) { for(auto cell : parent->getNeighbors()) { if(cell->getWalkable() && cell != parent && !isInList(cell, closed_list)) { //check if cell is in open list already if(isInList(cell, open_list)) { //wut?????? if x + y > x?? int new_gval = cell->mGValue + parent->mGValue; if(new_gval < parent->mGValue) { cell->mParent = parent; getGValue(parent, destination, cell); } } else { getGValue(parent, destination, cell); cell->mParent = parent; open_list.push_back(cell); } } } }
Bool getAccelerometer(AccelerationInfo * info, AccelerationRawValue * value, Bool gBound) { UInt8 backfront, pola; UInt8 buffer[4]; // request accelerometer value buffer[0] = 0x00; sendBufferToI2CSoft(MMA7660FC_I2C_ADDR,buffer,1); getBufferFromI2CSoft(MMA7660FC_I2C_ADDR,buffer,4); if( (buffer[0] & 0x40)!=0 || (buffer[1] & 0x40)!=0 || (buffer[2] & 0x40)!=0 || (buffer[3] & 0x40)!=0 ) { return False; } // get milli g values value->x = getGValue(buffer[0]); value->y = getGValue(buffer[1]); value->z = getGValue(buffer[2]); // get angle // setAccelerationAngle(value,angle); //zero-g dead zone if(value->x <= 3 && value->x >=-3) value->x = 0; if(value->y <= 3 && value->y >=-3) value->y = 0; if(value->z <= 3 && value->z >=-3) value->z = 0; value->x *= 47; value->y *= 47; value->z *= 47; //accelerometer boundaries if(gBound==True) { if(value->x > 984) value->x = 984; if(value->x < -984) value->x = -984; if(value->y > 984) value->y = 984; if(value->y < -984) value->y = -984; if(value->z > 984) value->z = 984; if(value->z < -984) value->z = -984; } // get informations about accelerometer info->shake = (buffer[3]&0x80)>>7; info->orientation = ORIENTATION_UNKNOWN; info->backOrFront = ORIENTATION_UNKNOWN; backfront = buffer[3]&0x3; switch(backfront) { case 1: //DebugPrintf("FRONT "); info->backOrFront = ORIENTATION_FRONT; break; case 2: //DebugPrintf("BACK "); info->backOrFront = ORIENTATION_BACK; break; } pola = (buffer[3]&0x1C)>>2; switch(pola) { case 1: //DebugPrintf("LEFT "); info->orientation = ORIENTATION_LEFT; break; case 2: //DebugPrintf("RIGHT "); info->orientation = ORIENTATION_RIGHT; break; case 5: //DebugPrintf("DOWN "); info->orientation = ORIENTATION_DOWN; break; case 6: //DebugPrintf("UP "); info->orientation = ORIENTATION_UP; break; } info->tap = (buffer[3]&0x20) >> 5; // baptiste: les secousses sur x, y z sont pas detecté ? /* if( info->shake == True) { DebugPrintf("SHAKE "); buffer[0] = 0x06; SendBufferToI2CSoft(MMA7660FC_I2C_ADDR,buffer,1); GetBufferFromI2CSoft(MMA7660FC_I2C_ADDR,buffer,1); // shake on x axis if( (buffer[0]&0x80)!=0) { DebugPrintf("X "); info->shakeX = True; } else { info->shakeX = False; } // shake on y axis if( (buffer[0]&0x40)!=0) { DebugPrintf("Y "); info->shakeY = True; } else { info->shakeY = False; } // shake on z axis if( (buffer[0]&0x20)!=0) { DebugPrintf("Z "); info->shakeZ = True; } else { info->shakeZ = False; } } */ //DebugPrintf("\r\n"); return True; }