Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
1 reply to this topic

#1 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 08 November 2011 - 09:03 AM

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)))

  • 4

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#2 790312

790312

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 204 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 08 November 2011 - 05:41 PM

Sao bác không cho khi hiện chọn loại đường nào thành 1 list danh sách để chọn khỏi phải nhấn số.Thanks.
  • 0