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

(yêu cầu) lisp vẽ cung tròn với diện tích biết trước

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

Mình đang cần 1 lisp để vẽ cung tròn đã biết trước diện tích của nó để tính chiều cao của cung tròn này.File CAD kèm theo.Cảm ơn mọi người

http://www.mediafire...h4d51wynxgqj3pg

Tìm "isp chia đất"mà dùng

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ìm "Lisp chia đất"mà dùng

Lisp chia đất của bác ssg chỉ đúng với đa giác kín, với đường tròn thì không còn đúng nữa anh à!

  • 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

Lisp của SSG có đúng cũng chỉ gần đúng. Dùng tính toán hình học thuần tuý thì đúng tuyệt đối. Điều này không có gì quá 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

Em đã thử lisp của Bác ssg nhưng với hình tròn thi bị sai hoàn toàn.Còn tính toán theo hình học thiì hơi lâu,nếu có lisp thì sẽ nhanh hơn nhiều.Bác nào có thể giúp đỡ em với không ak

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

Em đã thử lisp của Bác ssg nhưng với hình tròn thi bị sai hoàn toàn.Còn tính toán theo hình học thiì hơi lâu,nếu có lisp thì sẽ nhanh hơn nhiều.Bác nào có thể giúp đỡ em với không ak

Bạn thử nói cách tính hơi lâu của bạn khi xác định thủ công xem nà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

Bạn thử nói cách tính hơi lâu của bạn khi xác định thủ công xem nào :)

Theo những gì mà tôi được biết, trong trường hợp tổng quát, bài toán này không thể giải ra nghiệm tuyệt đối đúng, mà chỉ có thể giải đúng dần bằng phương pháp Newton.

Trong toán học luôn có những bài toán phải giải bằng phương pháp đúng dần như vậy, chừng nào các nhà toán học chưa tìm ra phương pháp giải chính xác.

Không biết có ai có cách giải tốt hơn không?

srr vì lúc đầu nhận định đây chỉ là 1 bài toán thuần tuý hình học và đơn giản, do nhận định dựa vào các trường hợp đặc biệt.

P/S: tôi đã rút gọn về phương trình cuối cùng là x - cos(x) = a thì bí rị!

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

Theo những gì mà tôi được biết, trong trường hợp tổng quát, bài toán này không thể giải ra nghiệm tuyệt đối đúng, mà chỉ có thể giải đúng dần bằng phương pháp Newton.

Trong toán học luôn có những bài toán phải giải bằng phương pháp đúng dần như vậy, chừng nào các nhà toán học chưa tìm ra phương pháp giải chính xác.

Không biết có ai có cách giải tốt hơn không?

srr vì lúc đầu nhận định đây chỉ là 1 bài toán thuần tuý hình học và đơn giản, do nhận định dựa vào các trường hợp đặc biệt.

P/S: tôi đã rút gọn về phương trình cuối cùng là x - cos(x) = a thì bí rị!

Thế là đụng phải Phương trình Siêu việt rồi!

Hồi thời sinh viên, đi học thường thì gặp mấy phương trình siêu việt này, mình thường giải bằng phương pháp đồ thị

Và với bài toán này, ta có thể giải gần đúng như sau:

- Gọi diện tích hình viên phân tạo bởi cung AB như trong file là S1

- Gọi diện tích hình quạt OAB là S2, diện tích tam giác AOB là Stg

- Gọi góc chắn cung AOB là a (radian)

- Gọi diện tích hình tròn tâm O là S => bán kính R = S/ (pi*pi)

 

S2= a*R*R

Stg = [R*R*sin(a)]/2

=> S1 = a*R*R - [R*R*sin(a)]/2

S1 và R đã biết, còn lại biến a

Ta giả sử chia góc a thành các góc tương đối nhỏ b, dùng vòng lặp với gia số tăng qua các vòng lặp là +b. (Biến b tăng lên qua mỗi vòng lặp là +b )

Qua mỗi vòng lặp Kiểm tra b*R*R - R*R*sin( b ) /2 = S1 không? Nếu lớn hơn S1 thì dừng vòng lặp lại

và kết quả là biến b là góc chắn cung cần tìm.

 

Có góc chắn cung ta dễ dàng giải được bài toán.

 

Trên đây là lời giải cho bài toán mình đưa ra, Tue_NV không có nhiều thời gian để viết Lisp để giải bài này.

Nếu các bác có thời gian, viết giúp cho bạn phunam với nhé!

Có gì còn thiếu sót, các bác bổ sung thêm với ạ.

 

P/S : Có thể dùng Lisp chia đất với điều kiện biến đường tròn thành "polygon" có số cạnh tương đối lớn (theo kiến nghị của mình là số cạnh bằng 360). Tuy nhiên, vòng lặp nhiều -> máy chạy hơi lâu.

  • 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

Các bác suy nghĩ chi cho mệt, vì bạn ấy nói làm thủ công hơi lâu, ta cứ chờ đáp án thủ công r làm thôi ^^ Trông hình thì giống mực nước trong ống vậy, lúc nào cũng nằm ngang :D

  • 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

Mình đang cần 1 lisp để vẽ cung tròn đã biết trước diện tích của nó để tính chiều cao của cung tròn này.File CAD kèm theo.Cảm ơn mọi người

http://www.mediafire...h4d51wynxgqj3pg

Thế này chăng

83237_circularsegment.gif

 

Lưu ý: Area tính theo unit của CAD nhé.

 

đánh lệnh netload dẫn đến file: CircularSegment.dll

 

lệnh là: SEG

Good luck!

 

Download Here

 

  • Vote tăng 3

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ác suy nghĩ chi cho mệt, vì bạn ấy nói làm thủ công hơi lâu, ta cứ chờ đáp án thủ công r làm thôi ^^ Trông hình thì giống mực nước trong ống vậy, lúc nào cũng nằm ngang :D

Vẽ bằng AutoCAD cũng ngon lắm!

Kết quả đây: H= 1067,6029476 ,Area = 2000000.0001

 

haawwey.jpg

 

File bản vẽ:

http://www.cadviet.c...7_haanh2012.dwg

  • 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

rất cảm ơn.Như Bác Doan Van Ha nói,em cũng giải phương trình x-sinx=a bằng máy tính casio nhưng kết quả rất thất thường,lúc đúng lúc sai tai vi nó phụ thuộc vào khoảng chọn nghiêm.Thanks tất cả.Mình sẽ dùng cái này.thanks!

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ẽ bằng AutoCAD cũng ngon lắm!

Kết quả đây: H= 1067,6029476 ,Area = 2000000.0001

http://www.cadviet.c...7_haanh2012.dwg

Em có thể nêu cách vẽ của em được không?

Anh xây dựng được Lisp tính dần theo phương pháp gần đúng

Chính xác 4 con số 0 sau dấu phẩy.

Đây là code


(defun c:hvphan(/ cir R s delta Res B)
 (setq Cir (car(entsel "\nPick vao duong tron :")))
 (setq R (/ (cdr(assoc 40 (entget Cir))) 1000.))
 (setq s (getreal "\n Dien tich s (m2) :") )
 (setq delta (/ pi 100000))
 (Setq Res 0.0 b (/ s R))
(if (< s (* pi R R) )
(progn
 (while (< Res s)
   (setq Res (- (* b R R 0.5) (/ (* R R (sin B)) 2.0) ) )
   (setq b (+ b delta))
 )
 (setq delta (/ pi 90000000000))
 (while (> Res s)
   (setq Res (- (* b R R 0.5) (/ (* R R (sin B)) 2.0) ) )
   (setq b (- b delta))
 )
   (setq b (+ b delta delta))
   (setq Res (- (* b R R 0.5) (/ (* R R (sin B)) 2.0) ) )

 (alert (strcat "S=" (rtos (* Res 1000000.) 2 6) "\nh="
	(rtos (* (- R (* R (cos (/ b 2)))) 1000.) 2 6)
)
 )
)
)
)

  • 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

Cái này muốn tính đến sai số bao nhiêu cũng được (/=0), rất nhanh.

;Doan Van Ha - CADViet.com - Ngay 10/4/2012
;Muc dich: Ve Line xac dinh muc chat long theo dien tich (dien tich tinh theo don vi ve).
(defun C:HA( / ent dt ss cen bk h h1 h2 sinap/2 cosap/2 sinap ap)
(setq ent (car (entsel "\nChon Circle: ")))
(initget 7) (setq dt (getreal "\nDien tich: "))
(setq cen (cdr (assoc 10 (entget ent))))
(setq bk (cdr (assoc 40 (entget ent))))
(if (> dt (* pi bk bk))
 (alert "Dien tich nay lon hon dien tich Circle: vo ly!")
 (progn
  (initget 7) (setq ss (getreal "\nSai so toi da: "))
  (setq h1 0 h bk h2 (* 2 bk))
  (while (> (abs (- dt (HA bk h))) ss)
(if (> (- (HA bk h) dt) ss)
(setq h1 (- h (/ (- h2 h1) 2)) h2 h h (/ (+ h1 h2) 2))	;=>h giam
(setq h2 (+ h (/ (- h2 h1) 2)) h1 h h  (/ (+ h1 h2) 2))))	;=>h tang
  (entmake (list (cons 0 "LINE") (cons 10 (polar cen (- (/ ap 2) (/ pi 2)) bk)) (cons 11 (polar cen (+ (/ ap -2) (/ pi -2)) bk))))))
(princ))
(defun HA(r h)
(setq sinap/2 (/ (sqrt (- (expt r 2) (expt (- r h) 2))) r))
(setq cosap/2 (/ (- r h) r))
(setq sinap (* 2 sinap/2 cosap/2))
(cond
 ((<= cosap/2 (/ (sqrt 2) -2)) (setq ap (+ (* 2 pi) (asin sinap))))
 ((< cosap/2 (/ (sqrt 2) 2)) (setq ap (- pi (asin sinap))))
 ((>= cosap/2 (/ (sqrt 2) 2)) (setq ap (asin sinap))))
(- (* 0.5 ap r r) (* 0.5 sinap r r)))
;----- ArcSine - Lee Mac, Args: -1 <= x <= 1
(defun asin (x) (cond ((< 1.0 (abs x)) nil) ((equal (abs x) 1.0 1e-8) (* x pi 0.5)) ((atan x (sqrt (- 1.0 (* x x)))))))

  • Vote tăng 3

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  

×