| Подскажите как определить угол | 
|  | 
| 
| uslucifer | Дата: Среда, 19 Октября 2016, 22:18 | Сообщение # 1 |  |   постоянный участник Сейчас нет на сайте | ребят подскажите , как определить угол из формул? x = sin(a)*R+x0
 y = cos(a)*R +y0
 |  |  |  |  | 
| 
| Tymonr | Дата: Четверг, 20 Октября 2016, 00:48 | Сообщение # 2 |  |   With OpenSource forever♥ Сейчас нет на сайте | А 'a' это у тебя что тогда? 
 Если вы решили обратиться к нам за помощью, не становитесь в позицию неудачника. И не ведите себя как неудачник. Лучший способ получить быстрый и чуткий ответ, - спрашивать как победитель — спрашивать как человек умный, уверенный в себе и знающий, которому просто понадобилась помощь при решении одной конкретной проблемы.
 Как правильно задавать вопросы в технических форумах
 |  |  |  |  | 
| 
| Saitei | Дата: Пятница, 21 Октября 2016, 03:22 | Сообщение # 3 |  | старожил Сейчас нет на сайте | Цитата uslucifer (  )  как определить угол из формул?Почитай про arcsin и arccos.
 
 Ну и на всякий случай подумай ещё раз - а нужно ли это тебе? Может быть угол известен заранее?
 |  |  |  |  | 
| 
| Vuvk | Дата: Пятница, 21 Октября 2016, 04:59 | Сообщение # 4 |  | заслуженный участник Сейчас нет на сайте | A = arcsin ((x - x0)/R) ? Любопытно. |  |  |  |  | 
| 
| uslucifer | Дата: Пятница, 21 Октября 2016, 17:29 | Сообщение # 5 |  |   постоянный участник Сейчас нет на сайте | Цитата Saitei (  ) Почитай про arcsin и arccos.
 Ну и на всякий случай подумай ещё раз - а нужно ли это тебе? Может быть угол известен заранее?
 Ах если бы отсутствие ответа реже скрывалось чувством юмора, но увы (.
 |  |  |  |  | 
| 
| Saitei | Дата: Пятница, 21 Октября 2016, 17:42 | Сообщение # 6 |  | старожил Сейчас нет на сайте | uslucifer, рад, что ты понял шутку :) 
 Если ты знаешь значения sin и cos (но не знаешь угол), то угол можно получить через atan2: atan2(s, c);
 
 Используя atan2, ты избавишься от проблем со знаком, добавочных поправок не нужно.
 Ну и да, результат ты получишь в радианах.
 
 Выразить sin и cos из твоих формул довольно легко, дерзай
 |  |  |  |  | 
| 
| uslucifer | Дата: Пятница, 21 Октября 2016, 18:03 | Сообщение # 7 |  |   постоянный участник Сейчас нет на сайте | Цитата Vuvk (  ) A = arcsin ((x - x0)/R) ? Любопытно.
 нет, по одной функции угол не определить. Поэтому я и написал сразу две.
 
 по сути то уравнение можно упростить, но это я строил паровоз.
 
 я думал что у меня просто "замылился глаз" и искал не в той стороне, поэтому и решил спросить на форуме.
 Добавлено (21 октября 2016, 17:44)---------------------------------------------
 Сейчас проиллюстрирую для наглядности
 Добавлено (21 октября 2016, 18:03)---------------------------------------------
 
  голубая точка это мой объект, формула ее позиции
 x = sin(a)*R(n)+x(n)
 y = cos(a)*R(n) +y(n)
 
 n = параметры точек 1-3
 
 изменяя угол, я вращаю объект вокруг опорной точки.
 изменив опорную точку изменяется радиус, и угол. с радиусом попроще , а вот с углом оказалось потруднее.
 |  |  |  |  | 
| 
| Saitei | Дата: Пятница, 21 Октября 2016, 18:04 | Сообщение # 8 |  | старожил Сейчас нет на сайте | 
 Попробуй это (если значения sin и cos неизвестны):
 
 x = sin(a)*R + x0;
 y = cos(a)*R +y0;
 
 s = (x - x0)/R;
 c = (y - y0)/R
 
 alpha = atan2(s, c);
 |  |  |  |  | 
| 
| uslucifer | Дата: Пятница, 21 Октября 2016, 18:05 | Сообщение # 9 |  |   постоянный участник Сейчас нет на сайте | Saitei, сейчас попробую |  |  |  |  | 
| 
| Saitei | Дата: Пятница, 21 Октября 2016, 18:12 | Сообщение # 10 |  | старожил Сейчас нет на сайте | Хотя по идеи можно сделать проще: 
 v = normalize(o3 - base);
 
 atan2(v.y, v.x);
 
 То есть строим вектор от опорной точки к третьей, затем его нормализуем и получаем угол между ним и осью X
 |  |  |  |  | 
| 
| uslucifer | Дата: Пятница, 21 Октября 2016, 18:13 | Сообщение # 11 |  |   постоянный участник Сейчас нет на сайте | Цитата Saitei (  ) Попробуй это (если значения sin и cos неизвестны):
 x = sin(a)*R + x0;
 y = cos(a)*R +y0;
 
 s = (x - x0)/R;
 c = (y - y0)/R
 
 alpha = atan2(s, c);
супер. и не нужно никаких паровозов.
 теперь подскажите какие материалы мне прочитать, чтобы понять чуть происходящего. )
 
 
 Сообщение отредактировал uslucifer - Пятница, 21 Октября 2016, 18:14 |  |  |  |  | 
| 
| Saitei | Дата: Пятница, 21 Октября 2016, 18:18 | Сообщение # 12 |  | старожил Сейчас нет на сайте | Цитата uslucifer (  ) супер. и не нужно никаких паровозов.теперь подскажите какие материалы мне прочитать, чтобы понять чуть происходящего. )
Если ты о моём последнем ответе, то почитай про векторную алгебру.
 
 Например, чтобы получить угол между двумя векторами можно сделать вот так:
 v0, v1;
 angle = atan2(v1.y, v1.x) - atan2(v0.y, v0.x); //edited. Немножко обманул :Р
 angle += angle < 0 ? 2 * M_PI : 0; //нормализация
 
 Я просто не знал что было дано по условию, но увидев картинку всё встало на свои места
   |  |  |  |  | 
| 
| uslucifer | Дата: Пятница, 21 Октября 2016, 18:27 | Сообщение # 13 |  |   постоянный участник Сейчас нет на сайте | чумовая фишка, никак не нарадуюсь ) |  |  |  |  |