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