| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Алгоритм брезенхема для 4 осей

Алгоритм брезенхема для 4 осей

Ответ
Поиск в этой теме
Непрочитано 13.07.2014, 12:08 #1
Алгоритм брезенхема для 4 осей
vova_kansk
 
слесарь
 
Красноярский край
Регистрация: 13.07.2014
Сообщений: 3

люди добрые помогите написать а еше лутше обьяснить как адаптировать целочисленный алгоритм брезенхема для 4 осей, тоесть, есть четыре отрезка x1-x2, y1-y2, z1-z2, a1-a2, я вычислил какой изних самый длинный это типа тактовая ось и пытаюсь присобачит ко всему этому целочисленный алгоритм Брэзенхема, чтоб решить когда шагать по каждой оси, но чета мозг мой сопротивляется, пишу на си, для меги8, поэтому сложные вычисления применять нежелательно, может есть какойто готовый кусок у когони будь на примете, или просто алгоритм в любом виде, до меня просто не доходит как высчитать ошибку, и где ее потом компенсировать
вот мой кусок может кточем поможет
Код:
[Выделить все]
 

    //текущиее положение
    x_poz=0;
    y_poz=0;
    z_poz=0;
    //куда надо придти
    x_poz_new=-8;
    y_poz_new=-4;
    z_poz_new=0;

    // опраделимся с колличествам шагов по осям
    dx = x_poz_new - x_poz;
    dy = y_poz_new - y_poz;
    dz = z_poz_new - z_poz;
    
    // опраделимся с направлениями по осям 
    //а если шагать ненадо то направление равно нулю
    //если шаг вперед то направление =1, назад -1
    //а так как направление известно количество шагов не должно быть отрицатльным
    if (dx== 0) {x_dir = 0;} else { if (dx>0) {x_dir = 1;} else {x_dir=-1;dx=-dx;}; }; 
    if (dy== 0) {y_dir = 0;} else { if (dy>0) {y_dir = 1;} else {y_dir=-1;dy=-dy;}; }; 
    if (dz== 0) {z_dir = 0;} else { if (dz>0) {z_dir = 1;} else {z_dir=-1;dz=-dz;}; }; 
       
    // опраделимся с максимальным колличествам шагов типа это будет тактовая ось max_step
    if (dx > max_step) {max_step = dx;};
    if (dy > max_step) {max_step = dy;};
    if (dz > max_step) {max_step = dz;};

    //если шаги по оси есть то, инициализация ошибки по каждой оси относительно тактовой
    if (dx==0) {ex=0;} else {ex=2 * max_step - dx;};
    if (dy==0) {ey=0;} else {ey=2 * max_step - dy;};
    if (dz==0) {ez=0;} else {ez=2 * max_step - dz;};
    
    //тут идет основной цикл 
    for (i=1;i<=max_step;i++){ 

      do{
         if (ex>=0) {
         x_poz=x_poz+x_dir; //надо шагнуть этой осью, готовим двигатель
         ex=ex-2*dx;            //если шагнули ошибку надо поправить
         } 
         else{

         };

         if (ey>=0) {
         y_poz=y_poz+y_dir;  //надо шагнуть этой осью, готовим двигатель
         ey=ey-2*dy;             //если шагнули ошибку надо поправить
         } 
         else{

         };

         if (ez>=0) {
         z_poz=z_poz+z_dir;  //надо шагнуть этой осью, готовим двигатель
         ez=ez-2*dz;             //если шагнули ошибку надо поправить
         } 
         else{

         };
          
     } while ( ex>0||ey>0||ez>0) ;

       ex=ex+2*dx; 
       ey=ey+2*dy;
       ez=ez+2*dz;

      dvigon(); //возможно положение движков должно изменится делаем шажок всеми движками

    };

 };

Последний раз редактировалось vova_kansk, 13.07.2014 в 12:13.
Просмотров: 3982
 
Непрочитано 13.07.2014, 14:59
1 | #2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Так если у тебя есть "тактовая ось" просто шагай по ней, и на каждом шагу смотри не пора-ли шагнуть по другим координатам (просто пересчитывай на каждой итерации), скорости проца по идее тебе должно хватить "за глаза".
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 15.07.2014, 11:16
#3
vova_kansk

слесарь
 
Регистрация: 13.07.2014
Красноярский край
Сообщений: 3


вот тут я и хотел спросить по какому критерию принять решение по каждой оси, тоесть как применить алгоритм Брэзенхема для каждой оси, относительно тактовой, чтоб переменные каждой оси не изменяли данных по тактовой оси, тогда просто можно будет ввести теоретически любое количество осей.
vova_kansk вне форума  
 
Непрочитано 15.07.2014, 16:25
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


как по какому - переводишь числа в вещественные, считаешь новые координаты, обратно в целые и смотришь на какой оси они изменились, на той и шагаешь.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 15.07.2014, 21:12
#5
vova_kansk

слесарь
 
Регистрация: 13.07.2014
Красноярский край
Сообщений: 3


погоди зачем вещественные, фишка алгоритма что там все числа целые, используется только сложение вычитание и умножение на 2
мне алгоритм для микроконтроллера сделать надо, потому сложную математику использовать нежелательно
вот нашол, самый простой пример, вроде какое то просветление возникло, завтра попробую рисовать

чегото прошлое сообщение писал, а оно кудато не туда отправилось

ЗЫ; видима туда отправилось, а так как там внешняя ссылка то сообщение проверяют перед публикацией,
заранее извеняюсь, я первый раз на этом форуме

Последний раз редактировалось Кулик Алексей aka kpblc, 15.07.2014 в 23:04.
vova_kansk вне форума  
 
Непрочитано 16.07.2014, 11:28
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от vova_kansk Посмотреть сообщение
мне алгоритм для микроконтроллера сделать надо, потому сложную математику использовать нежелательно
Да это я понял - просто я сомневаюсь что у тебя Z80 (да и того бы хватило) - тебе что микроконтроллером векторные фильмы на диодном экране показывать - за моторчиками твой контроллер успеет можешь не париться - но если конечно из спортивного интереса - можешь вычислить длинну "подсегмента" на каждой оси и шагать ими + в конце их "уточнить" соответствующей координате - но я бы с этим не заморачивался.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Алгоритм брезенхема для 4 осей

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
АЛГОРИТМ БРЕЗЕНХЕМА ПОМОГИТЕ leetoo Программирование 2 11.01.2013 20:28
AutoCAD Arhitecture 2008 Сетка координационных осей Hasan Вертикальные решения на базе AutoCAD 4 19.10.2009 12:11