• Как найти точки для обьекта и нарисовать его?

    @BlinCT Автор вопроса
    Wataru, добрый день. Спасибо за вчерашнйи пример, почти получилось.
    Вот с таким поиском точек
    // starting point, arrow top
        auto firstPoint = calculatePoint((centralCircleDiameter / 2.0 + m_indentFromCircleForNeedle) + m_NeedleHeight.value(), m_AngleNeedle, 0);
        points.append(firstPoint);
    
        auto secondPoint = calculatePoint(centralCircleDiameter / 2.0 - 5, m_AngleNeedle, -m_NeedleWidth.value() / 2.0);
        points.append(secondPoint);
    
        auto thirdPoint = calculatePoint(centralCircleDiameter / 2.0 + m_indentFromCircleForNeedle, m_AngleNeedle, -(m_NeedleWidth.value() / 2.0));
        points.append(thirdPoint);
    
        auto firthPoint = calculatePoint(centralCircleDiameter / 2.0 + m_indentFromCircleForNeedle, m_AngleNeedle, m_NeedleWidth.value() / 2.0);
        points.append(firthPoint);
    
        auto fifthPoint = calculatePoint(centralCircleDiameter / 2.0 - 5, m_AngleNeedle, m_NeedleWidth.value() / 2.0);
        points.append(fifthPoint);
    
        // last point, arrow top.
        auto sixthPoint = calculatePoint((centralCircleDiameter / 2.0 + m_indentFromCircleForNeedle) + m_NeedleHeight.value(), m_AngleNeedle, 0);
        points.append(sixthPoint);


    у меня выходит вот такая стрелка
    64bfa1217a48f773812276.png
    как видите я беру такие параметры как диаметр центрального, потмо отступ для промежутка между ним и стрелкой, и высоту необходимую. Нижние 2 точки поулчаются как надо, а вот 2 верхние перед центральной, что-то ен очень. Может надо к ним еще процентр брать от длинны стрелки?
    Написано
  • Как найти точки для обьекта и нарисовать его?

    @BlinCT Автор вопроса
    не могли бы вы абстрактным С++ кодом с названиями точек и векторов описать? Вроде все понятно что описали вы, но чет путаница с порядком у меня...
    То есть с первой точкой что на конце стрелки я понял, это как раз диаметр внешнего круга плюс радиус умноженый на косинус и синус угла. Это я получаю.
    //первая точка
    calculatePoint(mainCircleDiameter / 2, m_AngleNeedle); // вызов функции та что ниже
    QPointF Needle::calculatePoint(const double& radius, const double& angle)
    {
        QPointF pointF;
        pointF.setX(m_MainCircleDiameter.value() / 2 + radius * qCos((M_PI * angle) / 180.0));
        pointF.setY(m_MainCircleDiameter.value() / 2 + radius * qSin((M_PI * angle) / 180.0));
        return pointF;
    }

    Думаю что считаю я правильно.
    Но вот другие точки
    Написано
  • Как найти точки для обьекта и нарисовать его?

    @BlinCT Автор вопроса
    Снова спасибо за ответ вам.
    Пара уточнений, я могу получить угол, то есть через него проходит центр стрелки как вы написали выше, а вот потом нахождение точек двух нижних вы написали что он известен. Но я знаю только ширину и длинну самой стрелки но я не знаю еще точки эти.
    Ниже кусок кода, поправте если я не правильно начинаю высчиытвать 3 и 4 точки(те что нижние и ближе к центральному кругу)

    angleValueTransformer.setCurrentValue(data.m_CurrentValue);
    
    // находим угол для центра стрелки
        m_AngleNeedle = angleValueTransformer.calculateCurrentAngle();
    
        auto firstPoint = calculatePoint(mainCircleDiameter / 2, m_AngleNeedle);
    
        QPointF pointF;
        pointF.setX(m_MainCircleDiameter.value() / 2 + mainCircleDiameter / 2 * qCos((M_PI * m_AngleNeedle(тут нужно значение ширины стрелки на 2)) / 180.0));
        pointF.setY(m_MainCircleDiameter.value() / 2 + mainCircleDiameter / 2 * qSin((M_PI * m_AngleNeedle(тут нужно значение ширины стрелки на 2)) / 180.0));
    Написано
  • Как найти точки на дуге?

    @BlinCT Автор вопроса
    Wataru, спасибо за советы и помощь. Получилось все сделать почти так как задумано). с поиском формул а еще и понять было не просто до того как вы обьяснили.
    Написано
  • Как найти точки на дуге?

    @BlinCT Автор вопроса
    Wataru, 64b4568f2db64828619516.png
    вот тут на концах. Да это такие же тикмарки, но к ним нету ни значений ни углов. Но известно что они на концах.
    Написано
  • Как найти точки на дуге?

    @BlinCT Автор вопроса
    Wataru, Если вы посмотрите на картинку в начале то там видно в начале и в конце тикмарки. Для них у меня нету ничего кроме длинны и ширины. И мне надо их поместить на данные позиции дуги. Вопрос какие данные для вычисления нужны будут?
    Написано
  • Как найти точки на дуге?

    @BlinCT Автор вопроса
    Wataru, Да, вы были правы, я по ошибки брал центр окружности и центр самого окна где распологается окружность. Остается вопрос про 2 тикмарка что в самом начале и в самом конце дуги. Дл я них имеются данные только ширины и высоты, и больше ничего. Если я правильно понимаю то мне чтоыб вычислить позицию для них надо иметь данные конца и начала дуги?
    Написано
  • Как найти точки на дуге?

    @BlinCT Автор вопроса
    Wataru, В общем по сути получилось то что я и искал.
    64b282781d2fd180451374.png

    Единственное я наверное не все правильно считаю, по этому они как то не по кругу распологаются.
    Но с этим сейчас работаю.
    И такой вопрос еще, если глянуть на картинку с самим обьектом, то в начале и в конце там есть тоже так сказать начальный и конечный тикмарк. И для него уже нету угла. Знаю что они в начале и в конце дуги. Какие параметры мне надо найти или вычеслить?
    Написано
  • Как найти точки на дуге?

    @BlinCT Автор вопроса
    Wataru, Понял, спасибо. Сейча займусь и этим.
    Единственное не пойму почему так странно сдвинута синяя (хз как это назвать) фигура.
    Написано
  • Как найти точки на дуге?

    @BlinCT Автор вопроса
    Wataru, Похоже что-то у меня получилось, но это что-то странное)
    64b014508e591061897864.png

    И как я понимаю у меня высчитаны точки по окружности, но не учитывается отстук ширины дуги? И надо же еще вторую точку? Как можно сдвинуть от начальнйо точки на извествую длинную тикмарка?
    Написано
  • Как найти точки на дуге?

    @BlinCT Автор вопроса
    Wataru, По вашему совету подправил те неточности что у меня были.
    qDebug() << "radius" << m_GaugeWidthHeight.value() / 2;
            auto radius = m_GaugeWidthHeight.value() / 2;
            auto xPoint = m_GaugeWidthHeight.value() + radius * qCos((M_PI * angle) / m_GaugeWidthHeight.value());
            auto yPoint = m_GaugeWidthHeight.value() + radius * qSin((M_PI * angle) / m_GaugeWidthHeight.value());
            tmpList.append({xPoint, yPoint});
            qDebug() << "points" << m_GaugeWidthHeight.value() << angle << radius << xPoint << yPoint;


    А вот вывод все равно какой то странный
    radius 242.5
    points 485 75 242.5 699.442 598.23
    radius 242.5
    points 485 112.5 242.5 665.912 646.484
    radius 242.5
    points 485 150 242.5 621.76 685.258
    Написано
  • Как найти точки на дуге?

    @BlinCT Автор вопроса
    Wataru, так, вы дали мне пищу для размышления.
    Но отвечаю на вопрос, m_GaugeWidthHeight это переменная в которой я сохраняю что из(ширина или высота) наименьшее. Это делаю чтобы пересчитывать правильно все обьекты при изменении.
    m_height и m_width это по отдельности высота и ширина данной окружности.

    И вот описание к функции Returns the sine of the angle v in radians.
    Написано
  • Как найти точки на дуге?

    @BlinCT Автор вопроса
    Полноценный код кинуть очень не просто, но вот часть его.
    for (const auto &angle : initTickMark(data))
        {
            qDebug() << "size" << m_GaugeWidthHeight.value() / 2;
            auto radius = m_GaugeWidthHeight.value() / 2;
            auto xPoint = m_Width + radius * qCos(angle);
            auto yPoint = m_Height + radius * qSin(angle);
            tmpList.append({xPoint, yPoint});
            qDebug() << "points" << m_GaugeWidthHeight.value() << angle << radius << xPoint << yPoint;
        }


    Это for для вычесленого угла каждого тикмарка
    И вот сам вывод в консоли для нескольких тикмарков
    size 242.5
    points 485 75 242.5 748.525 390.963
    size 242.5
    points 485 112.5 242.5 725.508 348.608
    size 242.5
    points 485 150 242.5 694.568 311.642
    Написано
  • Как найти точки на дуге?

    @BlinCT Автор вопроса
    Wataru, тогда я не понимаю.
    При таких расчетах я получаю странные точки размер - 485, угол - 150, точка x - 864.137, точка y - 138.285
    Это где то в не окружности получается
    Написано
  • Как найти точки на дуге?

    @BlinCT Автор вопроса
    Спасибо за ответ.
    Смотрите, предположим размер окружности(в моем случаи дуга) равна 485 высота на 485 ширина, угол для одного из тикмарков 150 градусов.
    Получается что считать надо так (ширина на 2 это центр) + радиус умноженый на сосинус угла данного тикмарка. Я правильно понимаю?
    Или я не правильно понимаю расчеты, так как с этими данными у меня пустая область
    Написано
  • Как найти точки на дуге?

    @BlinCT Автор вопроса
    Lynn «Кофеман», не удевляйтесь так, я правда очень далек от геометрии. Могли бы вы расписать по формуле? И ведь еще важно учитывать ширину дуги, а так как она динамически будет менятся то это тем более важно.
    Спасибо
    Написано