Đến nội dung


Hình ảnh

Hỏi về cách vẽ 1 cung có kích thước chính xác.


  • Please log in to reply
28 replies to this topic

#21 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 23 June 2008 - 11:31 PM

P/S: Bạn nào biết cách giải phương trình sin(x) = k.x (với k = const) xin làm giúp. Đưa kết quả giải phương trình trên vào lisp sẽ hay hơn và cho kết quả chính xác hơn. Kiến thức lượng giác ssg quên sạch rồi!

Cái này em cũng ngồi giải nát óc mà không ra. Search mỏi tay thì được phương pháp giải bài toán:
f(x) = sin(x) - kx = 0.
Nhưng người ta cũng phải sử dụng phương pháp lặp Newton để giải. Bài gốc (bằng tiếng Anh) ở đây:
http://mathforum.org...segment.html#n1

Xin mô tả lại phương pháp này cho mọi người (cũng lặp giống pp của bác ssg):

Khởi tạo: X0 = sqrt(6-6k).
Công thức truy hồi: Xn+1 = Xn - (sin(Xn)-kXn)/(cos(Xn)-k).
Khi n tiến đến vô tận thì Xn tiến về giá trị kết quả.

Về phương diện tin học, ta sẽ lặp công thức cho đến lúc nào hiệu của Xn và Xn+1 bé hơn sai số mong muốn thì dừng lặp.

Đoạn code của bác ssg trở thành:

(setq saiso 0.0000001)
(defun timx (k / xn xn+1)
(setq xn (sqrt (- 6.0 (* 6.0 k)))
xn+1 (+ xn (* 2.0 saiso))
)
(while (> (abs (- xn+1 xn)) saiso)
(setq xn xn+1
xn+1 (- Xn (/ (- (sin Xn) (* k Xn)) (- (cos Xn) k)))
)
)
xn
)

(defun C:ACL (/ C L p1 p2 x dx h p3 oldos)
;;;Arc with Chord + Length
(setq
C (getreal "\nChieu dai day:")
L (getreal "\nChieu dai cung:")
)
(if (>= C L) (progn (alert "Error! Chieu dai day phai nho hon chieu dai cung!")(exit)))
(setq
p1 (getpoint "\nDiem chuan:")
p2 (polar p1 pi C)
k (/ C L)
)

(setq
x (* 2.0 (timx k))
x (/ (* x 180.0) pi) ;; convert radian to degree
oldos (getvar "osmode")
)
(setvar "osmode" 0)
(command "arc" p1 "E" p2 "A" x)
(setvar "osmode" oldos)
(princ)
)

  • 1

#22 t8778

t8778

    Chưa sử dụng CAD

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

Đã gửi 12 July 2008 - 03:36 PM

Với việc vẽ cái cung như vậy dùng lisp là phải rồi.
  • 0

#23 daik50

daik50

    biết vẽ point

  • Members
  • PipPip
  • 96 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 21 March 2012 - 08:41 AM

Xin lỗi cả nhà, các bác có thể cho em xin lisp vẽ cung khi biết điểm đầu, điểm cuối và chiều dài cung được không, hoặc có thể chỉ cho e la phải tìm cái này ở đâu không. Em đang rất cần. Thanks các bác trước.
  • 0

#24 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 21 March 2012 - 01:57 PM


Xin lỗi cả nhà, các bác có thể cho em xin lisp vẽ cung khi biết điểm đầu, điểm cuối và chiều dài cung được không, hoặc có thể chỉ cho e la phải tìm cái này ở đâu không. Em đang rất cần. Thanks các bác trước.

Hề hề hề,
Yêu cầu của bạn hoàn toàn có thể sử dụng lisp của bác SSG hay của bác Hoành để vẽ được mà. Có điều sau đó bạn phải rotate cái cung vẽ xong đi một góc theo cái góc giữa dây cung và trục x là Ok.
Nếu bạn không thích như vậy thì phải chờ thêm chút chút để chỉnh sửa cái lisp của bác SSG là Ok.
Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#25 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 21 March 2012 - 03:13 PM


Xin lỗi cả nhà, các bác có thể cho em xin lisp vẽ cung khi biết điểm đầu, điểm cuối và chiều dài cung được không, hoặc có thể chỉ cho e la phải tìm cái này ở đâu không. Em đang rất cần. Thanks các bác trước.

Hề hề hề,
Đây là code của bác SSG mình sửa lại chút chút theo yêu cầu của bạn. Lệnh vẽ là acl1 khác chút chút với lệnh acl của bác SSG. Ưu nhược điểm của nó thì bạn đọc các bài post phía trên sẽ hiểu.


;;;-----------------------------------------------------------
(defun RTD(x) (/ (* x 180) pi) )
;;;-----------------------------------------------------------
(defun Tang(x) (/ (sin x) (cos x)) )
;;;-----------------------------------------------------------
(defun asin(x)
(cond
((and (< x 1) (> x -1)) (atan (/ x (sqrt (- 1 (expt x 2))))) )
((= x 1) (/ pi 2))
((= x -1) (/ pi -2))
)
)
;;;-----------------------------------------------------------
(defun acos(x) (- (/ pi 2) (asin x)))
;;;-----------------------------------------------------------
(defun C:ARL( / R L p1 p2 a oldos) ;;;Arc with Radius + Length
(setq
R (getreal "\nBan kinh:")
L (getreal "\nChieu dai cung:")
p1 (getpoint "\nDiem chuan:")
p2 (polar p1 pi R)
a (rtd (/ L R))
oldos (getvar "osmode")
)
(setvar "osmode" 0)
(command "arc" p1 "c" p2 "a" a)
(setvar "osmode" oldos)
(princ)
)
;;;-----------------------------------------------------------
(defun C:ACL(/ C L p1 p2 x dx h p3 oldos) ;;;Arc with Chord + Length
(setq
C (getreal "\nChieu dai day:")
L (getreal "\nChieu dai cung:")
)
(if (>= C L) (progn (alert "Error! Chieu dai day phai nho hon chieu dai cung!") (exit)))
(setq
p1 (getpoint "\nDiem chuan:")
p2 (polar p1 pi C)
x (* 2 (acos (/ C L)))
dx 0.00001
)
(while (> (/ x (sin x)) (/ L C)) (setq x (- x dx)))
(setq dx (* dx dx))
(if (/= (/ x (sin x)) (/ L C))
(while (< (/ x (sin x)) (/ L C)) (setq x (+ x dx)))
)
(setq
x (- x (/ dx 2))
h (* (/ C 2) (tang (/ x 2)))
p3 (list (- (car p1) (/ C 2)) (+ (cadr p1) h))
oldos (getvar "osmode")
)
(setvar "osmode" 0)
(command "arc" p1 p3 p2)
(setvar "osmode" oldos)
(princ)
)
;;;-----------------------------------------------------------

(defun C:ACL1(/ C L p1 p2 x dx h p3 oldos) ;;;Arc with Chord + Length
(setq
p1 (getpoint "\nDiem neo thu nhat:")
p2 (getpoint p1 "\n Diem neo thu hai")

)
(setq
C (distance p1 p2)
L (getreal "\nChieu dai cung:")
x (* 2 (acos (/ C L)))
dx 0.00001
ang (angle p1 p2)
pm (list (/ (+(car p2) (car p1)) 2) (/ (+ (cadr p2) (cadr p1)) 2))
)
(if (>= C L) (progn (alert "Error! Chieu dai day phai nho hon chieu dai cung!") (exit)))

(while (> (/ x (sin x)) (/ L C)) (setq x (- x dx)))
(setq dx (* dx dx))
(if (/= (/ x (sin x)) (/ L C))
(while (< (/ x (sin x)) (/ L C)) (setq x (+ x dx)))
)
(setq
x (- x (/ dx 2))
h (* (/ C 2) (tang (/ x 2)))
p3 (list (- (car pm) (* h (sin ang))) (+ (cadr pm) (* h (cos ang))))
oldos (getvar "osmode")
)
(setvar "osmode" 0)
(command "arc" p1 p3 p2)
(setvar "osmode" oldos)
(princ)
)

  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#26 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 21 March 2012 - 03:31 PM


Xin lỗi cả nhà, các bác có thể cho em xin lisp vẽ cung khi biết điểm đầu, điểm cuối và chiều dài cung được không, hoặc có thể chỉ cho e la phải tìm cái này ở đâu không. Em đang rất cần. Thanks các bác trước.

Hề hề hề,
Tiện tay mình chỉnh luôn cái lisp của bác Hoành để bạn tùy nghi lựa chọn. Lệnh chạy là acl2.



(setq saiso 0.0000001)
(defun timx (k / xn xn+1)
(setq xn (sqrt (- 6.0 (* 6.0 k)))
xn+1 (+ xn (* 2.0 saiso))
)
(while (> (abs (- xn+1 xn)) saiso)
(setq xn xn+1
xn+1 (- Xn (/ (- (sin Xn) (* k Xn)) (- (cos Xn) k)))
)
)
xn
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:ACL (/ C L p1 p2 x dx h p3 oldos)
;;;Arc with Chord + Length
(setq
C (getreal "\nChieu dai day:")
L (getreal "\nChieu dai cung:")
)
(if (>= C L) (progn (alert "Error! Chieu dai day phai nho hon chieu dai cung!")(exit)))
(setq
p1 (getpoint "\nDiem chuan:")
p2 (polar p1 pi C)
k (/ C L)
)

(setq
x (* 2.0 (timx k))
x (/ (* x 180.0) pi) ;; convert radian to degree
oldos (getvar "osmode")
)
(setvar "osmode" 0)
(command "arc" p1 "E" p2 "A" x)
(setvar "osmode" oldos)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:ACL2 (/ C L p1 p2 x dx h p3 oldos)
;;;Arc with Chord + Length

(setq
p1 (getpoint "\nDiem neo thu nhat:")
p2 (getpoint p1 "\n Diem neo thu hai: ")

)
(setq
C (distance p1 p2)
L (getreal "\nChieu dai cung:")
)
(if (>= C L) (progn (alert "Error! Chieu dai day phai nho hon chieu dai cung!")(exit)))

(setq
k (/ C L)
x (* 2.0 (timx k))
x (/ (* x 180.0) pi) ;; convert radian to degree
oldos (getvar "osmode")
)
(setvar "osmode" 0)
(command "arc" p1 "E" p2 "A" x)
(setvar "osmode" oldos)
(princ)
)
Chúc bạn vui và hy vọng bạn sẽ hài lòng khi xài các lisp trên.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#27 daik50

daik50

    biết vẽ point

  • Members
  • PipPip
  • 96 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 21 March 2012 - 03:33 PM

Hề hề hề,
Tiện tay mình chỉnh luôn cái lisp của bác Hoành để bạn tùy nghi lựa chọn. Lệnh chạy là acl2.



(setq saiso 0.0000001)
(defun timx (k / xn xn+1)
(setq xn (sqrt (- 6.0 (* 6.0 k)))
xn+1 (+ xn (* 2.0 saiso))
)
(while (> (abs (- xn+1 xn)) saiso)
(setq xn xn+1
xn+1 (- Xn (/ (- (sin Xn) (* k Xn)) (- (cos Xn) k)))
)
)
xn
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:ACL (/ C L p1 p2 x dx h p3 oldos)
;;;Arc with Chord + Length
(setq
C (getreal "\nChieu dai day:")
L (getreal "\nChieu dai cung:")
)
(if (>= C L) (progn (alert "Error! Chieu dai day phai nho hon chieu dai cung!")(exit)))
(setq
p1 (getpoint "\nDiem chuan:")
p2 (polar p1 pi C)
k (/ C L)
)

(setq
x (* 2.0 (timx k))
x (/ (* x 180.0) pi) ;; convert radian to degree
oldos (getvar "osmode")
)
(setvar "osmode" 0)
(command "arc" p1 "E" p2 "A" x)
(setvar "osmode" oldos)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:ACL2 (/ C L p1 p2 x dx h p3 oldos)
;;;Arc with Chord + Length

(setq
p1 (getpoint "\nDiem neo thu nhat:")
p2 (getpoint p1 "\n Diem neo thu hai: ")

)
(setq
C (distance p1 p2)
L (getreal "\nChieu dai cung:")
)
(if (>= C L) (progn (alert "Error! Chieu dai day phai nho hon chieu dai cung!")(exit)))

(setq
k (/ C L)
x (* 2.0 (timx k))
x (/ (* x 180.0) pi) ;; convert radian to degree
oldos (getvar "osmode")
)
(setvar "osmode" 0)
(command "arc" p1 "E" p2 "A" x)
(setvar "osmode" oldos)
(princ)
)
Chúc bạn vui và hy vọng bạn sẽ hài lòng khi xài các lisp trên.



Thanks bác Bình nhé, cái món lisp này em vẫn chẳng biết gì. Cảm ơn bác rất nhiều
  • 0

#28 tinhtuhop

tinhtuhop

    Chưa sử dụng CAD

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

Đã gửi 06 September 2012 - 11:24 AM

Mình ko biết cách nào để vẽ 1 cung có kích thước chính xác. Ai vẽ được xin chỉ giúp. Thanks nhiều. Ví dụ: Cung có radius=1600, length=1000 (Dùng dimarc để đo).


bạn vào Draw chọn ARC -> CHỌN STAR, CENTER,ANGLE vẽ 1 cung tròn với bán kính như bạn cho trước. sau dó bạn dùng đoạn thẳng nối 2 điểm đầu cung tròn đó để làm điểm bắt đầu cho cung tròn có kích thước mà bạn cho trước.sau dó bạn kéo dài cung đó ra và nhập độ dài cung mà bạn muốn vẽ đó sau đó bạn trim cung trước lúc bạn kéo dài cung ra là bạn sẽ có 1 cung với kích thước như bạn muốn.dùng lệnh dar để đo cung đó bạn sẽ thấy kích thước như bạn muốn! mình chỉ biết cách thủ công này thôi có gì xin chỉ giáo thêm!
  • 0

#29 hoan2182

hoan2182

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2646 Bài viết
Điểm đánh giá: 832 (rất tốt)

Đã gửi 06 September 2012 - 12:31 PM

Hình như bác em Tinhtuhop nhầm lẫn khái niệm độ dài cung tròn và độ dài dây cung?

Bác em thích làm thủ công thì làm theo các bước sau:

Command: _arc (vẽ cung tròn: Srart , End , Radius )
Specify start point of arc or [Center]:
Specify second point of arc or [Center/End]: _e
Specify end point of arc:
Specify center point of arc or [Angle/Direction/Radius]: _r Specify radius of arc: 1600

Command: LEn
LENGTHEN
Select an object or [DElta/Percent/Total/DYnamic]:
Current length: 1805.6933, included angle: 65
Select an object or [DElta/Percent/Total/DYnamic]: t
Specify total length or [Angle] <1.0000)>: 1000
  • 0

Gió đưa cây cải về trời

Rau răm ở lại chịu lời đắng cay...