> 1 <

Автор Сообщение

vakso

Members


Статус

1 сообщений

Где: Russia
Род занятий:
Возраст:

#2307   2010-06-06 21:21 GMT+3 часа(ов)      
Добрый вечер! Не могли бы вы помочь с одной задачкой? Нужно нарисовать окружность алгоритмом Брезенхема на AutoLisp. Спасибо

С Уважением, Василий.

peresh

Members


Статус

1 сообщений

Где: Ukraine
Род занятий:
Возраст:

#4797   2011-10-11 12:38 GMT+3 часа(ов)      
День добрый! Топорный алгоритм, но "пиксели" рисует.

 
(defun C:qw ( / )
(vl-load-com)
 
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq osm (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq circle (car (entsel "\n --> ")))
(setq delta 1.0 ) ; размер пикселя
(setq data (entget circle)
RAD (cdr (assoc 40 data))
Xc (car (cdr (assoc 10 data)))
Yc (cadr (cdr (assoc 10 data)))
i (+ delta (/ RAD delta))
X1 Xc
X2 (+ delta Xc)
Y1 Yc
Y2 (+ delta Yc)
k 0
count 0)
(while (< k i)
(setq k (+ delta k) l 0)
(while (< l i)
(if (<= (sqrt (+ (* (- Xc X1) (- Xc X1)) (* (- Yc Y1) (- Yc Y1)))) RAD) (setq count (+ 1 count)))
(if (<= (sqrt (+ (* (- Xc X2) (- Xc X2)) (* (- Yc Y1) (- Yc Y1)))) RAD) (setq count (+ 1 count)))
(if (<= (sqrt (+ (* (- Xc X2) (- Xc X2)) (* (- Yc Y2) (- Yc Y2)))) RAD) (setq count (+ 1 count)))
(if (<= (sqrt (+ (* (- Xc X1) (- Xc X1)) (* (- Yc Y2) (- Yc Y2)))) RAD) (setq count (+ 1 count)))
(if (or (= count 3) (= count 2))
(progn
(vl-cmdf "PLINE" (list X1 Y1) (list X2 Y1) (list X2 Y2) (list X1 Y2) "C")
(vl-cmdf "ARRAY" (entlast) "" "P" (list Xc Yc) "4" "360" "Y")
)
)
(setq Y1 (+ delta Y1) Y2 (+ delta Y2) l (+ delta l) count 0)
)
(setq X1 (+ delta X1) X2 (+ delta X2) Y1 Yc Y2 (+ delta Yc))
)
(setvar "CMDECHO" echo)
(setvar "OSMODE" osm)
(princ)
)
 
> 1 <


Онлайн :

0 пользователь(ей), 25 гость(ей) :