Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2015, 14:42   #1
GreenFirefly
 
Регистрация: 13.07.2015
Сообщений: 6
По умолчанию Поворот круга (алгоритм)

Есть круг с отверстиями, пронумерованными от 0 до 359.
Есть ранее запомненная позиция A (например, если А = 63 значит было запомнено 63-е отверстие). В любой момент времени мы получаем текущую позицию P, которая может быть любой от 0 до 359.
Как реализовать движение по минимиальному расстоянию от Р к А (т.е. указать как кругу двигаться - по часовой или против часовой стрелки)?

P.S. Когда инкрементируется Р (текущая позиция) то при переходе нулевой позиции Р обнуляется. Т.е. Р - это счетчик позиций: досчитал до 359, сдвинулся еще вперед (+1) и обнулился.

Последний раз редактировалось GreenFirefly; 13.07.2015 в 14:50. Причина: уточнение
GreenFirefly вне форума Ответить с цитированием
Старый 13.07.2015, 14:58   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

(p>a и p-a<=180) или (p<a и a-p>180) против часовой иначе по
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.07.2015, 15:00   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1) пишем ДВЕ функции ВЫЧИСЛЕНИЯ расстояний ПО /ПРОТИВ часовой стрелки
function Дистанция по часовой стрелке (A, P)
дистанция :=P-A;
если диcтанция <0 то дистанция :=дистанция+360;

function Дистанция против часовой стрелки(A,P)
дистанция :=A-P;
если диcтанция <0 то дистанция :=дистанция+360;

2) ВЫЧИСЛЯЕМ, СРАВНИВАЕМ и ПРИНИМАЕМ решение.
если Дистанция по часовой(A,P) <Дистанция против часовой(A,P) то
ДВИЖЕНИЕ ПО ЧАСОВОЙ
иначе
ДВИЖЕНИЕ ПРОТИВ ЧАСОВОЙ


0) применяем формулЫ
(P-A +360) mod 360 //расстояние по часовой
(A-P +360) mod 360 //расстояние против часовой
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 13.07.2015, 15:23   #4
GreenFirefly
 
Регистрация: 13.07.2015
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
(p>a и p-a<=180) или (p<a и a-p>180) против часовой иначе по
Кажется не сработает. Например, А = 350 и Р = 10 требует поворота по ЧС.
GreenFirefly вне форума Ответить с цитированием
Старый 13.07.2015, 15:27   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
(т.е. указать как кругу двигаться - по часовой или против часовой стрелки)?
Код:
// a0, a = углы поворота (0...359°) - исходный и требуемый
// вернёт 
//   +1 - поворот против ч/с
//   -1 - поворот по ч/с
//    0 - поворот на 180° (пофигу, куда крутить)
function Direction(const a0, a: Integer): TValueRelationship;
begin
  Result:= CompareValue(abs(a - a0), 180);
end;
ВНИМАНИЕ!
УВАГА!!
АХТУНГ!!!
АТТЕНШН!!!!

Shit-code detected!
Код не отлаживал. Писал на заборе!


Возможно, попутал знак (±).
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 13.07.2015, 15:32   #6
GreenFirefly
 
Регистрация: 13.07.2015
Сообщений: 6
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Код:
ВНИМАНИЕ!
УВАГА!!
АХТУНГ!!!
АТТЕНШН!!!!

Shit-code detected!
Код не отлаживал. Писал на заборе!


Возможно, попутал знак (±).
Поздно. Микроконтроллер прошит и плата отправлена в производство. Ждите что-нибудь падающее сверху на голову, лол.
GreenFirefly вне форума Ответить с цитированием
Старый 13.07.2015, 15:47   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Как реализовать движение по минимиальному расстоянию от Р к А
Цитата:
Например, А = 350 и Р = 10 требует поворота по ЧС.
А если подумать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.07.2015, 15:49   #8
GreenFirefly
 
Регистрация: 13.07.2015
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А если подумать
Мда
Всем спасибо, вопрос закрыт.
GreenFirefly вне форума Ответить с цитированием
Старый 13.07.2015, 15:54   #9
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Вопрос о безразличии движения и его отсутствии не рассматривается?
Код:
var
  A, P, K: integer;
begin
A := 20;
P := 0;
repeat
K := (360 + P - A) mod 360;
write(A:3, ' ==> ', P:3, '  ');
if A = P then writeln('стоим')
  else if  k = 180 then writeln('без разницы')
    else if k > 180 then writeln('против часовой')
      else writeln('по часовой');
p := p+20;
until P>360;
readln;
end.
UPD
Цитата:
вопрос закрыт.
ну раз закрыт, то закрыт
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заданы радиус круга ... Aidar9119 Помощь студентам 3 20.03.2014 07:11
Площадь круга. Математика. glebast Помощь студентам 1 15.09.2012 21:53
поворот изображения на форме (либо поворот файла с картинкой) mystiql Microsoft Office Access 2 21.06.2011 22:03
Движение круга:) mitmikha Паскаль, Turbo Pascal, PascalABC.NET 2 12.04.2011 12:11
Площадь круга sturz Помощь студентам 20 23.01.2011 11:07