каким образом перевести в arduino тангенс в градусы????

Protez1999
Offline
Зарегистрирован: 08.07.2012

Пока идея только сделать значения для вснх 90 градосов через if. Может есть какой нибудь более рациональный способ для вычисления градусов с тангенса

Protez1999
Offline
Зарегистрирован: 08.07.2012

http://uchim.org/matematika/tablica-bradisa придется через if вносить все значения с таблицы. В значениях никакой системности не увидел.Подскажите если есть другое решение моей задачи. есть тангенс (х)=(это значение есть)  хочу получать градусы.

leshak
Offline
Зарегистрирован: 29.09.2011
leshak
Offline
Зарегистрирован: 29.09.2011
zhuki
Offline
Зарегистрирован: 12.10.2011

Protez1999 пишет:

Подскажите если есть другое решение моей задачи. есть тангенс (х)=(это значение есть)  хочу получать градусы.

В школе это называлось арктангенс.

Protez1999
Offline
Зарегистрирован: 08.07.2012

все ссылки смотрел до этого, но всеравно не догнал.

 tg(A)=2.5   как с этих 2.5 получить градус. если можно пример.

мне неважно с чего с тангенса котангенса синуса косинуса  главное получить на выходе градусы

Радиан у меня нет есть тока значение tg(A)=2.5 кроме таблицы брадиса ниче не могу придумать. Все примеры просят радианы.

Protez1999
Offline
Зарегистрирован: 08.07.2012

zhuki пишет:

Protez1999 пишет:

Подскажите если есть другое решение моей задачи. есть тангенс (х)=(это значение есть)  хочу получать градусы.

В школе это называлось арктангенс.

и что дальше??? я не спрашиваю что и как называлось я задал конкретный вопрос.

leshak
Offline
Зарегистрирован: 29.09.2011

> но всеравно не догнал.

Тут скорее проблема в arduino/c++, а в теме "тригонометрические функции".

У вас есть две задачи.

1. Воспользоватся функцией обратной тангенсу. Вот та самая, которую вам назвали, как она называется в школе. Это арктангенс. В C++ она имеет имя atan  (есть во второй моей ссылке). Она и вернет вам искомый угол.
2. Так как все тригнометрические функции в C++ работают в радианах, то угол вы получите в радианах. Осталась перевести радианы в градусы. Если школьная геометрия подзабылось, то можно просто вспоинмть, что полный круг, это 2*Pi, значит 180град=Pi, ну а дальше уже по обычной пропорции можно посчитать

180 <--> Pi
valueInGrad <-->valueInRadian
 

Получаем

valueInGrad=(180*valueInRadian)/Pi

Мысленно подставим сюда известный нам угол. Скажем Прямой угл. Это Pi/2,  (180*Pi/2)/Pi=90 градусов. Все верно, формула работает.
Значит вам, в итоге, нужно
 

angle=(180*atan(A))/PI;

Только, при этом, опять-таки из школы, нужно вспомнить, что функция арнтангенс - не однозначаня функция. Взгяните на график функции тангенс 

Видите? Зная y (это "это значение есть"), нельзя однозначно сказать чему был равен x  (угол который вы ищите). Скажем "это значение есть 0 " может означать как и угол "0 градусов", так и угол 180-градусов.
Функция atan - всегда возращает угол в диапазоне -Pi/2 до Pi/2, но реальный угол может быть больше или менше ровно 180/360/540/720 и т.д.
Вообщем математика не позволяет однозначно дать ответ на вопрос "какой угол?", зная только тангенс. Выяснять "диапазон" - нужно из какой-нибудь дополнительный инфы. А уж "в диапазоне" - тут atan вам поможет.

 

 

leshak
Offline
Зарегистрирован: 29.09.2011

Protez1999 пишет:

zhuki пишет:

Protez1999 пишет:

Подскажите если есть другое решение моей задачи. есть тангенс (х)=(это значение есть)  хочу получать градусы.

В школе это называлось арктангенс.

и что дальше??? я не спрашиваю что и как называлось я задал конкретный вопрос.


А дальше - подумайте что делать с тем ответом который вы получили. А вдруг он полезен? Не просто же так сказали. Раз подсказали "как называется", то и загуглить не грех что это такое. Почему-то же это сказали.
Берете и гуглите. "c++ арктангенс". И быстро находите что в C++ для его вычисления используется atan() (а возможно стоит погуглить что такое арктангенс вообще и какие его свойсва, раз забылось).

Там в описании прочитает "возвращает значение в радианах". Гуглим "как перевести радианы в градусы". Ну и все.

Как видите самое главное - дать направление человек вам дал. Все что нужно для решения- после его ответа у вас есть. Сказал "как называется", а уж что не "выложил на блюде" - так и извините, вроде как и не обязан.

P.S. Вы думаете я все напамять знаю? Я просто взял, загуглил и освежил память. Ну разве что "называется оно арктангенс" - я изначально помнил.

Protez1999
Offline
Зарегистрирован: 08.07.2012

спасибо за помощь все решилось через синус. Я имел 2 стороны и 1 угол. нашел 3 сторону потом синус и нужный мне угол. 

leshak
Offline
Зарегистрирован: 29.09.2011

Protez1999 пишет:

спасибо за помощь все решилось через синус. Я имел 2 стороны и 1 угол. нашел 3 сторону потом синус и нужный мне угол. 

Очень интерестно. Как зная тангенс угла, можно с помощью функции синус узнать сам угл в градусах?

Ну, предположи с помощью

tg α · ctg α = 1 и 1 + ctg² α = 1 ÷ sin² α

мы из тангенса узнаем значение синуса угла. Но ведь дальше, что-бы получить сам угл нам нужен будет арксинус. А потом, все равно переводить радианы в градусы.

То есть - ровно то же самое (только вместо atan() будет asin()), плюс дополнительные шаги по вычислению синуса. 

Или вы нашли какой-то более прямой путь? 

P.S. Или вы решали какую-то совсем другую задачу, а не ту которую описали

 

 

toc
Offline
Зарегистрирован: 09.02.2013

ТС,

180 градусов равно Пи радиан.
Пи равно 3,141592653589.
вход double tanvalue=1;
выход double ugolVgradusah=atan(tanvalue) *180 /пи ; // = 45 градусов

step962
Offline
Зарегистрирован: 23.05.2011

Да тут, судя по всему, треугольник-то прямоугольный был. Так что по двум сторонам найти третью - даже без упомянутого угла - что штаны надеть. Пифагоровы.

Protez1999
Offline
Зарегистрирован: 08.07.2012

Совершенно верно.  Думал что с тангенсом самый простой способ. оказалось что нет

toc
Offline
Зарегистрирован: 09.02.2013

не иначе калькулятор пишем :) 

leshak, функция atan определена на всей числовой прямой

 

step962
Offline
Зарегистрирован: 23.05.2011

toc пишет:

leshak, функция atan определена на всей числовой прямой

...являясь при этом классическим примером неоднозначной (кокретно - периодической) функции, т.е. имея при этом бесконечное количество значений функции Y для любого аргумента X. 

В качестве иллюстрации:

X=0: Y=...,-3*Pi,-2*Pi,-Pi,0,Pi,2*Pi,3*Pi,...

leshak
Offline
Зарегистрирован: 29.09.2011

Protez1999 пишет:

Совершенно верно.  Думал что с тангенсом самый простой способ. оказалось что нет

Так покажите же более простой способ. Ну реально же интерестно. Как ни кручу в голове/гугле, а все пути решения, если треугольник не прямоугльный (равнобедренный), в общем случае - через какую-нибудь арк-функцию (atan(), acos(), asin(), в итоге, проходят).

leshak
Offline
Зарегистрирован: 29.09.2011

toc пишет:

не иначе калькулятор пишем :) 

leshak, функция atan определена на всей числовой прямой

 

Если вы говорите именно про функцию atan() - то да. График верный. Если же про математически - то не верный. Эта красная линия дублируется сверху и снизу - бесконечное число раз.
И вы перепутали "определена" (это да, это вы верно сказали, так и есть) и "однозначна" - а вот это нет. Просто сиш-ные функции умеет возвращать только одно значение, а никак не бесконченое :)
 

тут как у функции "квадрат" и "корень". Возвести в квадрат число - всегда однозначно можно. А вот в обратную сторону - фиг. Уже два варианта.  Вопрос "какое число в квадрате дало 9-ть" - уже не имеет однозначного ответа. То ли +3, то ли -3. 
А в случае вопроса "какое число дало тангенс XXX", ответ - безсконечное количество чисел. Ряд чисел вида atan(XXX)+- Pi, где n целые от  0 до бесконечности.
Так как исходная функция tan() - у нас переодичная. Что в свою очередь означает "необратимая".

P.S. кстати Serial.println(sqrt(9)) - вам тоже вернет только одно число "3", но мы знаем что этот ответ не полный ;)

Protez1999
Offline
Зарегистрирован: 08.07.2012

у меня прямоугольный треугольник. пишу что то типа автопилота. 

Protez1999
Offline
Зарегистрирован: 08.07.2012

Есть координаты 2 точек с gps и модель будет ехать с 1 точки во 2. Треугольник всегда будет прямоугольный. По координатам можно узнать дополнительно 2 стороны. В итоге имеем 1 угол и 2 стороны

leshak
Offline
Зарегистрирован: 29.09.2011

Protez1999 пишет:

у меня прямоугольный треугольник. пишу что то типа автопилота. 

А ну тогда да... все-таки иногда надо задачу давать в более полном виде. Хотя - фиг заранее угадаешь :), дали бы все детально, я же бы и бурчал "зачем столько лишнего мусора" ;)

Ну так покажите ваше решение. Может еще кому пригодится. Многие пишут всяких роботов и многие уже школу подзабыли. Да и просто любопытно ( а может еще и покритиковать получится :)  

А вообще спасибо. Заставили вспомнить страшное слово "Сканави", которое когда-то вызывало судороги, а теперь умиление и "эх... хорошо тогда было". Подняли настроение.

P.S. Интерестно, а многим слово "сканави" что-нибудь говорит?

 

Protez1999
Offline
Зарегистрирован: 08.07.2012



float valY=56.18;
float valX=16.24; // координаты 1 точки 

float valY2=56.10;
float valX2=16.44; // координаты 2 точки

float valR = 0;  //растояние от точки до точки
float valT = 0;  // 
float valU =0; //
float valI=0; //  синус
float valO=0;  // радиан
void setup()
{
  
  Serial.begin(9600); 

  }

void loop()
{
 valR = (valY-valY2)*100; /// узнаем катеты
 valT = (valX2-valX)*100; //  поменять знак
 valU =(sqrt(valR*valR+valT*valT)); //  узнаем 3 сторону
 //float der=sqrt(valU); 
 //вычисляем тангенс
 valI=180-((valR/valU)*57.29+90); // градусы
 
 //tan(2.5);
 
   Serial.print(valR);
   Serial.println(" 1 storoni treygolnika");
   Serial.print(valT);
   Serial.println(" 2 storoni treygolnika");
   Serial.print(valU);
   Serial.println("km 3 rastojanie do celi 3 storona");
   Serial.print(valI);
   Serial.println(" gradus");
   //Serial.print(tan (valO));
  // Serial.println(" gradys");
   
  //x=x*(-1) смена знака на противоположный
delay(1000);
   }

 

А это поедит http://youtu.be/eCceTjNZ70k

Protez1999
Offline
Зарегистрирован: 08.07.2012

осталось немного доделать точка может находится в 4 положения сверху право-лево и низ право лево. их учесть для градусов и в принципе все готово