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

[Đã xong] Lisp vẽ đường vuông góc chung của 2 đường thẳng

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

Theo yêu cầu của một số bạn đọc từ topic "Đo khoảng cách", để tiện tìm kiếm cho người dùng, cần mở topic này.

Lisp dưới đây được biên soạn lại từ lisp ở topic "Đo khoảng cách". Lisp có mục đích:

1). Kiểm tra vị trí tương đối giữa 2 đường thẳng trong không gian.

2). Nếu 2 đường thẳng là chéo nhau thì vẽ đường vuông góc chung giữa chúng.

;Doan Van Ha - CADViet.com - Ngay 03/4/2012
;Muc dich: Kiem tra vi tri tuong doi cua 2 duong thang trong khong gian. Neu cheo nhau thi ve duong vuong goc chung.
(defun C:HA( / dt1 dt2 p1 p2 q1 q2 q1a q2a gd1)
(vl-load-com)
(or cal (arxload "geomcal"))
(command "ucs" "w")
(if (and (setq dt1 (car (entsel "\nChon duong thang 1: "))) (setq dt2 (car (entsel "\nChon duong thang 2: "))))
 (progn
  (setq p1 (cdr (assoc 10 (entget dt1))) p2 (cdr (assoc 11 (entget dt1))))
  (setq q1 (cdr (assoc 10 (entget dt2))) q2 (cdr (assoc 11 (entget dt2))))
  (if (LM:Coplanar-p p1 p2 q1 q2)
(if (inters p1 p2 q1 q2 nil)
	(alert "Hai duong thang nay giao nhau!")
	(if (or (inters p1 q1 p2 q2 nil) (inters p1 q2 p2 q1 nil))
 	(alert "Hai duong thang nay song song nhau!")
 	(alert "Hai duong thang nay trung nhau!")))
(progn
	(alert "Hai duong thang nay cheo nhau! \nDuong vuong goc chung se duoc ve!")
	(setq q1a (HA q1 p1 p2 (cal "p1+vec(q1,q2)")))
	(setq q2a (HA q2 p1 p2 (cal "p1+vec(q1,q2)")))
	(setq gd1 (cal "ill(p1,p2,q1a,q2a)"))
	(entmake (list (cons 0 "LINE") (cons 10 gd1) (cons 11 (vlax-curve-getClosestPointTo (vlax-ename->vla-object dt2) gd1 T))))))))
(princ))
;----- 1. Line-Plane Intersection (giao cña ®­êng th¼ng qua ®iÓm pt vµ vu«ng gãc víi mÆt ph¼ng p1,p2,p3): DOAN VAN HA.
(defun HA(pt p1 p2 p3 / vt pt1) (setq vt (cal "nor(p1,p2,p3)")) (setq pt1 (cal "pt+vt")) (cal "ilp(pt,pt1,p1,p2,p3)"))
;----- 2. Coplanar-p (4 ®iÓm ®ång ph¼ng) - Lee Mac, Returns T if points p1,p2,p3,p4 are coplanar
(defun LM:Coplanar-p ( p1 p2 p3 p4 ) ((lambda ( n ) (equal (last (trans p3 0 n)) (last (trans p4 0 n)) 1e-8)) (v^v (mapcar '- p1 p2) (mapcar '- p1 p3))))
;----- 3. Vector Cross Product - Lee Mac, Args: u,v - vectors in R^3 (tÝch v« h­íng cña 2 verter)
(defun v^v (u v) (list (- (* (cadr u) (caddr v)) (* (cadr v) (caddr u))) (- (* (car v) (caddr u)) (* (car u) (caddr v))) (- (* (car u) (cadr v)) (* (car v) (cadr u)))))

  • Vote tăng 3

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  

×