Đến nội dung


Hình ảnh
* * * - - 17 Bình chọn

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


  • Please log in to reply
2851 replies to this topic

#2161 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 15 November 2014 - 09:53 AM

cảm ơn @nhóclangbat, hình như nhóc cũng là dân đo đạc phải không, tớ đang có ý tưởng viết đoạn code để chuyển góc của autocad sang góc phương vị ấy mà. Có gì giúp đỡ bạn tí nha


  • 0

#2162 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 15 November 2014 - 11:31 AM

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


  • 0

#2163 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 15 November 2014 - 12:37 PM

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.


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#2164 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 15 November 2014 - 12:37 PM

- cad của bạn tính nhầm chăng, nhoc test với tọa độ bạn đưa đúng với hàm bạn trả về có 32.3353 ah ^^


  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#2165 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 15 November 2014 - 12:53 PM

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


  • 0

#2166 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 15 November 2014 - 03:33 PM

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


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#2167 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 15 November 2014 - 06:35 PM

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
  • 0

#2168 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 15 November 2014 - 06:45 PM

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


  • 2

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#2169 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 17 November 2014 - 09:43 PM

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


  • 0

#2170 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 17 November 2014 - 10:03 PM

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


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#2171 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 18 November 2014 - 06:42 AM

Thanks bác @Doan Van Ha. Em sẽ tìm hiểu thêm về hàm này
  • 0

#2172 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 18 November 2014 - 07:26 AM

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


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#2173 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 18 November 2014 - 12:56 PM

- đế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 .


  • 0

#2174 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 20 November 2014 - 02:54 PM

-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 ^^
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#2175 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 20 November 2014 - 03:05 PM

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

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#2176 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 20 November 2014 - 03:09 PM

- thanks a Ha áp dụng vô lsp phức tạp thật ^^
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#2177 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 20 November 2014 - 03:30 PM

Nhóc ơi cho hỏi ngoài lề xíu, nhóc muốn tính góc để áp vào việc gì vậy, và số liệu đầu vào tính góc của nhóc là gì vậy. Biết đâu mình có thể giúp được Nhóc


  • 0

#2178 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 20 November 2014 - 03:54 PM

- nhoc đang thử viết lsp tính chênh cao = lượng giác, nhoc viết vui ấy mà ^^
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#2179 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 993 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 21 November 2014 - 07:31 AM

- nhoc đang thử viết lsp tính chênh cao = lượng giác, nhoc viết vui ấy mà ^^

Mục đích là gì vậy em?

Có cùng mục đích với anh không? :D


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#2180 phamhuy1

phamhuy1

    biết vẽ rectang

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

Đã gửi 21 November 2014 - 10:20 AM

Mục đích là gì vậy em?

Có cùng mục đích với anh không? :D

Cho em hỏi anh dùng phần mềm gì quay lại thao tác làm việc trên computer thế a Duân :(


  • 0