QRect expandRect(const Point2D &p, QRect rect)
{
    auto expandMax = [](float outPoint, float expandedSide){return outPoint > expandedSide ? outPoint : expandedSide;};
    auto expandMin = [](float outPoint, float expandedSide){return outPoint < expandedSide ? outPoint : expandedSide;};
    rect.setRight(expandMax(p.X(), rect.right()));
    rect.setLeft(expandMin(p.X(), rect.left()));

    rect.setBottom(expandMax(p.Y(), rect.bottom()));
    rect.setTop(expandMin(p.Y(), rect.top()));
    return rect;
}
    void setNosePos(Point2D _nosePos) {
        working = true;

        headPoints[0] = _nosePos;
        Point2D tmp(_nosePos.X() - W_HEAD_SIZE, _nosePos.Y() - W_HEAD_SIZE);
        headPoints[1] = tmp;
        tmp.set(_nosePos.X() - W_HEAD_SIZE * 2, _nosePos.Y());
        headPoints[2] = tmp;
        tmp.set(_nosePos.X() - W_HEAD_SIZE, _nosePos.Y() + W_HEAD_SIZE);
        headPoints[3] = tmp;

        generateTailPoints();

        working = false;
    }
Point2D CFlightVisualiser::getScreenPoint(const Point3D& p, const QRect& fieldLimit)
{
    Point2D plain = getPlainCords(p);
    float y = (-fieldLimit.left() + plain.X()) / (fieldLimit.right() - fieldLimit.left());
    float z = (-fieldLimit.bottom() + plain.Y()) / (fieldLimit.top() - fieldLimit.bottom());

    y *= this->width();
    z *= this->height();

    return Point2D(y, /*this->height() -*/ z);
}
    void generateTailPoints() {

        float const multipl = 16 * pow(W_TAIL_PERIODS_NUM, 2);
        float const ampl = sqrt((pow(W_TAIL_FULL_LENGTH, 2) + multipl * pow(W_TAIL_FULL_AMPL, 2)
                                 - pow(length, 2)) / multipl);

        int c = 0;
        Point2D nosePos = headPoints[0];
        for (float i = 0.0; i < length; i += W_TAIL_RESOLUTION) {

            float x = i;
            float y = nosePos.Y() - ampl * sin(2 * W_TAIL_PERIODS_NUM * M_PI / length * x);

            if (toRight > 0) { //balra megy
                x = nosePos.X() - 2 * W_HEAD_SIZE - x;
            } else {
                x = nosePos.X() + x;
            }

            tailPoints[c++] = Point2D(x, y);
        }
    }
Beispiel #5
0
int main() {
    Point2D temp;
    Point2DCentroid centroid;

    for(int i = 0; i < 1; i++){
        temp = Point2D(randRange(0.0f, 1.0f), randRange(-1.0f, 1.0f));
        cout << temp.X() << " " << temp.Y() << endl;
        centroid.add(temp);
    }

    auto center = centroid.get();
    cout << center.X() << " " << center.Y() << endl;

    Point2D A(3, 5), B(1, 7), C;
    float x = 7.0;
    C = A + B; // points are vector
    C -= A;
    C *= x;
    cout << C.X() << " " << C.Y() << endl;

    return 0;
}
void CFlightVisualiser::drawCords(QPainter& painter, const QRect& fieldLimit)
{
    Point3D zero3D(0, 0, 0), x3D(100, 0, 0), y3D(0, 100, 0), z3D(0, 0, 100);
    Point2D zeroPoint = getScreenPoint(zero3D, fieldLimit);
    Point2D x = getScreenPoint(x3D, fieldLimit);
    Point2D y = getScreenPoint(y3D, fieldLimit);
    Point2D z = getScreenPoint(z3D, fieldLimit);
    painter.setPen(QPen(QColor(), 1));

    painter.drawLine(QPointF(zeroPoint), QPointF(x));
    painter.drawText(QRectF(QPointF(x), QPointF(x.X() + 20, x.Y() + 20)), "X");

    painter.drawLine(QPointF(zeroPoint), QPointF(y));
    painter.drawText(QRectF(QPointF(y), QPointF(y.X() + 20, y.Y() + 20)), "Y");

    painter.drawLine(QPointF(zeroPoint), QPointF(z));
    painter.drawText(QRectF(QPointF(z), QPointF(z.X() + 20, z.Y() + 20)), "Z");

    painter.setPen(Qt::SolidLine);


    const int distance = 1;
    std::vector<QPoint> frameVec = {QPoint(distance, distance), QPoint(distance, this->height() - distance),
                                    QPoint(distance, this->height() - distance), QPoint(this->width() - distance, this->height() - distance),
                                    QPoint(this->width() - distance, this->height() - distance), QPoint(this->width() - distance, distance),
                                    QPoint(this->width() - distance, distance), QPoint(distance, distance)};
    QVector<QPoint> frameCords;
    for(const auto& p: frameVec)
    {
        frameCords.push_back(p);
    }

    painter.drawLines(frameCords);

    Rectangle3D max3dRect = getMaximumRect();

    float xPosStart = max3dRect.minX;
    float yPosStart = max3dRect.minY;

    float xPosEnd = max3dRect.maxX;
    float yPosEnd = max3dRect.maxY;



    float xPos = xPosStart;
    float yPos = yPosStart;
    for(int i = 0; i < 11; ++i)
    {
        Point2D curXMinYWebPoint = getScreenPoint(Point3D(xPos, yPosStart, 0), fieldLimit);
        Point2D curXMaxYWebPoint = getScreenPoint(Point3D(xPos, yPosEnd, 0), fieldLimit);

        Point2D minXCurYWebPoint = getScreenPoint(Point3D(xPosStart, yPos, 0), fieldLimit);
        Point2D maxXCurYWebPoint = getScreenPoint(Point3D(xPosEnd, yPos, 0), fieldLimit);


        painter.drawLine(QPointF(curXMinYWebPoint.X(), curXMinYWebPoint.Y()), QPointF(curXMaxYWebPoint.X(), curXMaxYWebPoint.Y())); //x
        painter.drawLine(QPointF(minXCurYWebPoint.X(), minXCurYWebPoint.Y()), QPointF(maxXCurYWebPoint.X(), maxXCurYWebPoint.Y()));
        xPos += (xPosEnd - xPosStart) / 10;
        yPos += (yPosEnd - yPosStart) / 10;
    }
}
Beispiel #7
0
 bool inRange(const Point2D& point) const {
   if (this->data.empty())
     return false;
   return point.X()<this->width() && point.Y()<this->height();
 }