void Head::sweepWithoutCompass() { uint8_t pos = 0; for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees { // in steps of 1 degree pointTo(pos); // tell servo to go to position in variable 'pos' } for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees { pointTo(pos); // tell servo to go to position in variable 'pos' } }
void GetMargin::UnitChange(const QString unite) { unitas = unite; setter.setValue("CurrentRunningUnit",unitas); doubleSpinBox->setSuffix(QString(" %1.").arg(unitas)); doubleSpinBox_2->setSuffix(QString(" %1.").arg(unitas)); doubleSpinBox_3->setSuffix(QString(" %1.").arg(unitas)); doubleSpinBox_4->setSuffix(QString(" %1.").arg(unitas)); doubleSpinBox_4->setValue(pointTo(a1,unitas)); /* top */ doubleSpinBox_2->setValue(pointTo(a2,unitas)); /* right*/ doubleSpinBox->setValue(pointTo(a3,unitas)); /* bottom */ doubleSpinBox_3->setValue(pointTo(a4,unitas)); /* left */ }
void RobotControl::turn(int angle){ int originalAngle=compassRead(); int target=originalAngle+angle; pointTo(target); /*uint8_t speed=80; target=target%360; if(target<0){ target+=360; } int direction=angle; while(1){ if(direction>0){ motorsWrite(speed,speed);//right delay(10); }else{ motorsWrite(-speed,-speed);//left delay(10); } int currentAngle=compassRead(); int diff=target-currentAngle; if(diff<-180) diff += 360; else if(diff> 180) diff -= 360; direction=-diff; if(abs(diff)<5){ motorsWrite(0,0); return; } }*/ }
void MaxFlowVisualizer::drawEdge(const Edge &edge, QPainter &painter) const { QPen pen; pen.setWidth(3); // Ребро, которое считается "допустимым" по алгоритму, выделяем черным. if (relabelToFrontAlgo.getVertexHeight(edge.getFirstVertexIndex()) == relabelToFrontAlgo.getVertexHeight(edge.getSecondVertexIndex()) + 1) { pen.setColor(Qt::black); } else { pen.setColor(Qt::gray); } if (edge.getFlow() != 0) { pen.setColor(Qt::darkBlue); } // Если в последнем действии алгоритма произошло проталкивание по этому ребру, // то выделим его красным. if (lastAlgoAction.getType() == AlgoAction::ACTION_PUSH && lastAlgoAction.getEdgeInfo() == edge) { pen.setColor(Qt::red); } painter.setPen(pen); QPoint pointFrom(verteciesList[edge.getFirstVertexIndex()].getCenterCoordX(), verteciesList[edge.getFirstVertexIndex()].getCenterCoordY()); QPoint pointTo(verteciesList[edge.getSecondVertexIndex()].getCenterCoordX(), verteciesList[edge.getSecondVertexIndex()].getCenterCoordY()); double length = sqrt(pow(pointFrom.x() - pointTo.x(), 2) + pow(pointFrom.y() - pointTo.y(), 2)); long vertexRaduis = verteciesList[edge.getSecondVertexIndex()].getRadius(); QPoint offsetVector((pointFrom.x() - pointTo.x()) * vertexRaduis / length, (pointFrom.y() - pointTo.y()) * vertexRaduis / length); QPoint arrow((pointFrom.x() - pointTo.x()) * 20 / length, (pointFrom.y() - pointTo.y()) * 20 / length); // Рисование стрелки (самих маленьких боковых линий). // Перенесем систему координат в точку конца ребра (ориенированного). // Возьмем маленький отрезок ребра, и нарисуем его, повернув при этом систуму координат // на +30 и -30 градусов соответственно относительно исходного ребра. // Получилась стрелка -> // После этого восстановим систему координат. painter.setPen(pen); painter.drawLine(pointFrom, pointTo); painter.translate(pointTo.x(), pointTo.y()); // Еще нужно отступить от конца ребра на радиус вершины // (т.к. ребро идет от центра к центру). painter.translate(offsetVector.x(), offsetVector.y()); painter.rotate(30); painter.drawLine(QPoint(0, 0), arrow); painter.rotate(-60); painter.drawLine(QPoint(0, 0), arrow); painter.resetTransform(); // Выводим информацию о ребре (flow | capacity) по середине ребра. if (state == ALGORITHM_RUN || (state == ALGORITHM_TERM && edge.flow != 0)) { QPen penForEdgeInfo; penForEdgeInfo.setColor(Qt::darkGreen); painter.setPen(penForEdgeInfo); std::string edgeInfo = "(" + std::to_string(edge.getFlow()) + " | " + std::to_string(edge.getCapacity()) + ")"; painter.drawText(pointFrom.x() + (pointTo.x() - pointFrom.x()) / 2, pointFrom.y() + (pointTo.y() - pointFrom.y()) / 2, edgeInfo.c_str()); } }
void Head::calibrate() { Serial.println("Calibrating"); if (compass == 0) { return; } int initialHeading = compass->getHeading(); if (initialHeading == -1) { return; } uint8_t pos = 0; Serial.print("Initial heading :"); Serial.println(initialHeading); Serial.println("Look left"); for(pos = HEADING_FULL_RIGHT; pos < HEADING_FULL_LEFT; pos += 1) { // in steps of 1 degree pointTo(pos); // tell servo to go to position in variable 'pos' Serial.print("Pos :"); Serial.print(pos); Serial.print(", Heading :"); Serial.println(compass->getAvgHeading()); } Serial.print("End look left, wait. Current heading :"); Serial.println(compass->getAvgHeading()); Serial.println("Look right"); for(pos = HEADING_FULL_LEFT; pos>HEADING_FULL_RIGHT; pos-=1) { pointTo(pos); // tell servo to go to position in variable 'pos' Serial.print("Pos :"); Serial.print(pos); Serial.print(", Heading :"); Serial.println(compass->getAvgHeading()); } Serial.print("End look right. Current heading :"); Serial.println(compass->getAvgHeading()); pointTo(HEADING_CENTERED); Serial.println("End of calibration"); }
int PanelPageSize::FillFopAttributes(QDomElement e) { const qreal TopMargin = pointTo(P_margin.x(),"mm"); const qreal RightMargin = pointTo(P_margin.y(),"mm"); const qreal BottomMargin = pointTo(P_margin.width(),"mm"); const qreal LeftMargin = pointTo(P_margin.height(),"mm"); e.setAttribute("margin-top",QString("%1mm").arg(TopMargin)); e.setAttribute("margin-bottom",QString("%1mm").arg(BottomMargin)); e.setAttribute("margin-left",QString("%1mm").arg(LeftMargin)); e.setAttribute("margin-right",QString("%1mm").arg(RightMargin)); e.setAttribute("page-width",QString("%1mm").arg(pointTo(G_regt.width(),"mm"))); e.setAttribute("page-height",QString("%1mm").arg(pointTo(G_regt.height(),"mm"))); return 1; }
void ObjectPointer::load(InputStream& stream) { pointTo(stream.readUint32()); }
qreal toUnit(qreal unit , const QString unita) { return pointTo(unit,unita); }