Jump to content


- - - - -

vẽ đường tiếp tuyến giữa 2 cung tròn


3 replies to this topic

#1 baosurvey

    Nhi Đồng

  • Thành Viên Chính Thức
  • Pip
  • 8 Bài viết:

Gửi lên vào 20 August 2003 - 11:01 PM

Tôi thường dùng chương trình này, khi cần vẽ tiếp tuyến của 2 cung tròn, cho mỗi khi cần thả hồn...bay bổng.Chỉ cần chỉ cursor vào các Object, thế là xong !

(prompt "Ve duong tiep tuyen giua 2 cung tron.")
(defun C:2TAN ()

(terpri)

(defun *error* (st)
(princ "error: ")
(princ st)
(terpri))

(setq pk1 (getpoint "Chon diem tiep tuyen #1nd: "))
(terpri)
(setq pk2 (getpoint "Chon diem tiep tuyen #2nd: "))
(terpri)
(setq cp1 (osnap pk1 "cen"))
(setq cp2 (osnap pk2 "cen"))
(if (<= (angle cp2 cp1) 0.0)
(progn (setq c1 cp2) (setq p1 pk2) (setq c2 cp1) (setq p2 pk1))
(progn (setq c1 cp1) (setq p1 pk1) (setq c2 cp2) (setq p2 pk2)))

(setq dtc (distance c1 c2))
(setq ag12 (angle c1 c2))
(setq ag21 (angle c2 c1))
(setq ag1 (angle c1 p1))
(setq ag2 (angle c2 p2))
(if (and (< ag1 ag21) (> ag1 ag12))
(setq case1 1) (setq case1 2))
(if (and (< ag2 ag21) (> ag2 ag12))
(setq case2 3) (setq case2 4))
(setq case (* case1 case2))

(setq r1 (distance c1 (osnap p1 "near")))
(setq r2 (distance c2 (osnap p2 "near")))
(if (or (= case 4) (= case 6))
(setq dtr (+ r1 r2))
(setq dtr (- r1 r2)))
(setq length (sqrt (- (* dtc dtc) (* dtr dtr))))
(if (or (= case 4) (= case 6))
(setq agx (atan (/ length dtr)))
(setq agx (atan (/ dtr length))))
(if (= case 8)
(setq ag12 (- (angle c1 c2) (/ pi 2))))
(if (= case 3)
(setq ag12 (+ (angle c1 c2) (/ pi 2))))
(if (or (= case 3) (= case 6))
(setq agt (- ag12 agx))
(setq agt (+ ag12 agx)))

(setq st (polar c1 agt r1))
(setvar "cmdecho" 0)
(command "line" st "tan" p2 "")
(terpri))
  • +
  • -
  • 0

#2 dothaihoa

    Bé mới sinh

  • Tài Khoản Chưa Kích Hoạt
  • Pip
  • 4 Bài viết:

Gửi lên vào 18 May 2004 - 11:01 PM

Tôi test thử chương trình của bạn nhưng không thấy gì. Xem qua chương trình của bạn thì thấy bất hợp lý ở chỗ:
(setq pk1 (getpoint "Chon diem tiep tuyen #1nd: "))
(setq pk2 (getpoint "Chon diem tiep tuyen #2nd: "))
Vì với 2 cung(đường) tròn bất kỳ chỉ tồn tại 2 tiếp tuyến chung và các điểm tiếp tuyến là xác định nên người dùng không thể sử dụng chuột để chỉ ra 2 điểm này.
Bài toán này được giải từ hình học phẳng trong chương trình phổ thông đó là tìn tiếp tuyến của hai cung tròn, đường tròn cho trước.
Để gải được bài toán này cần tìm được bán kính của hai đối tượng choc trước từ đó tìm ra được giao điểm (I) của tiếp tuyến với đường thẳng nối 2 tâm (O1O2) bằng tam giác đồng dạng-> tìm được 4 giao điểm của 2 đường tròn có đường kính lần lượt là khoảng cách (IO1) và (IO2) với 2 đường tròn cho trước. Đó chính là các tiếp điểm.

  • +
  • -
  • 0

#3 QUOCPHONG

    Thanh Niên

  • Tài Khoản Chưa Kích Hoạt
  • PipPip
  • 27 Bài viết:

Gửi lên vào 04 September 2004 - 04:11 PM

ôi trào sao nó còn lằng nhằng thế
  • +
  • -
  • 0

#4 bocaugai

    Hạ Sĩ

  • @Điều Hành@
  • PipPipPip
  • 123 Bài viết:

Gửi lên vào 21 May 2011 - 01:12 PM

sao khong chon bat diem tiep tuyen?
P/S: hang net ko co vietkey
  • +
  • -
  • 0
Chén đắng!





1 người đang xem chủ đề này

0 thành viên, 1 khách, 0 ẩn danh