Chuyển đến nội dung
Diễn đàn CADViet
tiazu

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

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

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

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
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ẽ cả đường tròn rồi dùng lệnh Draw > point > Measre Lệnh này chia đường tròn ra các cung tròn có độ dài cho trước. Bạn bạn di con trỏ vào đường tròn sẽ thấy các điểm chia. ( lệnh Divide : chia đường tròn thành n phần đều nhau)>

  • Vote tăng 1

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

Hoặc có thể làm như sau: Vẽ một arc bất kỳ có bán kính 1600. Sau đó dùng lệnh lengthen, chọn arc vừa vẽ, chọn tham số Total, nhập vào số 1000.

  • Vote tăng 1

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
Bạn vẽ cả đường tròn rồi dùng lệnh Draw > point > Measre Lệnh này chia đường tròn ra các cung tròn có độ dài cho trước. Bạn bạn di con trỏ vào đường tròn sẽ thấy các điểm chia. ( lệnh Divide : chia đường tròn thành n phần đều nhau)>

 

 

Hoặc có thể làm như sau: Vẽ một arc bất kỳ có bán kính 1600. Sau đó dùng lệnh lengthen, chọn arc vừa vẽ, chọn tham số Total, nhập vào số 1000.

 

Cám ơn mọi người đã giúp đỡ mình. Thanks :cheers:

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
Xin lỗi các Bro, mình trông gà hoá cuốc nên tưởng nhầm là dây cung :blush:

Ban bi con mèo nó bịt mắt rùi nên ko thấy la phải rùi :cheers:

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

Đọc bài này mình lại nghĩ tới vấn đề mà mình đã gặp hồi trước, nhưng chưa có cách giải quyết đó là, làm cách nào để vẽ chính xác 1 cung tròn có độ dài cung và biết điểm đầu và điểm cuối(tức là độ dài đoạn chắn cung đó), tất nhiên là chưa biết bán kính.Lúc đó mình chỉ làm phương pháp mò, là xác định đoạn chắn cung sau đó kéo cho đoạn cung cho đến khi đúng độ dài đã biết, nhưng chỉ là tương đối.

  • Vote tăng 1

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ôi bấm Thanhs cho bạn vì:

-Đọc bài viết của bạn, tôi không rõ đây là lời giãi bầy tâm sự hay là câu hỏi.

-Có thể coi đây là một tình huống tâm lý.

-"để vẽ chính xác 1 cung tròn có độ dài cung và biết điểm đầu và điểm cuối(tức là độ dài đoạn chắn cung đó), tất nhiên là chưa biết bán kính.)"

Sao trước đây bạn không dùng lượng giác để tính, theo tôi dùng luợng giác tính sẽ vẽ được cung tròn có kT chính xác.

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

Đó là 1 câu hỏi mà! :cheers: mình có ghi là mình chưa có cách giải quyết và mình có hỏi làm thế nào nữa!Mình cũng xem các công thức tình bán kính cung tròn của lớp 8 nhưng không được, bạn có thể nói cụ thể về cách tính lượng giác không?Kiến thức phổ thông lâu rồi ko xài!Mong bạn giúp đỡ vì cái này liên quan công việc của mình.

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
Đó là 1 câu hỏi mà! :s_big: mình có ghi là mình chưa có cách giải quyết và mình có hỏi làm thế nào nữa!Mình cũng xem các công thức tình bán kính cung tròn của lớp 8 nhưng không được, bạn có thể nói cụ thể về cách tính lượng giác không?Kiến thức phổ thông lâu rồi ko xài!Mong bạn giúp đỡ vì cái này liên quan công việc của mình.

Ta có công thức tính chiều dài 1 cung bất kỳ như sau : K = ( R*pi*A)/180

Trong đó :

K : Độ dài của cung

R : Bán kính đường cong

A : Góc hướng tâm tạo bởi cung tròn đó

Vì vậy ở đây ta cần 1 lisp vẽ cung tròn có bán kính R cho trước và được tạo bởi góc có độ lớn xác định bởi công thức : A = (K*180)/(pi*R)

Cụ thể với yêu cầu bài toán của Tiazu với R = 1600 và chiều dài cung tròn là 1000 ta tính được độ lớn góc cần mở để vẽ được cung tròn là 35d48'35.5"

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
Ta có công thức tính chiều dài 1 cung bất kỳ như sau : K = ( R*pi*A)/180

Trong đó :

K : Độ dài của cung

R : Bán kính đường cong

A : Góc hướng tâm tạo bởi cung tròn đó

Vì vậy ở đây ta cần 1 lisp vẽ cung tròn có bán kính R cho trước và được tạo bởi góc có độ lớn xác định bởi công thức : A = (K*180)/(pi*R)

Cụ thể với yêu cầu bài toán của Tiazu với R = 1600 và chiều dài cung tròn là 1000 ta tính được độ lớn góc cần mở để vẽ được cung tròn là 35d48'35.5"

Vẫn phải cần bán kính bác ạ!

làm cách nào để vẽ chính xác 1 cung tròn có độ dài cung và biết điểm đầu và điểm cuối(tức là độ dài đoạn chắn cung đó), tất nhiên là chưa biết bán kính

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
làm cách nào để vẽ chính xác 1 cung tròn có độ dài cung và biết điểm đầu và điểm cuối(tức là độ dài đoạn chắn cung đó), tất nhiên là chưa biết bán kính

Có vô số đường tròn với 2R>a, trong đó a là chiều dài dây cung (tức là khoảng cách giữa hai điểm cho trước)! Các đường tròn này có tâm nằm trên đường thẳng vuông góc với "dây cung" đã cho tại trung điểm của nó.

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

biết điểm đầu và điểm cuối + chiều dài dây cung coi như đã xác định được bán kính và tâm 2 đường tròn thoả mãn yêu cầu này nằm đối xứng nhau qua đoạn thẳng nối 2 điểm cho trước kia. Vấn đề là bán kính tính ra sẽ là số vô tỉ chẳng hạn thì sẽ ko nhập vào một cách tuyệt đối được. Chúng ta cần dùng Cad với các kiểu truy bắt đối tượng để xử lý vụ này một cách chính mới là khó.

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

Vì chiều dài đường cong ko thể tính toán chính xác tuyệt đối được bởi số Pi đã là số vô tỉ rồi. Như vậy, nếu cho chiều dài cung thì việc xác định bán kính vẫn chỉ là chính xác ở mức độ nào đó. Tóm lại, yêu cầu này hiện nay chưa thể làm được.

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
làm cách nào để vẽ chính xác 1 cung tròn có độ dài cung và biết điểm đầu và điểm cuối(tức là độ dài đoạn chắn cung đó), tất nhiên là chưa biết bán kính.

Có công thức tính như sau :

C/S = sin(x)/x

Với C : chiều dài dây cung , S : chiều dài cung , (x) : là góc chắn cung/2

Để giải phương trình này bạn dùng hệ thức Newton để giài tìm ra (x), có (x) thì ra được bán kính.

Một cách nữa nhanh và đơn giản hơn là vào trang : http://www.1728.com/circsect.htm

Chọn vào CHORD & ARC, rồi nạp thông số chiều dài dây cung & cung vào, rồi ghi các kết quả được xuất ra

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
Có công thức tính như sau :

C/S = sin(x)/x

Với C : chiều dài dây cung , S : chiều dài cung , (x) : là góc chắn cung/2

Để giải phương trình này bạn dùng hệ thức Newton để giài tìm ra (x), có (x) thì ra được bán kính.

Một cách nữa nhanh và đơn giản hơn là vào trang : <a href="http://www.1728.com/circsect.htm" target="_blank">http://www.1728.com/circsect.htm</a>

Chọn vào CHORD & ARC, rồi nạp thông số chiều dài dây cung & cung vào, rồi ghi các kết quả được xuất ra

Cảm ơn bạn nhưng đã có được góc chắn cung thì đồng nghĩa với có được tâm--->có được bán kính---> vẫn chưa đúng với giả thuyết đặt ra.

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
Có vô số đường tròn với 2R>a, trong đó a là chiều dài dây cung (tức là khoảng cách giữa hai điểm cho trước)! Các đường tròn này có tâm nằm trên đường thẳng vuông góc với "dây cung" đã cho tại trung điểm của nó.

Bạn này nhầm lẫn chiều dài dây cung với chiều dài đoạn chắn cung rồi!

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
Bạn này nhầm lẫn chiều dài dây cung với chiều dài đoạn chắn cung rồi!

Cảm ơn bạn!

Xin bạn định nghĩa giúp hai khái niệm trên!

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

Các bạn dùng thử lisp này.

1) Lệnh ARL: vẽ cung với bán kính Rchiều dài cung L, cho độ chính xác "tuyệt đối". Khái niệm tuyệt đối nằm trong dấu nháy vì thực chất, mọi cái đều... tương đối. AutoCAD, hay bất kỳ trình CAD nào, đều xử lý số liệu đến một độ chính xác nào đó theo khả năng của nó, nhất là trong các phép tính toán đại số và lượng giác phức tạp.

2) Lệnh ACL: vẽ cung với chiều dài dây Cchiều dài cung L. Trong hầu hết các trường hợp thông thường, cho độ chính xác không dưới 6 chữ số thập phân (1 phần triệu drawing unit). Bạn nào muốn kết quả chính xác "tuyệt đối" hoặc "gần như tuyệt đối" thì thêm 1 hoặc vài số 0 nữa ở chỗ dx 0.00001 trong chương trình. Đổi lại, bạn phải chịu khó ngồi... thư giãn một chút khi chạy chương trình!

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

 

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!

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
Cảm ơn bạn!

Xin bạn định nghĩa giúp hai khái niệm trên!

Ah,trước giờ mình vẫn nghĩ dây cung đường cong (trong trường hợp này là 1 phần của đường tròn), còn đoạn chắn dây cung là 2 giao điểm của đường thẳng và dây cung, vì là kiến thức cũ nên có thể mình nhớ lầm, rất mong được trao đổi với bạn để ôn lại kiến thức cũ. :mellow:

  • 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
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/dr.math/faq/faq.circle.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)
)

  • Vote tăng 1

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

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.

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

 

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.

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

 

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

  • Vote tăng 1

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


×