Serguntii
Помогающий
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
}
|
|
« Последнее редактирование: 04-12-2013 19:44 от sergeyan »
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #1 : 04-12-2013 20:00 » |
|
Ну это уже вообще школьная задача. Наводящий вопрос: как описывается единичная окружность на координатной плоскости, и причём тут тригонометрические функции?
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Serguntii
Помогающий
Offline
|
|
« Ответ #2 : 04-12-2013 20:09 » |
|
кружок диаметром 1мм и длиной окружности пи вроде. )
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #3 : 04-12-2013 20:15 » |
|
Dimka, Если вспомнить чуть чуть тригонометрию, то возня с синусами косинусами преврашается в простое умножение и прибавление.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Serguntii
Помогающий
Offline
|
|
« Ответ #4 : 04-12-2013 20:23 » |
|
понятно попробую прочитать, сложность еще в том что шаг должен быть 0.025 мм. то есть либо увеличивается на 0.025 либо не изменяется.
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #5 : 04-12-2013 20:29 » |
|
sergeyan, Обычно, когда говорят про окружности. Как правило угол является привязкой. Если в данном случае шаг 0,025 мм по окружности. То тогда не трудно посчитать какой именно будет шаг угла. Радиан определяется как угловая величина дуги, длина которой равна её радиусу.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Dale
|
|
« Ответ #6 : 04-12-2013 20:38 » |
|
шаг должен быть 0.025 мм. Это шаг между точками на окружности (длина хорды) или шаг координатной сетки, на которой производится построение? Если второе, то хороший вариант - применить алгоритм Брезенхема и не связываться с трансцендентными функциями, которые считать гораздо накладнее.
|
|
« Последнее редактирование: 04-12-2013 20:47 от Dale »
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
Serguntii
Помогающий
Offline
|
|
« Ответ #7 : 04-12-2013 20:48 » |
|
Шаг координатной сетки по осям, возможно нужно будет поменять на неравномерные шаги например по y0.025 а по y 0.005
|
|
|
Записан
|
|
|
|
Dale
|
|
« Ответ #8 : 04-12-2013 20:53 » |
|
Неравномерная сетка - не очень хороший вариант для алгоритма Брезенхема, поскольку окружность превратится в эллипс. Впрочем, больший шаг можно получить округлением меньшего и считать на равномерной сетке, а менять шаг уже при выводе данных.
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
Serguntii
Помогающий
Offline
|
|
« Ответ #9 : 04-12-2013 21:05 » |
|
Понятно сейчас посмотрю, еще такой момент, что предпринять что бы снизить накопление ошибки, если округлять постоянно то при многократном повторении будет накапливаться ошибка? Повторы это уходим из этого места и потом возвращаемся в эту точку и опять нужно повторить эту траекторию? Повторов может быть 1000..
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #10 : 04-12-2013 21:12 » |
|
Finch, но автор же (и те другие, кто возможно этот код будут читать), должны же хорошо понимать, что они делают. И в чём возня с применением sin и cos?
Что касается накладных расходов на расчёт: как я помню по задаче вывода 3D графика, у автора с этим проблем нет никаких, раз его не напрягает пересчитывать всю 3D сцену со скоростью 1000 fps с вполне себе синусами и косинусами.
По поводу сетки - тоже всё предельно просто. Вычислить значение с высокой точностью, потом найти ближайший узел сетки и "округлить" значение до него.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Dale
|
|
« Ответ #11 : 04-12-2013 21:26 » |
|
что предпринять что бы снизить накопление ошибки, если округлять постоянно то при многократном повторении будет накапливаться ошибка? Повторы это уходим из этого места и потом возвращаемся в эту точку и опять нужно повторить эту траекторию? Алгоритмы Брезенхема по своей сути целочисленные, в этом их главная ценность. Используются лишь самые примитивные и быстрые операции: целочисленные сложение, вычитание, умножение/деление на 2 (которые реализуются сдвигом влево/вправо за 1 такт). Поэтому никаких ошибок округления быть не может ввиду отсутствия округления как такового. Траектория останется той же при любом количестве повторных прохождений, если исходные данные не меняются.
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
|