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

[Đã xong] Lisp xác định vị trí tương đối giữa Point và Plane trong không gian

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

Tiếp tục là Lisp xác định vị trí tương đối giữa Point và Plane. Khi Ponit không thuộc Plane thì giao điểm của đường thẳng kẻ từ Point vuông góc với Plane sẽ được vẽ.

;Doan Van Ha - CADViet.com - Ngay 05/4/2012
;Muc dich: Kiem tra vi tri tuong doi cua Point va Plane trong khong gian. Ve duong vuong goc tu Point den Plane neu ton tai.
(defun C:HA( / q p1 p2 p3 p4 l l1 l2)
(vl-load-com) (or cal (arxload "geomcal")) (command "ucs" "w")
(princ "\nChon Plane...") (CMP)
(setq q (getpoint "\nChon Point: "))
(if (not (LM:Coplanar-p q p1 p2 p3))
 (progn
  (alert "Diem vuong goc tu Point den Plane se duoc ve!")
  (entmake (list (cons 0 "POINT") (cons 10 (HA q p1 p2 p3)))))
 (alert "Point nam trong Plane!"))
(princ))
;----- Chon Plane.
(defun CMP( / kieu)
(initget "1 2 3") (setq kieu (getkword "\nKieu chon Plane la: [1=3points/2=1point+1line/3=2lines] <1>: "))
(cond
 ((or (= kieu nil) (= kieu "1"))
  (setq p1 (getpoint "\nChon Point thu 1: ")
        	p2 (getpoint "\nChon Point thu 2: ")
        	p3 (getpoint "\nChon Point thu 3: "))
  (if (LM:Collinear-p p1 p2 p3) (alert "3 diem thang hang khong tao thanh mat phang!")))			;Khong tao thanh Plane
 ((= kieu "2")
  (setq l (car (entsel "\nChon Line: "))
        	p1 (getpoint "\nChon Point: ")
        	p2 (cdr (assoc 10 (entget l)))
        	p3 (cdr (assoc 11 (entget l))))
  (if (LM:Collinear-p p1 p2 p3) (alert "3 diem thang hang khong tao thanh mat phang!")))			;Khong tao thanh Plane
 ((= kieu "3")
  (setq l1 (car (entsel "\nChon Line thu 1: "))
        	l2 (car (entsel "\nChon Line thu 2: "))
        	p1 (cdr (assoc 10 (entget l1)))
        	p2 (cdr (assoc 11 (entget l1)))
        	p3 (cdr (assoc 10 (entget l2)))
        	p4 (cdr (assoc 11 (entget l2))))
  (if (not (and (LM:Coplanar-p p1 p2 p3 p4) (or (not (LM:Collinear-p p1 p2 p3)) (not (LM:Collinear-p p1 p2 p4)))))
(alert "2 duong thang khong tao thanh mat phang!")   						;Khong tao thanh Plane
(if (not (LM:Collinear-p p1 p2 p4)) (setq p3 p4))))))
;----- 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) (or cal (arxload "geomcal")) (setq vt (cal "nor(p1,p2,p3)")) (setq pt1 (cal "pt+vt")) (cal "ilp(pt,pt1,p1,p2,p3)"))
;----- 2. Collinear-p (3 ®iÓm th¼ng hµng) - Lee Mac, Returns T if p1,p2,p3 are collinear
(defun LM:Collinear-p (p1 p2 p3) ((lambda ( a b c ) (or (equal (+ a B) c 1e-8) (equal (+ b c) a 1e-8) (equal (+ c a) b 1e-8))) (distance p1 p2) (distance p2 p3) (distance p1 p3)))
;----- 3. 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))))
;----- 4. 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 2

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  

×