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

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

реализация алгоритма Брезенхема

Ответ
Поиск в этой теме
Непрочитано 01.06.2011, 11:58 #1
реализация алгоритма Брезенхема
1200
 
Регистрация: 01.06.2011
Сообщений: 7

добрый день. в институте задали написать программу под Autocad - брезенхема в виде наклонной линии. может кто нть помочь сделать? я в Autocade мягко говоря не бум-бум. весь нэт перерыл и ничего не нашел...
Просмотров: 12605
 
Непрочитано 01.06.2011, 14:20
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


т.е. в институте ставят задачу "найти в гугле", а не "сделать самостоятельно"?
Под "помочь" подразумевается "написать за меня"?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.06.2011, 14:31
#3
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от hwd Посмотреть сообщение
т.е. в институте ставят задачу "найти в гугле", а не "сделать самостоятельно"?
Под "помочь" подразумевается "написать за меня"?

hwd, а мне больше вот это порадовало
Цитата:
Сообщение от 1200 Посмотреть сообщение
весь нэт перерыл и ничего не нашел...
Особенно если учесть вот это Алгоритм Брезенхэма
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 01.06.2011, 14:39
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
hwd, а мне больше вот это порадовало


Особенно если учесть вот это Алгоритм Брезенхэма
Полагаю, что автор имел в виду мол он не нашел в инете готового решения написанного на autolisp, а самостоятельно написать эти несчастные пару формул топикстартеру очень не хочется (это же придётся книжку по лиспу почитать пару часов)... Вот и просит сделать это за него, а он в институте выдаст это за свой результат и будет хорошим специалистом.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.06.2011, 14:57
#5
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от 1200 Посмотреть сообщение
добрый день. в институте задали написать программу под Autocad - брезенхема в виде наклонной линии.
Цитата:
Сообщение от hwd Посмотреть сообщение
т.е. в институте ставят задачу "найти в гугле", а не "сделать самостоятельно"?
Под "помочь" подразумевается "написать за меня"?
Цитата:
Сообщение от TararykovDG Посмотреть сообщение
Особенно если учесть вот это Алгоритм Брезенхэма
Уважаемые гуру, видимо, просто из вежливости не пояснили, что преподаватель намекнул тебе на необходимость подготовки к службе в армии...
gomer вне форума  
 
Непрочитано 01.06.2011, 16:25
#6
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


1200, написал специально не лисповым стилем, а просто перевел (можно сказать дословно) пример реализации данного алгоритма на C++ из указанном мной в #3 посте ссылки на AutoLisp

Код:
[Выделить все]
 
; Примеры вызова: 
; (Bresenham_line '(0.0 0.0) '(10.0 30.0) 1)
; или так
; (Bresenham_line (getpoint "\nУкажите первую точку: ") (getpoint "\nУкажите вторую точку: ") 1)
(defun Bresenham_line(pnt1 pnt2 eps / x1 y1 x2 y2 delta_x delta_y sign_x sign_y error error2)
  (setq x1 (car pnt1)
        y1 (cadr pnt1)
        x2 (car pnt2)
        y2 (cadr pnt2)
        delta_x (abs (- x2 x1))
        delta_y (abs (- y2 y1))
        sign_x (if (< x1 x2) 1 -1)
        sign_y (if (< y1 y2) 1 -1)
        error (- delta_x delta_y)
        )
  (while (or (not (equal x1 x2 eps))
             (not (equal y1 y2 eps))
             )
    (entmake (list '(0 . "CIRCLE") '(100 . "AcDbEntity") '(67 . 0) '(410 . "Model") '(100 . "AcDbCircle") (cons 10 (list x1 y1)) '(40 . 0.5))) ; - я рисую для наглядности окружности
    ;(entmake (list '(0 . "POINT") '(100 . "AcDbEntity") '(67 . 0) '(410 . "Model") '(100 . "AcDbPoint") (cons 10 (list x1 y1)))) ; можно нарисовать точки
    (setq error2 (* error 2))
    (if (> error2 (* -1 delta_y))
      (setq error (- error delta_y)
            x1 (+ x1 sign_x)
            )
      )
    (if (< error2 delta_x)
      (setq error (+ error delta_x)
            y1 (+ y1 sign_y)
            )
      )
    )
  )
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 01.06.2011, 16:28
#7
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 702


Для исключения алгоритма Брезенхэма из оборота необходимо изобретение векторного монитора. Векторной системе - векторный монитор
З.Ы.
Встречал *.dwg файла размером около 10 метров, растрового происхождения (все бывшие пикселы состоят из солидов). Причем соседние пикселы объединены в один солид по горизонтали.
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Автор темы   Непрочитано 01.06.2011, 17:00
#8
1200


 
Регистрация: 01.06.2011
Сообщений: 7


TararykovDG, спасибо большое!
1200 вне форума  
 
Непрочитано 01.06.2011, 17:49
#9
Дима_

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


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
1200, написал специально не лисповым стилем
Эх поздно заметил - нужно было как раз по лисповски написать - путь-бы потом объяснял преподу - что ЭТО такое.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 01.06.2011, 18:11
#10
1200


 
Регистрация: 01.06.2011
Сообщений: 7


Цитата:
нужно было как раз по лисповски написать
это да... поможете переделать?
1200 вне форума  
 
Непрочитано 01.06.2011, 18:16
#11
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


1200, если не секрет... Какой стаж педагогической работы у вашего преподавателя? Думаю лет 40 точно есть
gomer вне форума  
 
Автор темы   Непрочитано 01.06.2011, 18:42
#12
1200


 
Регистрация: 01.06.2011
Сообщений: 7


да поменьше будет... а какое отношение это имеет к заданию?
1200 вне форума  
 
Непрочитано 01.06.2011, 18:57
#13
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от 1200 Посмотреть сообщение
а какое отношение это имеет к заданию?
Вы хоть понимаете какое применение у алгоритма Брезенхема?
gomer вне форума  
 
Автор темы   Непрочитано 01.06.2011, 19:01
#14
1200


 
Регистрация: 01.06.2011
Сообщений: 7


ну примерно да
1200 вне форума  
 
Непрочитано 01.06.2011, 19:22
#15
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


а причем здесь лисп и автокад объяснить сможете?
gomer вне форума  
 
Автор темы   Непрочитано 01.06.2011, 20:12
#16
1200


 
Регистрация: 01.06.2011
Сообщений: 7


разумеется
1200 вне форума  
 
Непрочитано 01.06.2011, 20:14
#17
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


можно полюбопытствовать?
gomer вне форума  
 
Автор темы   Непрочитано 01.06.2011, 23:12
#18
1200


 
Регистрация: 01.06.2011
Сообщений: 7


gomer, лисп - язык программирования, в данном случае под автокад, если это имелось ввиду...
народ, кто нть поможет тот код под лисп переделать?
1200 вне форума  
 
Непрочитано 01.06.2011, 23:21
#19
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от 1200 Посмотреть сообщение
gomer, лисп - язык программирования, в данном случае под автокад
Ну вот, теперь gomer будет знать, что такое лисп, а то ведь не знал до тебя
Цитата:
Сообщение от 1200 Посмотреть сообщение
народ, кто нть поможет тот код под лисп переделать напишет за меня тот код на лисп?
А что, TararykovDG не на лиспе код за тебя написал помог тебе написать?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.06.2011, 23:51
#20
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


1200, мне понято, что вам не понятно ничего... объясните мне, темному человеку, практическую ценность применения алгоритма Брезенхема в среде Автокад
gomer вне форума  
 
Непрочитано 01.06.2011, 23:58
#21
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Offtop: у меня смутные подозрения, что автор не знает как запустить написанный за него написанный с посторонней помощью код...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 02.06.2011, 00:18
#22
Дима_

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


Цитата:
Сообщение от gomer Посмотреть сообщение
1200, мне понято, что вам не понятно ничего... объясните мне, темному человеку, практическую ценность применения алгоритма Брезенхема в среде Автокад
Зачет поставят.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 02.06.2011, 07:16
#23
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


когда я учился у нас ходила поговорка: Преподаватели делают вид, что учат, а студенты делают вид, что учатся...
gomer вне форума  
 
Непрочитано 02.06.2011, 08:29
#24
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 702


Цитата:
Сообщение от gomer Посмотреть сообщение
Преподаватели делают вид, что учат, а студенты делают вид, что учатся...
Нормальный учебный процесс ИМХО. Зачем нам на численных методах был метод Эйлера или Рунге-Кута, где в повседневной жизни он применяется (инженером строителем). Все это для общего развития, пусть учат, потом некогда будет.
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 02.06.2011, 08:40
#25
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от 1200 Посмотреть сообщение
это да... поможете переделать?

1200, мой код и так написан на лиспе. Просто я сказал что написал его не "лисповым" стилем. И сделал это умышленно.
Во-первых, потому что, если Тебе этот алгоритм надо сдать преподу в институте, то поверь лучше сдавать именно такой вариант, и во-вторых, как я говорил мой код - перевод кода написанного на С++ в ссылке которую я давал в #3 посте. Я даже имена переменных оставил похожими, чтобы Тебе (если у Тебя конечно есть такое желание) было проще самому разобраться в проге (в данном случае я предположил, что раз уж Ты не знаком с лиспом, то может Ты знаешь другой язык программирования, например С++, и Тебе будет легче разобраться с лисп кодом если он будет написан в Си-подобном стиле).

И еще вопрос, Ты вообще пробывал запустить мой код в Автокаде. Если да, то я не понимаю почему возник вопрос о переводе на лисп, того, что и так на лиспе написано. Если нет, то тогда за что Ты мне говорил

Цитата:
Сообщение от 1200 Посмотреть сообщение
TararykovDG, спасибо большое!
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 02.06.2011, 08:42
#26
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Нормальный учебный процесс
Лучше б уж гарденпаф учились программировать... Хотя это тоже прикольный метод оградки рисовать...
gomer вне форума  
 
Непрочитано 02.06.2011, 08:58
#27
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 702


Цитата:
Сообщение от gomer Посмотреть сообщение
Хотя это тоже прикольный метод оградки рисовать...
А может он раскладку узоров на кирпичных фасадах подбирать станет так алгоритм Брезенхема его до конца дней кормить будет...
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 02.06.2011, 11:15
#28
Дима_

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


На тебе код на "чыстейшем" лиспе - когда преподователь спросит что это - передай ему от меня пламенный привет.
Код:
[Выделить все]
 (defun brezent (pt1 pt2)
  ((lambda (vector f-rec)
     (f-rec pt1))
   ((lambda (delta)
      (if (not (equal pt1 pt2 0.5))
          (mapcar '(lambda (x)
                     (/ (float x)
                        (apply 'max (mapcar 'abs delta))))
                  delta)))
    (mapcar '- pt2 pt1))
   (lambda (pt1)
     (entmakex (list (cons 0 "circle")
                     (cons 10 (mapcar 'fix pt1))
                     (cons 40 1)))
     (if (not (equal pt1 pt2 0.5))
         (f-rec (mapcar '+ pt1 vector))))))
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 02.06.2011, 12:22
#29
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Ну...
Ибо.

Короче, на лиспе, я бы делал так:
Код:
[Выделить все]
 (defun br (p1 p2 / f)
 (defun f (a p1 p2) (br (mapcar '+ p1 (list (cos a) (sin a) 0)) p2))
 (entmakex (list '(0 . "circle") (cons 10 (mapcar 'fix p1)) '(40 . 0.5)))
 (if (equal p1 p2 1) (princ) (f (angle p1 p2) p1 p2)))
Пример вызова:
Код:
[Выделить все]
 (defun c:t1 (/ p1 p2)
 (setq p1 (getpoint)
       p2 (getpoint)
 )
 (entmakex (list '(0 . "line") (cons 10 p1) (cons 11 p2)))
 (br p1 p2)
)
ps. но такое сдавать нельзя - ученик не сможет объяснить, а препод не сможет понять...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/

Последний раз редактировалось Елпанов Евгений, 02.06.2011 в 12:38. Причина: была f не локализованна...
Елпанов Евгений вне форума  
 
Непрочитано 02.06.2011, 12:33
#30
Дима_

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


Евгений - просто класс конечно-же через синусы - нафиг я этот вектор считал!
p.s. - стерто
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 02.06.2011, 12:48
#31
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
через синусы - нафиг я этот вектор считал!
Да, и в итоге, у тебя получилось трехмерное растрирование линии, т.е при использовании трехмерной линии, все кружочки лежат на разных уровнях...
А вообще, я хотел написать код по компактнее. Чтоб преподу поменьше читать было, а студенту учить!
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 02.06.2011, 21:02
#32
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
я бы делал так:
Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
А вообще, я хотел написать код по компактнее.
слишком сложно!
Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
у тебя получилось трехмерное растрирование линии
ага немного мимо цели...
Все еще проще... И оценку тут ставить не за что...

Код:
[Выделить все]
 (defun brs (p1 p2)
(entmakex (list '(0 . "CIRCLE") (cons 10 (mapcar 'fix p1)) '(40 . 0.5)))
(cond ((equal p1 p2 1.0))
((brs (polar p1 (angle p1 p2) 1.0) p2))))

(defun c:test( / p10 p11 *error*)
  (defun *error* (msg) (princ))
  (and (setq p10 (getpoint "\nНачальная точка: "))
	   (setq p11 (getpoint p10 "\nКонечная точка: "))
	(progn
	  (entmakex (list '(0 . "line") (cons 10 p10) (cons 11 p11)))
	  (brs (list (car p10)(cadr p10)) (list (car p11)(cadr p11))))
  )
  (princ)
)
зы так забавно смотреть на подсветку лисп кода

Последний раз редактировалось gomer, 02.06.2011 в 21:08.
gomer вне форума  
 
Непрочитано 03.06.2011, 00:14
#33
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


gomer, в твоем коде, кружочков будет больше, чем надо, т.е часть из них будет наложена друг на друга...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 03.06.2011, 01:21
#34
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
кружочков будет больше, чем надо, т.е часть из них будет наложена друг на друга...
мдя... не подумал я... каюсь... В #6, #28 вроде наложения не происходит, как у меня и в #29
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > реализация алгоритма Брезенхема



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по (entmake MTEXT). Правильная реализация. Tonic Программирование 16 23.03.2011 10:12
Метод конечных элементов. Теория и численная реализация. Городецкий, Евзеров, Стрелец-Стрелецкий, Боговис, Гензерский, 1997 г. Elyon Поиск литературы, чертежей, моделей и прочих материалов 0 19.01.2011 13:53
Реализация алгоритма шифрования AES средствами AutoLisp gomer LISP 20 09.09.2010 11:55
Реализация свободного опирания плиты на балки в SCADе torf_83 SCAD 25 31.07.2007 00:56
Реализация стека Антон87 Программирование 7 23.05.2007 13:59