Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
lapnickchiviyeuem

tìm giao điểm của 2 đối tượng

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

hi everybody! em đang lập trình một ứng dụng nho nhỏ trong autolisp nhưng có một vấn đề chua thể giải quyết được. mong các bác giúp đỡ. vấn đề của em như sau : em đang muốn tìm giao điểm của 2 đối tượng( 2 đối tượng này có được bằng lệnh (entlast)) nhưng em không thể xác định được giao điểm của chúng, việc xác định giao điểm này cần cho việc tính khoảng cách ( ví dụ em vẽ 2 đường thẳng dt1 (o,o) đến (5,5); dt2 (0,5) đến (5,0), làm thế nào để xác định giao điểm của 2 đường thẳng này?)

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
hi everybody! em đang lập trình một ứng dụng nho nhỏ trong autolisp nhưng có một vấn đề chua thể giải quyết được. mong các bác giúp đỡ. vấn đề của em như sau : em đang muốn tìm giao điểm của 2 đối tượng( 2 đối tượng này có được bằng lệnh (entlast)) nhưng em không thể xác định được giao điểm của chúng, việc xác định giao điểm này cần cho việc tính khoảng cách ( ví dụ em vẽ 2 đường thẳng dt1 (o,o) đến (5,5); dt2 (0,5) đến (5,0), làm thế nào để xác định giao điểm của 2 đường thẳng này?)

bạn dùng lệnh (inters p1 p2 p3 p4) để xác định giao của 2 đoạn p1 p2 và p3 p4

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
bạn dùng lệnh (inters p1 p2 p3 p4) để xác định giao của 2 đoạn p1 p2 và p3 p4

cảm ơn nguyen hoanh. tôi đã làm như bạn bảo chương trình chạy ổn ròi, nhưng còn một vấn đề nữa, lệnh inters chỉ tìm được giao điểm của 2 đường thẳng, trong trường hợp tìm giao điểm với một đường cong thì sao? mong các bác giúp đỡ. cảm ơn

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
cảm ơn nguyen hoanh. tôi đã làm như bạn bảo chương trình chạy ổn ròi, nhưng còn một vấn đề nữa, lệnh inters chỉ tìm được giao điểm của 2 đường thẳng, trong trường hợp tìm giao điểm với một đường cong thì sao? mong các bác giúp đỡ. cảm ơn

Bạn dùng hàm GiaoDT sau. Cái này của anh Hoành viết lâu rồi ở đâu đó, ssg có biên tập thêm một chút:

 

(defun GiaoDT (e1 e2 / ob1 ob2 g L i kq)
(vl-load-com)
(setq
   ob1 (vlax-ename->vla-object e1)
   ob2 (vlax-ename->vla-object e2)
   g (vlax-variant-value (vla-IntersectWith ob1 ob2 acExtendNone))
)
(if (/= (vlax-safearray-get-u-bound g 1) -1) (setq L (vlax-safearray->list g)))
(setq i 0)
(repeat (/ (length L) 3)
   (setq kq (append (list (list (nth i L) (nth (+ i 1) L) (nth (+ i 2) L))) kq))
   (setq i (+ i 3))
)
kq
)

 

Kết quả là một "list of 3Dpoint", gồm toàn bộ các giao điểm của 2 đối tượng, bất kể loại đối tượng nào, miễn là nó có dạng "đường", kể cả đường bao của đối tượng region. Nếu không có giao điểm, kết quả return nil.

Không bàn đến ý nghĩa các code lúc này, cứ dùng đã rồi sẽ hiểu!

Một ví dụ:

 

(defun C:VD()
(GiaoDT (car (entsel "\nEnt 1:")) (car (entsel "\nEnt 2:")))
)

 

Chạy lệnh VD, bấm F2 sẽ thấy giá trị return.

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
Đăng nhập để thực hiện theo  

×