Bạn nên theo dỏi theo tên bài viết tăng từ nhỏ tới lớn thì mới đúng trình tự!
Đoạn lisp trên mình viết rất cơ bản làm từng bước 1 để bạn làm quen, thực chất bạn có thể làm gọn lại bằng cách gộp các đoạn lại với nhau.
-Cụ thể đoạn
(setq xa (car a))
(setq xb (car b))
(setq xab (+ xa xb))
-Có thể thay bằng
(setq xab (+ (car a) (car b)))
-Tương tự sau khi gộp bước 1 từ đoạn:
(setq xa (car a))
(setq ya (cadr a))
(setq xb (car b))
(setq yb (cadr b))
(setq xab (+ xa xb))
(setq yab (+ ya yb))
(setq xc (/ xab 2))
(setq yc (/ yab 2))
(setq c (list xc yc))
-Ta có
(setq xab (+ (car a) (car b)))
(setq yab (+ (cadr a) (cadr b)))
(setq c (list (/ xab 2) (/ yab 2)))
-Tương tự sau khi gộp bước 2 ta có
(setq c (list (/ (+ (car a) (car b)) 2) (/ (+ (cadr a) (cadr b)) 2)))
*Đoạn lisp bây giờ còn như sau:
(defun c:doanthang ()
(setq a (getpoint "\nChon diem: "))
(setq b (getpoint a"\nChon diem: "))
(command ".line" a b "")(command ".circle" a b)
(command ".circle" b a)
(setq c (list (/ (+ (car a) (car b)) 2) (/ (+ (cadr a) (cadr b)) 2)))
(command ".circle" c a)
(princ))
*Chạy thử kết quả giống y như trước nhưng ngắn được 1 số dòng. Nếu mới bắt đầu viết gộp quá rối thì bạn cứ viết từng bước như cũ đến khi nào rành rành thì bắt đầu gộp lại.
*Mới có pick 2 điểm mà đã đủ thứ chuyện vậy đó. Tất nhiên cái hình mà lisp này vẽ ra giống y như cái mạng nhện vậy chẳng để làm gì cả nhưng khi đã nắm vấn đề thì bạn muốn làm gì mà chả được.
Không có nhận xét nào:
Đăng nhận xét