Exemple #1
0
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;
	}
}
Exemple #2
0
CXTColorRef& CXTColorRef::subtract(const CXTColorRef& clr)
{
	*this = RGB(addColorValue(-clr.getRValue(), getRValue()),
				addColorValue(-clr.getGValue(), getGValue()),
				addColorValue(-clr.getBValue(), getBValue()));
	return *this;
}
Exemple #3
0
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;
}
Exemple #4
0
CXTColorRef& CXTColorRef::operator/=(COLORREF cr)
{
	m_ColorRef = SafeRGB(
		getRValue() / GetRValue(cr),
		getGValue() / GetGValue(cr),
		getBValue() / GetBValue(cr));
	return *this;
}
Exemple #5
0
/*
* 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);
            }
        }
    }
}
Exemple #6
0
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;
}