Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Jin Yong

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

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

Tue_NV    3.841

- đọc code anh Tue nhoc còn hiểu mang máng, qua code anh Ket ngủm lun  :P

 

Nhóc tự viết thử dựa trên gợi ý của Ket thử xem.

Tham khảo : http://www.cadviet.com/forum/topic/14210-hoi-ve-lisp-thuat-toan-y-tuong-coding/page-25

  • 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
nhoclangbat    382

- hi về công năng thì code anh Tue với anh Ket thì nhoc nắm đc rùi ^^, nhoc chỉ ngán thuật toán của anh Ket chỗ hàm h<->d, nhoc vẫn chưa rành về thằng đó, khi nào có cơ hội nhoc sẽ nghiên cứu , gần cuối năm mí sếp dí tuột quần  :P

- tạm thời mót về để dành khi nào xài tính tiếp hehe

- câu hỏi này của Vinh chắc để viết gì đó, để Vinh nghiên cứu chờ xem Vinh mún làm gì ^^

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
ketxu    2.652

Hàm h<->d k phải a viết nhé nhoclangbat

Toàn bộ code trong defun đó bỏ qua. Vấn đề a nói tới ở đây là code của a và của bác Tue_NV sẽ trả về kết quả khác nhau tùy trường hợp

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
ketxu    2.652

Hàm h<->d k phải a viết nhé nhoclangbat

Toàn bộ code trong defun đó bỏ qua. Vấn đề a nói tới ở đây là code của a và của bác Tue_NV sẽ trả về kết quả khác nhau tùy trường hợp

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 ơi cho em hỏi cái, em có 2 điểm M (a, b ) , N (c,d). Làm thế nào để trả về giá trị góc của đoạn thẳng M, N này thế các bác (góc trả về giá trị từ 0 đến 360 độ ấy). 2 điểm này được lấy giá trị trong quá trình tính toán chứ không phải nhập từ màn hình nha các bác. Em đã viết code như này nhưng có vẻ không ổn:

(defun testgoc( a b c d )
( setq m (list a b)
       n (list c d)
       goc (* (/ (getangle m n) pi) 180.0) 
)
)

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

Chào các bác , cho em hỏi khi em viết hàm tính góc thì kết quả lại có sai số với kết quả trả về của kết quả đo góc trên cad, các bác giải thích hộ em với, code đây:

(defun testgoc( a b c d )
( setq goc (angle (list a b) (list c d))
	   goc (/ (* 180.0 goc ) pi)   
)
)

Command: (testgoc 0 0 4.5713 2.8938)
32.3353

kết quả đo của cad: 32.3355.

Sai số ở đây là 0.0002 độ. Theo phán đoán của em có thể là giá trị  số thực trong autolisp chỉ được lấy đến 4 số sau dấu phẩy, có cách nào khắc phục vấn đề này không các bá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
Doan Van Ha    2.677

Chào các bác , cho em hỏi khi em viết hàm tính góc thì kết quả lại có sai số với kết quả trả về của kết quả đo góc trên cad, các bác giải thích hộ em với, code đây:

Command: (testgoc 0 0 4.5713 2.8938)

32.3353

kết quả đo của cad: 32.3355.

Sai số ở đây là 0.0002 độ. Theo phán đoán của em có thể là giá trị  số thực trong autolisp chỉ được lấy đến 4 số sau dấu phẩy, có cách nào khắc phục vấn đề này không các bác

Không phải là do lisp giới hạn 4 số sau dấu phẩy, mà chính là do bạn chỉ nhập 4 số sau dấu phẩy và xuất ra 4 số sau dấu phẩy.

Con số màu đỏ (3 và 8) có thể là gần đúng do làm tròn thì con số màu xanh (3 và 5) cũng là gần đúng >> sai số.

Muốn giảm sai số thì nhập nhiều số lẻ hơn.

  • 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
Doan Van Ha    2.677

Thanks Bác @ Doan Van Ha. Nhưng mà khi em kiểm tra lại bằng biểu thức đơn giản như thế này cũng đâu có trả ra số lẻ như số nhập vào đâu bác:

 

Command: (* 2.12345678 2.00000001)

4.24691

Bạn hỏi đúng 1 câu hỏi rất hay! Tôi biết đến đâu thì trả lời đến đó vậy.

Cad chỉ thể hiện kết quả các phép tính tối đa là 5 chữ số sau dấu phẩy, vì sao chỉ đến 5 thì tôi nhớ có đọc 1 lần nhưng giờ quên rồi.

Tuy nhiên, đây chỉ là cách thể hiện chứ không phải là 1 con số đúng tuyệt đối. Như ví dụ trên thì kết quả đúng không phải là 4.24691 mà là 1 số khác, nó là 4.246913581234568, nhưng cad chỉ display 5 chữ số lẻ mà thôi.

Bạn xem 5 ví dụ dưới đây sẽ hiểu bản chất là cad không sai:

Command: (= (* 2.12345678 2.00000001) 4.24691) >> nil

Command: (- (* 2.12345678 2.00000001) 4.24691) >> 3.58123e-006

Command: (- (* 2.12345678 2.00000001) 4.246913581234568) >> 0.0

Command: (rtos (* 2.12345678 2.00000001) 2 16) >> "4.246913581234568"

Command: (= (* 2.12345678 2.00000001) 4.246913581234568) >> T

  • 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
Doan Van Ha    2.677

Hi hi, em đã sáng ra nhiều rồi, nhờ mỗi bác chỉ cho một ít nên bức sương mù về autolisp đang tan dần. :D

Chưa tan nổi đâu. Càng sâu càng có nhiều lớp mây mù khác. :)

  • 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ác bác ơi cho em hỏi có 2 điểm A (xa,ya), B (xb, yb), làm thế nào để mình gán nó thành một đoạn thẳng các bác, ví dụ như là

 ( setq a (hàm ....A(xa,ya), b(xb, yb)...)

Mục đích của em là viết code tạo đối tượng line khi biết toạ độ 2 đầu đoạn thẳng để đem nó đi copy, array, vv...

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
Doan Van Ha    2.677

Bạn nghiên cứu các hàm entmake(x). Ví dụ tạo 1 line đi qua p1 và p2.

(setq ln (entmakex (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2))))

  • 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

- đến Chương 8 Hieu sẽ đc học về hàm entmake ^^

 Để giải quyết công việc tớ phải "cầm đèn chạy trước ô tô"  @nhóc ạ. Mong rằng đến khi hết thời gian khoá học tớ đã lên được đến level 8 :D .

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
nhoclangbat    382

-mấy anh cho nhoc hỏi xíu ^^

- như trên casio vd: cos(@) = x, mình có x rùi mún tìm @ thì mình shift cos x

- vậy trong lsp mình dùng cách nào để tìm góc @ khi đã có đc x, nhoc đang nghiên cứu mà chưa 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
Doan Van Ha    2.677

Dùng hàm tự tạo acos. Tham khảo:

 

(defun tan ( x )
 (if (not (equal 0. (cos x) 1e-8)) (/ (sin x) (cos x))))
 
(defun tan ( x )
 (if (not (equal 0. (cos x) 1e-8)) (/ (sin x) (cos x))))
(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)))))))
(defun acos ( x )
 (cond ((< 1.0 (abs x)) nil) ((equal (abs x) 1.0 1e-8) (/ pi 2.)) ((atan (sqrt (- 1.0 (* x x))) x))))
 
(defun tan ( x )
 (if (not (equal 0. (cos x) 1e-8)) (/ (sin x) (cos x))))
  • 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


×