void configureMiniCooperTriggerShape(TriggerShape *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); // s->initialState[0] = 1; float w = 360.0 / 121; float a = w / 2; s->addEvent720(a, T_SECONDARY, TV_FALL); a += w; for (int i = 0; i <= 22; i++) { a = addPair(s, a, w); } a += 3 * w; float firstGapAngle = a; /* may be */UNUSED(firstGapAngle); s->addEvent720(a, T_SECONDARY, TV_RISE); a += 3 * w; s->addEvent720(a, T_SECONDARY, TV_FALL); a += w; for (int i = 0; i < 36; i++) { a = addPair(s, a, w); } s->addEvent720(376, T_PRIMARY, TV_RISE); for (int i = 0; i < 21; i++) { a = addPair(s, a, w); } a += 3 * w; efiAssertVoid(CUSTOM_ERR_6584, absF(firstGapAngle + 360 - a) < 0.1, "shape constraint"); s->addEvent720(a, T_SECONDARY, TV_RISE); a += 3 * w; s->addEvent720(a, T_SECONDARY, TV_FALL); a += w; for (int i = 0; i < 33; i++) { a = addPair(s, a, w); } efiAssertVoid(CUSTOM_ERR_6585, absF(720 - w / 2 - a) < 0.1, "shape constraint"); s->addEvent720(a, T_SECONDARY, TV_RISE); s->addEvent720(720.0, T_PRIMARY, TV_FALL); /** * With just one tooth on camshaft synchronization is not needed */ s->isSynchronizationNeeded = false; s->useOnlyPrimaryForSync = true; }
void configureMiniCooperTriggerShape(TriggerShape *s) { s->reset(FOUR_STROKE_CAM_SENSOR, true); // s->initialState[0] = 1; float w = 360.0 / 121; float a = w / 2; s->addEvent(a, T_SECONDARY, TV_LOW); a += w; for (int i = 0; i <= 22; i++) { a = addPair(s, a, w); } a += 3 * w; float firstGapAngle = a; s->addEvent(a, T_SECONDARY, TV_HIGH); a += 3 * w; s->addEvent(a, T_SECONDARY, TV_LOW); a += w; for (int i = 0; i < 36; i++) { a = addPair(s, a, w); } s->addEvent(376, T_PRIMARY, TV_HIGH); for (int i = 0; i < 21; i++) { a = addPair(s, a, w); } a += 3 * w; efiAssertVoid(absF(firstGapAngle + 360 - a) < 0.1, "shape constraint"); s->addEvent(a, T_SECONDARY, TV_HIGH); a += 3 * w; s->addEvent(a, T_SECONDARY, TV_LOW); a += w; for (int i = 0; i < 33; i++) { a = addPair(s, a, w); } efiAssertVoid(absF(720 - w / 2 - a) < 0.1, "shape constraint"); s->addEvent(a, T_SECONDARY, TV_HIGH); s->addEvent(720.0, T_PRIMARY, TV_LOW); /** * With just one tooth on camshaft synchronization is not needed */ s->isSynchronizationNeeded = false; }
static void manualIdleController(int positionPercent) { // todo: this is not great that we have to write into configuration here boardConfiguration->manIdlePosition = positionPercent; if (isCranking()) { positionPercent += engineConfiguration->crankingIdleAdjustment; } percent_t cltCorrectedPosition = interpolate2d(engine->engineState.clt, config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE) / PERCENT_MULT * positionPercent; // let's put the value into the right range cltCorrectedPosition = maxF(cltCorrectedPosition, 0.01); cltCorrectedPosition = minF(cltCorrectedPosition, 99.9); if (engineConfiguration->debugMode == IDLE) { tsOutputChannels.debugFloatField1 = actualIdlePosition; } if (absF(cltCorrectedPosition - actualIdlePosition) < 1) { return; // value is pretty close, let's leave the poor valve alone } actualIdlePosition = cltCorrectedPosition; if (boardConfiguration->useStepperIdle) { iacMotor.setTargetPosition(cltCorrectedPosition / 100 * engineConfiguration->idleStepperTotalSteps); } else { setIdleValvePwm(cltCorrectedPosition); } }
void assertEqualsM(const char *msg, float expected, float actual) { if (cisnan(actual) && !cisnan(expected)) { printf("Unexpected: %s %.4f while expected %.4f\r\n", msg, actual, expected); exit(-1); } float delta = absF(actual - expected); if (delta > 0.0001) { printf("delta: %.7f\r\n", delta); printf("Unexpected: %s %.4f while expected %.4f\r\n", msg, actual, expected); exit(-1); } printf("Validated %s: %f\r\n", msg, expected); }
void assertEqualsM3(const char *prefix, const char *message, float expected, float actual, float EPS) { char msg[100]; strcpy(msg, prefix); strcat(msg, message); if (cisnan(actual) && !cisnan(expected)) { printf("Assert failed: %s %.4f while expected %.4f\r\n", msg, actual, expected); exit(-1); } float delta = absF(actual - expected); if (delta > EPS) { printf("delta: %.7f\r\n", delta); printf("Unexpected: %s %.4f while expected %.4f\r\n", msg, actual, expected); exit(-1); } printf("Validated %s: %f\r\n", msg, expected); }
bool isSameF(float v1, float v2) { return absF(v1 - v2) < EPS; }
int main(int argc, char** argv) { double konst_pres = 0.000000001; double x1, y1, r1; printf("Zadejte parametry kruznice #1:\n"); int result = scanf("%lf %lf %lf", &x1, &y1, &r1); if(result < 3 || r1 <= 0){ printf("Nespravny vstup.\n"); return (EXIT_FAILURE); } double x2, y2, r2; printf("Zadejte parametry kruznice #2:\n"); result = scanf("%lf %lf %lf", &x2, &y2, &r2); if(result < 3 || r2 <= 0){ printf("Nespravny vstup.\n"); return (EXIT_FAILURE); } /* x1=-48.2991131647392e-31; y1=-27.9464314187738e-31; r1=12.7254519795283e-31; x2=-25.2082785966678e-31; y2=-47.4113147848634e-31; r2=17.4750169821536e-31;*/ //double dist = sqrt(pow(absF(x2-x1),2)+pow(absF(y2-y1),2)); double dist = sqrt(absF(x2-x1)*absF(x2-x1)+absF(y2-y1)*absF(y2-y1)); //printf("Dist: %.32f\n",dist); //printf("R1-R2: %.32f\n",r1-r2); //printf("R1+R2: %.32f\n",r1+r2); if(dist < r1 + r2){ if(dist > absF(r1 - r2)) printf("Kruznice se protinaji, prekryv: %f\n",prekryv(r1,r2,dist)); else if(absF(dist - absF(r1 - r2)) < konst_pres) if((absF(x1 - x2)<konst_pres) && (absF(y1 - y2)<konst_pres) && (absF(r1 - r2)<konst_pres)) printf("Kruznice splyvaji, prekryv: %f\n",(M_PI*pow(r1,2))); else{ if(r1 > r2) printf("Vnitrni dotyk, kruznice #2 lezi uvnitr kruznice #1, prekryv: %f\n",(M_PI*pow(r2,2))); else printf("Vnitrni dotyk, kruznice #1 lezi uvnitr kruznice #2, prekryv: %f\n",(M_PI*pow(r1,2))); } else{ if(r1 > r2) printf("Kruznice #2 lezi uvnitr kruznice #1, prekryv: %f\n",(M_PI*pow(r2,2))); else printf("Kruznice #1 lezi uvnitr kruznice #2, prekryv: %f\n",(M_PI*pow(r1,2))); } }else if(absF(dist - (r1 + r2)) < konst_pres){ printf("Vnejsi dotyk, zadny prekryv.\n"); }else{ printf("Kruznice lezi vne sebe, zadny prekryv.\n"); } return (EXIT_SUCCESS); }
MonoChainDemo::MonoChainDemo(QWidget *parent) : DemoWidget(parent) { ui->labelMass->hide(); ui->labelMassValue->hide(); ui->horizontalSlider->hide(); ui->pushButtonMax->move(ui->dispCurve->x()+10,ui->dispCurve->y()+50); ui->labelOmega->move(ui->labelOmega->x()-3,ui->labelOmega->y()-1); ui->labelKValue->move(ui->dispCurve->x()+ui->dispCurve->width()/2+195,ui->dispCurve->y()+ui->dispCurve->height()-26); ui->labelW0->setPixmap(QPixmap(":/images/omega1.png")); ui->labelHuyeybl->hide(); ui->labelHuyeybl_2->hide(); ui->labelAcMaxFormula->hide(); ui->labelOptMaxFormula->hide(); ui->labelOptMinFormula->hide(); QObject::connect(ui->pushButtonMax, SIGNAL(clicked()), this, SLOT(rateChanged())); QObject::connect(ui->verticalSlider, SIGNAL(valueChanged(int)), this, SLOT(rateChanged())); QObject::connect(ui->verticalSlider, SIGNAL(sliderMoved(int)), this, SLOT(rateChanged())); QObject::connect(ui->verticalSlider, SIGNAL(sliderMoved(int)), this, SLOT(on_verticalSlider_sliderMoved(int))); //create chain chainSettings setting(18, 1500, currRate, 1650/10*17, 16); myChain = new Monochain(setting, *springGradient, *massGradient); backgroundChain = new Monochain(setting, *backgroundSpringGradient, *backgroundMassGradient); scene->addItem(backgroundChain->drawAt(0,0)); backgroundChain->pause(true); scene->addItem(myChain->drawAt(0,0)); pause(); connect(myChain->getTimer(), SIGNAL(timeout()), this, SLOT(time_slot())); ui->dispCurve->xAxis->setRange(0,M_PI); ui->dispCurve->yAxis->setRange(0,1.1); ui->dispCurve->yAxis->setAutoTickStep(0); ui->dispCurve->yAxis->setTickStep(1.0); for (int i = 0; i < 101; ++i) { k1[i] = i*M_PI/100; omega1[i] = sin(k1[i]/2); if (absF(omega1[i] - currRate/(2*sqrt(myChain->getCoefficient()/(*myChain)[0]->getMass()))) <= 0.5*ui->dispCurve->yAxis->range().upper/100) { kDot[0] = k1[i]; omegaDot[0] = omega1[i]; } } qDebug() << k1[100] << "k1"; //draw plot ui->dispCurve->graph(0)->setData(k1,omega1); QPen graphPen(blueDotPen); graphPen.setWidthF(2.0); graphPen.setColor(QColor(Qt::red)); ui->dispCurve->graph(0)->setPen(graphPen); ui->dispCurve->addGraph(); ui->dispCurve->graph(1)->setLineStyle(QCPGraph::lsNone); ui->dispCurve->graph(1)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle, 7)); ui->dispCurve->graph(1)->setPen(blueDotPen); qDebug() << kDot[0] << omegaDot[0]; ui->dispCurve->graph(1)->setData(kDot,omegaDot); ui->dispCurve->replot(); num = QString("<html><head/><body><p><span style=\" font-size:12pt;\"><font size = 5>ω = %1ω<sub>0</sub></font></span></p></body></html>").arg(currRate/(2*sqrt(myChain->getCoefficient()/(*myChain)[0]->getMass())),0,'gb',2); ui->labelOmega->setText(num); num = QString("<html><head/><body><p><span style=\" font-size:12pt;\"> = %1</span></p></body></html>").arg(kDot[0],0,'gb',2); ui->labelKValue->setText(num); w0 = 1; ui->dispCurve->yAxis->setAutoTickLabels(false); omegaTickLabel.clear(); omegaTickLabel << "" << "ωₒ"; ui->dispCurve->yAxis->setTickVectorLabels(omegaTickLabel); ui->labelChastota->move(ui->pushButtonMax->x(),ui->pushButtonMax->y()-ui->labelChastota->height()-20); ui->verticalSlider->setSliderPosition(currRate/ui->dispCurve->yAxis->range().upper*100.0/(2*sqrt(myChain->getCoefficient()/(*myChain)[0]->getMass()))); }
/* 수정내역 1. pows함수 math의 pow함수로 대체 pows제거 2. bool ON Player로 이동 3. if(!ON) Player로 이동 4. 이동조건문 Player로 이동 */ void CMainScene::update(float eTime){ ISceneNode::update(eTime); float temp, tX, tY, tvX, tvY; if(pow((a->pos.x-P->pos.x),2)+pow((a->pos.y-P->pos.y),2) <= pow( ((a->GetWidth()/2)+(P->GetWidth()/2)+60),2 )) { if((P->pos.x <= a->pos.x && P->pos.y <= a->pos.y) || (P->pos.x >= a->pos.x && P->pos.y >= a->pos.y)) { a->vY+=Sin(a->pos.x , P->pos.x, a->pos.y, P->pos.y) / 15; a->vX+=Cos(a->pos.x , P->pos.x, a->pos.y, P->pos.y) / 15; } else { a->vY+=-Sin(a->pos.x , P->pos.x, a->pos.y, P->pos.y) / 15; a->vX+=-Cos(a->pos.x , P->pos.x, a->pos.y, P->pos.y) / 15; } if(pow((a->pos.x - P->pos.x),2) + pow((a->pos.y - P->pos.y),2) <= pow( ((a->GetWidth() / 2) + (P->GetWidth() / 2)),2) ) { printf("a\n"); tX = a->pos.x; tY = a->pos.y; tvX = a->vX; tvY = a->vY; temp = tvX; tvX = -tvY; tvY = -temp; tX += 2*tvX; tY += 2*tvY; if( pow((tX - P->pos.x), 2)+pow((tY - P->pos.y), 2) <= pow( ((a->GetWidth() / 2) + (P->GetWidth() / 2)),2 ) || plma(tX,a->vX,tY,a->vY) ) { printf("s\n"); tX = a->pos.x; tY = a->pos.y; tvX = a->vX; tvY = a->vY; temp = tvX; tvX = -tvY; tvY = temp; tX += 2*tvX; tY += 2*tvY; if( pow((tX - P->pos.x),2) + pow((tY - P->pos.y),2) <= pow( ((a->GetWidth() / 2) + (P->GetWidth() / 2)),2 ) || plma(tX,a->vX,tY,a->vY) ) { printf("d\n"); tX = a->pos.x; tY = a->pos.y; tvX = a->vX; tvY = a->vY; temp = tvX; a->vX = tvY; a->vY = -temp; tX += 2*tvX; tY += 2*tvY; if( pow((tX - P->pos.x),2) + pow((tY - P->pos.y),2) <= pow( ((a->GetWidth() / 2) + (P->GetWidth() / 2)),2 ) || plma(tX,a->vX,tY,a->vY) ) { printf("f\n"); tX = a->pos.x; tY = a->pos.y; tvX = a->vX; tvY = a->vY; temp = tvX; a->vX = tvY; a->vY = temp; a->vX = tvX; a->vY = tvY; } else { a->vX = tvX; a->vY = tvY; } } else { a->vX = tvX; a->vY = tvY; } } else { a->vX = tvX; a->vY = tvY; } a->vX-=a->vX/(TryLength(a->pos.x , P->pos.x, a->pos.y, P->pos.y)*0.85+((a->vX/(TryLength(a->pos.x , P->pos.x, a->pos.y, P->pos.y))/100000000))); a->vY-=a->vY/(TryLength(a->pos.x , P->pos.x, a->pos.y, P->pos.y)*0.85+((a->vY/(TryLength(a->pos.x , P->pos.x, a->pos.y, P->pos.y))/100000000))); } else { a->vX-=a->vX/(TryLength(a->pos.x , P->pos.x, a->pos.y, P->pos.y)*0.85+((a->vX/(TryLength(a->pos.x , P->pos.x, a->pos.y, P->pos.y))/100000000))); a->vY-=a->vY/(TryLength(a->pos.x , P->pos.x, a->pos.y, P->pos.y)*0.85+((a->vY/(TryLength(a->pos.x , P->pos.x, a->pos.y, P->pos.y))/100000000))); if((absF(a->vX) <= 0.4 && absF(a->vY) <= 0.4) && pow((a->pos.x - P->pos.x),2) + pow((a->pos.y - P->pos.y),2) <= pow( ((a->GetWidth() / 2) + (P->GetWidth() / 2)+0.5),2 )) { a->vX = 0; a->vY = 0; } } } }