Chuyển đến nội dung
Diễn đàn CADViet
vuxuanhuynh

Đề nghị giúp đỡ giải bài toán này

Các bài được khuyến nghị

Đề nghị mọi người giúp mình ý tưởng, thuật toán để giải bài toán sau:

Bài toán: Cho tập hợp điểm P trên bản vẽ( đối tượng dạng Block), viết hàm để xóa Block(i) nếu khoảng cách từ Block(i) đến Block xung quanh có khoảng cách nhỏ hơn khoảng cách D cho trước. Thank you very much!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Theo hochoaivandot, bạn thử Lồng lệnh While

 

Bạn thực hiện 1 vòng lặp qua tập hợp điểm. Trong vòng lặp ấy:

- Khi lặp qua điểm Pi chẳng hạn. Bạn thực hiện tiếp 1vòng lặp (vòng lặp con) với n-1 điểm còn lại.

- Tính khoảng cách Di từ Pi đến n-1 điểm kia,

- Khi xuất hiện Di<D thì dừng vòng lặp con để xóa Pi.

- Khi dừng vòng lặp con thì bỏ luôn đối tượng Pi đã xét khỏi tập hơp điểm.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
(defun LM:ss->ent ( ss / i l )
(if ss
   	(repeat (setq i (sslength ss))
       	(setq l (cons (ssname ss (setq i (1- i))) l))
   	)
)
)
(defun dxf (code e) (cdr (assoc code (entget e))))
(defun ss<dis(ss dis_iso / lst ss_sel e pt num con i ei pt_i dis)
(setq lst (LM:ss->ent ss))
(setq ss_sel (ssadd))
(while (setq e (car lst)) 
 (setq
  pt (dxf 10 e)
  lst (cdr lst)    
 )
 (foreach ei lst
  (setq pt_i (dxf 10 ei))
  (setq dis (distance pt pt_i))
  (if (< dis dis_iso) (setq ss_sel (ssadd ei ss_sel) lst (vl-remove ei lst)))
 )
)
ss_sel
)
(defun C:xoa(/ dis_iso ss)
(setq dis_iso (getdist "\nNhap khoang cach"))
(setq ss (ssget '((0 . "INSERT"))))
(command "erase" (ss<dis ss dis_iso) "")
)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hình như bạn này đang viết lisp làm thưa block text cao độ trên bình đồ cho dễ đọc thì phải. trước đây mình có viết hộ đồng nghiệp 1 cái như thế. thuật toán thì y chang bạn Học Dốt viết bên trên :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Đây là dạng bài toán xóa bớt điểm mia trên bình đồ mà. Chỉ khách điểm mia giờ không phải là text mà là block (một số phần mềm xuất ra dạng block, một số khác xuất dạng Point, Text, Proxy...). Mình đã gặp trường hợp này và làm như sau: Phá vỡ Block -> Text -> dùng lisp có sẵn trên diễn đàn để xóa bớt Text theo một khoảng cách cho trước. Hi vọng bạn có thể tham khảo chút chút!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×