@BlinCT

Нужно ли переводить из градусов в радианы для правильного направления стрелки?

Всем привет.
Есть тахометр,
64e65f8755094545893563.png

Значение ула начала там где -200 это 120и развертка 310(там где значение 200).
И вот стрелке задано значение -30 но как видите стрелка показывает рядом с -100. Я расчитываю для значений стрелки от 120 градусов. Но предполагаю что я не правильные значения задаю для функции.
Вот так выглядит расчеты и методы куда я передаю.

angleValueTransformer.setAngleRangeDegrees(ValueRange<double>(120, 310));
    angleValueTransformer.setValueRange(ValueRange<double>(m_ValueRange.m_Min, m_ValueRange.m_Max));
    angleValueTransformer.setCurrentValue(m_NeedleValue);

Вторая строка это от минимального значения до максимального. По сути после этого я должен получить правильный угол, но не получаю. Подскажите пожалуйста, может в метод setAngleRangeDegrees я должен не в таком виде задавать значения. Это же я передаю углы.
Если важно то 0 точка это начало справа.
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Да, нужно перевести скорость в радианы. Так, чтобы 0 было pi/2 радиан (направление вверх), а -200 - это 4/3pi. И радианы при увеличении скорости уменьшаются.

Поскольку все линейно, то фрмула такая: alpha = pi/2 - speed*5/1200.0

Что такое angleValueTransformer я не знаю, но если ему задаются отрезки углов и значений, которые оно линейно преобразует в друг друга, то углы должны быть от 240 до -60, что соответствует скоростям от -200 до 200. Ну, или углы от 4/3pi до -pi/3, если вы значение сразу в синусы/косинусы передаете, не переводя из градусов в радианы.

И, кстати, развертка будет не 310, а 300 градусов от -200 до 200. Иначе скорость 0 не будет вертикально вверх.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы