Пример #1
0
//calculate all points/vertices in the bezier patch
Point BezierPatch::Calculate(float u,float v) {

	Point temp[4];	
	// calculate each point on our final v curve
	temp[0] = CalculateU(u,0);
	temp[1] = CalculateU(u,1);
	temp[2] = CalculateU(u,2);
	temp[3] = CalculateU(u,3);

	// final point
	return CalculateV(v,temp);
}
Пример #2
0
void ConcentrateInit(int k){

	double **dm = malloc(sizeof(double*)* GetDataSize());	
	int i;
	for (i = 0; i < GetDataSize(); ++i)
		dm[i] = malloc(sizeof(double)* GetDataSize());
	int j;
	for (i = 0; i < GetDataSize(); ++i)
		for (j = i; j < GetDataSize(); ++j){
			value v1, v2;
			GetIthData(i, &v1);
			GetIthData(j, &v2);
			dm[i][j] = data.distance(&v1, &v2);
			dm[j][i] = dm[i][j];
		}
	double *v = malloc(sizeof(double)* GetDataSize());
	int *vPos = malloc(sizeof(int)* GetDataSize());

	double *lineSum = malloc(sizeof(double)* GetDataSize());
	for (i = 0; i < GetDataSize(); ++i){
		lineSum[i] = 0;
		for (j = 0; j < GetDataSize(); ++j)
			lineSum[i] += dm[i][j];
	}
	for (i = 0; i < GetDataSize(); ++i)
		vPos[i]=i;
	for (i = 0; i < GetDataSize(); ++i)
		v[i] = CalculateV(dm, lineSum, i);
	QuickSortDouble(v,vPos,GetDataSize());
	QuickSortInt(vPos,k);
	for (i = k-1; i >= 0; --i)
		AddCentroid(vPos[i]);
	for (i = 0; i < GetDataSize(); ++i)
	{
		free(dm[i]);
	}
	free(dm);
	free(v);
	free(vPos);
	free(lineSum);
}
Пример #3
0
int main(void){
	
	//!< Temperature Reference resistors. Value defined in config.h
	RefRes[0]=RES_REF1;
	RefRes[1]=RES_REF2;
	RefRes[2]=RES_REF3;
	RefRes[3]=RES_REF4;

	//!< Sets the connected Cells. Value defined in config.h
	ActiveCells[0] = CELLSIC1;
	ActiveCells[1] = CELLSIC2;
	ActiveCells[2] = CELLSIC3;
	ActiveCells[3] = CELLSIC4;

	CCInit();				// Coulombcounter Init
	SPI_MasterInit();		// SPI Init
	TimerInit(DELAY_TIM_FREQUENCY);			// Timer prescaler Init
	CLK_init(CHIP_CLK); // Start Frequency output for ATA6870(kHz)
	CAN_init(); //Setup CAN bus
	
	while(OpenCellcheck()){ //Checks for open Clamps
		_delay_ms(50);
	}

//	sei();	// enable interrupt

	while(1){
		if(ATA6870_state){
			PD_N_ON();
		}
		else{
			PD_N_OFF();
		}


		//----------------------------- Vacq 1---------------------------------------//
		ATA6870_SPI_COM(0x01,0x0B,0x02);//wakeup irq surpressed
		_delay_ms(20);
		
		ActiveTemp=0x00;				//Set measured Temperature Channel
		ATA6870_SPI_COM(0x01,0x05,0x03);//Vacq Temp Channel 1
		_delay_ms(20);
		
		ATA6870_SPI_COM(0x01,0x0C,0x00);//Read Status Reg
		_delay_ms(20);
		
		operation=0x03;
		ATA6870_SPI_COM(0x01,0xFE,0x00);//Burstread

		_delay_ms(20);

		ReadNTC();
		//------------------------------ Offset acq 1---------------------------------//	
		
		
		ATA6870_SPI_COM(0x01,0x05,0x01);//Offset acq
		_delay_ms(20);
		
		ATA6870_SPI_COM(0x01,0x0C,0x00);//Read Status Reg
		_delay_ms(20);
		
		operation=0x01;
		ATA6870_SPI_COM(0x01,0xFE,0x00);//Burstread
		_delay_ms(20);
		
		//--------------------------------- Check 1------------------------------------//
	
		CalculateV(0x01);
		//----------------------------- NTC2 Chip1---------------------------------------//
		
		ActiveTemp=0x01;				//Set measured Temperature Channel
		ATA6870_SPI_COM(0x01,0x05,0x0B);//Vacq Temp Channel 2
		_delay_ms(20);
		
		ATA6870_SPI_COM(0x01,0x0C,0x00);//Read Status Reg
		_delay_ms(20);
		
		operation=0x03;
		ATA6870_SPI_COM(0x01,0xFE,0x00);//Burstread

		_delay_ms(20);

		ReadNTC();
		
		//--------------------------------- Vacq 2--------------------------------------//

		ATA6870_SPI_COM(0x02,0x0B,0x02);//wakeup irq surpressed
		_delay_ms(20);
		
		ATA6870_SPI_COM(0x02,0x05,0x03);//Vacq Temp Channel 1
		_delay_ms(20);
		
		ATA6870_SPI_COM(0x02,0x0C,0x00);//Read Status Reg
		_delay_ms(20);
		
		operation=0x03;
		ATA6870_SPI_COM(0x02,0xFE,0x00);//Burstread
		_delay_ms(20);
		
		//------------------------------ Offset acq 2----------------------------------//	
	
		
		ATA6870_SPI_COM(0x02,0x05,0x01);//Offset acq
		_delay_ms(20);
		
		ATA6870_SPI_COM(0x02,0x0C,0x00);//Read Status Reg
		_delay_ms(20);
		
		operation=0x01;
		ATA6870_SPI_COM(0x02,0xFE,0x00);//Burstread
		_delay_ms(20);
		
		//------------------------------------ Check 2----------------------------------//
		
		CalculateV(0x02);
		
		if(Undervoltage(25000,0x01)||Overvoltage(42000,0x01)||Undervoltage(25000,0x02)||Overvoltage(42000,0x02)||Temp[0]<=(T_LOWERTRESHOLD)||Temp[0]>=T_UPPERTHRESHOLD||Temp[1]<=(T_LOWERTRESHOLD)||Temp[1]>=T_UPPERTHRESHOLD){
			Configure_Fet(0x00);
		}
		else{
			Configure_Fet(0x03);
		}
		
	}
}