Построение отрезка методом симметричного ЦДА. Программирование на Си/С


Добавил:DMT
Дата создания:18 июня 2008, 23:35
Дата обновления:28 июня 2008, 22:47
Просмотров:8569 последний позавчера, 0:36
Комментариев: 0
Построение отрезка методом симметричного ЦДА. Программирование на Си/С, исходник
Код на C++
  1.  
  2. #define pop() stx[--deep]
  3. #define push(x) stx[deep++] = x
  4.  
  5. //отрезок симметричным ЦДА
  6. int x0, y0; //Координаты центра системы координат относит. лев. верх.
  7. int hx=3, hy=3; //размер половины пиксела
  8.  
  9. int sign (int r) //функция определения знака
  10. {
  11. if (r>0) return 1;
  12. else if (r<0) return -1;
  13. else return 0;
  14. }
  15.  
  16. // Програмирование на Си/С
  17. //Вывод "крупного" пиксела на экран
  18. void point(int ix, int iy, int color)
  19. {
  20. setfillstyle(SOLID_FILL, color);
  21. bar(
  22. x0+hx*2*ix-hx+1,
  23. y0-hy*2*iy-hy+1,
  24. x0+hx*2*ix+hx-1,
  25. y0-hy*2*iy+hy-1);
  26. }
  27. // Построение отрезка методом симметричного ЦДА
  28. void symcda(int x0, int y0, int x1, int y1)
  29. {
  30. int res_x=512, res_y=512; //начальные значения аккумуляторов
  31. int x=x0, y=y0; //начальные координаты точки
  32. int dx=x1-x0, dy=y1-y0; //приращения по осям
  33. int ex=sign(dx), ey=sign(dy);
  34. point (x,y,2); //вывод первого пиксела
  35.  
  36. while (!(x==x1 && y==y1)) //пока не конец отрезка...
  37. {
  38. res_x+=dx; //добавить к аккумулятору res_x приращение по x
  39.  
  40. if (res_x>=1024 || res_x<0) //если аккумулятор переполнен или меньше нуля
  41. {
  42. x+=ex; //добавить к x значение функции sign()
  43. point(x,y,2); //и вывести точку на экран
  44. res_x-=ex*1024; //скорректировать содержимое аккумулятора res_x
  45. };
  46. res_y+=dy; //добавить к аккумулятору res_y приращение по y
  47.  
  48. if (res_y>=1024 || res_y<0)//если аккумулятор переполнен или меньше нуля
  49. {
  50. y+=ey; //добавить к y значение функции sign()
  51. point(x,y,2); //и вывести точку на экран
  52. res_y-=ey*1024; //скорректировать содержимое аккумулятора res_y
  53. }
  54. }
  55. }
  56.  
При использовании обязательна ссылка на http://DMTSoft.ru
up