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

[Quà biếu] Vẽ các đường đặc biệt của tam giác

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

Hôm qua có bạn y/c viết lisp để vẽ 1 số đường đặc biệt trong tam giác. Đang loay hoay viết thì topic bị xoá (có lẽ do bạn ấy mới vào CADViet nên chưa rõ quy định?). Sẵn đây viết luôn và post lên để khi nào ai cần thì dùng (nhớ thanks nhé!). Lisp vẽ được:

1). 3 Đường cao

2). 3 Đường phân giác trong

3). 3 Đường trung tuyến

4). 3 Đường trung trực

5). 1 Đường tròn nội tiếp

6). 1 Đường tròn ngoại tiếp

Riêng 3 đường tròn bàng tiếp và 3 đường phân giác ngoài do ít dùng nên chưa viết.

Nếu chủ đề này đã có rồi thì mong bỏ qua cho, vì trước khi viết cũng đã thử tìm mà chưa thấy.

Thân thương!

;----- Ve cac duong dac biet trong tam giac.
;Doan Van Ha CADViet.com
(defun C:HA( / p11 p22 p33 pg12 pg23 pg31)
(or cal (arxload "geomcal"))
(command "undo" "begin")
(setq p1 (getpoint "\nChon dinh thu 1 cua tam giac: ")
      	p2 (getpoint "\nChon dinh thu 2 cua tam giac: ")
      	p3 (getpoint "\nChon dinh thu 3 cua tam giac: "))
(if (not (3DTH p1 p2 p3))
 (progn
  (setq p11 (inters p1 (polar p1 (acet-dtor (- (cal "ang(p1,p2)") (/ (cal "ang(p1,p3,p2)") 2))) 1) p2 p3 nil)
        	p22 (inters p2 (polar p2 (acet-dtor (- (cal "ang(p2,p3)") (/ (cal "ang(p2,p1,p3)") 2))) 1) p3 p1 nil)
        	p33 (inters p3 (polar p3 (acet-dtor (- (cal "ang(p3,p1)") (/ (cal "ang(p3,p2,p1)") 2))) 1) p1 p2 nil)
        	pg12 (acet-geom-midpoint p1 p2)
        	pg23 (acet-geom-midpoint p2 p3)
        	pg31 (acet-geom-midpoint p3 p1))
  (acet-sysvar-set (list "osmode" 0 "cmdecho" 0))
  (initget "1 2 3 4 5 6")
  (setq kieu (getkword "\nChon kieu ve: 1.Duong cao/2.Phan giac/3.Trung tuyen/4.Trung truc/5.Noi tiep/6.Ngoai tiep: "))
  (cond ((= kieu "1") (VDC p1 p2 p3))
         	((= kieu "2") (VPG p1 p2 p3))
         	((= kieu "3") (VTT p1 p2 p3))
         	((= kieu "4") (VTTR p1 p2 p3))
         	((= kieu "5") (VDTNT p1 p2 p3))
         	((= kieu "6") (VDTNGT p1 p2 p3)))
  (acet-sysvar-restore)
  (command "undo" "end"))
 (alert "3 diem nay thang hang, khong lam gi duoc nua dau!"))
(princ))
;----- Ve 3 duong trung truc.
(defun VTTR(p1 p2 p3)
(command "xline" pg12 (polar pg12 (+ (acet-dtor (cal "ang(p1,p2)")) (/ pi 2)) 1) ""
               	"xline" pg23 (polar pg23 (+ (acet-dtor (cal "ang(p2,p3)")) (/ pi 2)) 1) ""
               	"xline" pg31 (polar pg31 (+ (acet-dtor (cal "ang(p3,p1)")) (/ pi 2)) 1) ""))
;----- Ve 3 duong cao.
(defun VDC(p1 p2 p3)
(command "line" p1 (HA p1 p2 p3) "" "line" p2 (HA p2 p3 p1) "" "line" p3 (HA p3 p1 p2) ""))
;----- Ve 3 duong phan giac.
(defun VPG(p1 p2 p3)
(command "line" p1 p11 "" "line" p2 p22 "" "line" p3 p33 ""))
;----- Ve 3 duong trung tuyen.
(defun VTT(p1 p2 p3)
(command "line" p1 pg23 "" "line" p2 pg31 "" "line" p3 pg12 ""))
;----- Ve duong tron noi tiep.
(defun VDTNT(p1 p2 p3)
(command "circle" (inters p1 p11 p2 p22 nil) (HA (inters p1 p11 p2 p22 nil) p1 p2)))
;----- Ve duong tron ngoai tiep.
(defun VDTNGT(p1 p2 p3)
(command "circle" "3p" p1 p2 p3))
;-----
(defun HA(pt p1 p2 / vt pt1) (setq vt (cal "nor(p1,p2)")) (setq pt1 (cal "pt+vt")) (cal "ill(pt,pt1,p1,p2)"))
;-----
(defun 3DTH ( 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)))

  • Vote tăng 4

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  

×