Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: генератор точек по кругу  (Прочитано 3025 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Serguntii
Помогающий

ru
Offline Offline

« : 04-12-2013 19:39 » 

Подскажите пожалуйста как сделать такой генератор.

Функция arc_point вызывается с частотой по таймеру 1мс. В аргументах получает параметры перемещения,  с каждым вызовом результат записывается в актуальную точку.
Код:
arc_point(double актуальная точка &x &y, double точка цель куда нужно перейти x y ,double  точка центра радиуса xy double шаг одного вызова этой мм )
{
//актуальная= X0Y1Z0 и конечная точка= X1.2803 Y1.5303 центр радиуса X0.5303 Y1.5304  шаг 0.025


}


  

* генератор.png (147.67 Кб - загружено 512 раз.)
« Последнее редактирование: 04-12-2013 19:44 от sergeyan » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 04-12-2013 20:00 » 

Ну это уже вообще школьная задача. Наводящий вопрос: как описывается единичная окружность на координатной плоскости, и причём тут тригонометрические функции?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Serguntii
Помогающий

ru
Offline Offline

« Ответ #2 : 04-12-2013 20:09 » 

кружок диаметром 1мм и длиной окружности пи вроде. )
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 04-12-2013 20:15 » 

Dimka, Если вспомнить чуть чуть тригонометрию, то возня с синусами косинусами преврашается в простое умножение и прибавление.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Serguntii
Помогающий

ru
Offline Offline

« Ответ #4 : 04-12-2013 20:23 » 

понятно попробую прочитать, сложность еще в том что шаг должен быть 0.025 мм. то есть либо увеличивается  на 0.025 либо не изменяется. 
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 04-12-2013 20:29 » 

sergeyan, Обычно, когда говорят про окружности. Как правило угол является привязкой. Если в данном случае шаг 0,025 мм по окружности. То тогда не трудно посчитать какой именно будет шаг угла. Радиан определяется как угловая величина дуги, длина которой равна её радиусу.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 04-12-2013 20:38 » 

шаг должен быть 0.025 мм.

Это шаг между точками на окружности (длина хорды) или шаг координатной сетки, на которой производится построение? Если второе, то хороший вариант - применить алгоритм Брезенхема и не связываться с трансцендентными функциями, которые считать гораздо накладнее.
« Последнее редактирование: 04-12-2013 20:47 от Dale » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Serguntii
Помогающий

ru
Offline Offline

« Ответ #7 : 04-12-2013 20:48 » 

Шаг координатной сетки по осям, возможно нужно будет поменять на неравномерные шаги например по y0.025  а по y 0.005
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 04-12-2013 20:53 » 

Неравномерная сетка - не очень хороший вариант для алгоритма Брезенхема, поскольку окружность превратится в эллипс. Впрочем, больший шаг можно получить округлением меньшего и считать на равномерной сетке, а менять шаг уже при выводе данных.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Serguntii
Помогающий

ru
Offline Offline

« Ответ #9 : 04-12-2013 21:05 » 

Понятно сейчас посмотрю, еще такой момент, что предпринять что бы  снизить накопление ошибки, если округлять постоянно  то при многократном повторении будет накапливаться ошибка?
Повторы это уходим из этого места и потом возвращаемся в эту точку и опять нужно повторить эту траекторию?
Повторов может быть 1000..
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 04-12-2013 21:12 » 

Finch, но автор же (и те другие, кто возможно этот код будут читать), должны же хорошо понимать, что они делают. И в чём возня с применением sin и cos?

Что касается накладных расходов на расчёт: как я помню по задаче вывода 3D графика, у автора с этим проблем нет никаких, раз его не напрягает пересчитывать всю 3D сцену со скоростью 1000 fps с вполне себе синусами и косинусами.

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

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 04-12-2013 21:26 » 

что предпринять что бы  снизить накопление ошибки, если округлять постоянно  то при многократном повторении будет накапливаться ошибка?
Повторы это уходим из этого места и потом возвращаемся в эту точку и опять нужно повторить эту траекторию?

Алгоритмы Брезенхема по своей сути целочисленные, в этом их главная ценность. Используются лишь самые примитивные и быстрые операции: целочисленные сложение, вычитание, умножение/деление на 2 (которые реализуются сдвигом влево/вправо за 1 такт). Поэтому никаких ошибок округления быть не может ввиду отсутствия округления как такового. Траектория останется той же при любом количестве повторных прохождений, если исходные данные не меняются.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines