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

[Hỏi]Đố vui với LISP

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

Doan Van Ha    2.678

Hàm (write-line (vl-prin1-to-string a) fn)

ghi vào file fn không có " " đâu nè! :)

Sao ngộ vậy. Ví dụ a=12 và a=toi

Thì ghi ra như vầy đây (trích từ file kết quả):

"12"

"toi"

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

Lạ vậy hén bác :) Bác ghi ra file gì và đọc bằng chương trình gì ạ ?

Ủa! Chẳng lẽ Ket xu và Tue_NV đều ghi ra không có ""?

Tôi ghi ra file txt, đọc bằng notepad.

Nếu quả thực 3 người mà có 2 kết quả khác nhau thì chắc sẽ điều gì lý thú nữa đây! Ái chà!

 

P/s : srr bác Tue_NV và Ketxu! Tôi sơ ý nên bị nhầm khi lấy a bởi hàm getstring. OK rồ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
Doan Van Ha    2.678

Lâu quá rồi các bác ơi, mà sao không ai đưa câu đố vui nào lên để cùng nhau giải stress?

Nhớ nó, làm một câu ngăn ngắn cho vui:

Trên bản vẽ có 3 điểm p1, p2, p3 và 1 đường tròn C bán kính bất kỳ đi qua p3.

Hãy viết 1 hàm lisp để vẽ đường thẳng nối tâm của C và trung điểm của p1p2.

Điều kiện: càng dùng ít cặp dấu ngoặc () càng tốt. Nếu số cặp () lớn hơn 5 thì được coi là rớt từ vòng gởi xe :lol:

[có thể sử dụng bất cứ hàm gì để viế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
Hai_YenLang    150

Lâu quá rồi các bác ơi, mà sao không ai đưa câu đố vui nào lên để cùng nhau giải stress?

Nhớ nó, làm một câu ngăn ngắn cho vui:

Trên bản vẽ có 3 điểm p1, p2, p3 và 1 đường tròn C bán kính bất kỳ đi qua p3.

Hãy viết 1 hàm lisp để vẽ đường thẳng nối tâm của C và trung điểm của p1p2.

Điều kiện: càng dùng ít cặp dấu ngoặc () càng tốt. Nếu số cặp () lớn hơn 5 thì được coi là rớt từ vòng gởi xe :lol:

[có thể sử dụng bất cứ hàm gì để viết]

Em không hiểu "1 hàm lisp để vẽ đường thẳng nối tâm của C và trung điểm của p1p2." ứng dụng gì trong việc viết lisp ?

(Nếu viết lisp để vẽ đường thẳng nối tâm từ một điểm đến trung điểm của hai điểm thì AutoCAD đã làm được ngon lành bằng cách gõ mtp....)

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
Tue_NV    3.841

Lâu quá rồi các bác ơi, mà sao không ai đưa câu đố vui nào lên để cùng nhau giải stress?

Nhớ nó, làm một câu ngăn ngắn cho vui:

Trên bản vẽ có 3 điểm p1, p2, p3 và 1 đường tròn C bán kính bất kỳ đi qua p3.

Hãy viết 1 hàm lisp để vẽ đường thẳng nối tâm của C và trung điểm của p1p2.

Điều kiện: càng dùng ít cặp dấu ngoặc () càng tốt. Nếu số cặp () lớn hơn 5 thì được coi là rớt từ vòng gởi xe :lol:

[có thể sử dụng bất cứ hàm gì để viết]

Câu này dễ quá!!!! :lol:


(defun ttt(p1 p2 p3)
 (command "line" (acet-geom-midpoint p1 p2) (osnap p3 "cen") "")
)

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

Câu này dễ quá!!!! :lol:

(defun ttt(p1 p2 p3)
 (command "line" (acet-geom-midpoint p1 p2) (osnap p3 "cen") "")
)

Dễ quá cho nên bác chỉ mới lọt qua vòng gởi xe :lol:

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

Em không hiểu "1 hàm lisp để vẽ đường thẳng nối tâm của C và trung điểm của p1p2." ứng dụng gì trong việc viết lisp ?

(Nếu viết lisp để vẽ đường thẳng nối tâm từ một điểm đến trung điểm của hai điểm thì AutoCAD đã làm được ngon lành bằng cách gõ mtp....)

Topic này là để đố vui với lisp, nên nhiều khi nó vô tích sự so với cad. Nhưng đôi lúc từ cái vô tích sự đó chúng ta lại học hỏi được vài điều tích sự. :lol:

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
Tue_NV    3.841

Dễ quá cho nên bác chỉ mới lọt qua vòng gởi xe :lol:

Tue_NV qua tiếp đây bác :lol:


(defun ttt(p1 p2 p3)
 (command "line" "mtp" p1 p2 "cen" p3 "")
)

  • 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
ketxu    2.653

gặp n đường tròn cùng đi qua p3 thì bùn :) với điều kiện trên thì điểm thứ 2 ở đâu cũng thỏa logic :D

 

 

  • 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
Hai_YenLang    150

gặp n đường tròn cùng đi qua p3 thì bùn :) với điều kiện trên thì điểm thứ 2 ở đâu cũng thỏa logic :D

Trời! Đề ra là 1 đường tròn C bán kính bất kỳ đi qua p3!

Bác giả thiết vậy, chả hóa ra là 3 điểm P1, P2 và P3 trùng nhau thì sao 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
Doan Van Ha    2.678

@ Ketxu: đây chỉ là 1 câu đố vui, cốt để mọi người biết "m2p" và "cen", chứ nếu nêu ra đ/k "trên bản vẽ chỉ có 1 đường tròn... " thì mất vui.

@Hai_Yenlang: 3 điểm trùng nhau thì kệ, có sao đâu hè.

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
Tue_NV    3.841

@ Ketxu: đây chỉ là 1 câu đố vui, cốt để mọi người biết "m2p" và "cen", chứ nếu nêu ra đ/k "trên bản vẽ chỉ có 1 đường tròn... " thì mất vui.

@Hai_Yenlang: 3 điểm trùng nhau thì kệ, có sao đâu hè.

Tue_NV giải đố, cốt để mọi người biết thêm về hàm OSNAP :rolleyes:

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
hoan2182    836

P/S : Quán gió nhà bác Ketxu đìu hiu quá! Em vào đây chém gió tí :rolleyes: > Đây không phải là đố vui mà là câu hỏi hay có thể hiểu là viết lisp theo [yêu cầu]. Nếu có sai chủ đề mong các bác thông cảm, em lười không muốn lập topic mới!

 

Bài toán vẽ đoạn vuông góc chung giữa hai đường thẳng chéo nhau trong không khí, đã có lời giải của bác Phamngoctukts. Ngày trước em đã phải vật vã với nó hơi bị mất thời gian khi phải xác định vị trí và độ dài của đoạn vuông góc chung >giờ em muốn nhờ các bác viết lisp với thông số là 2 đường thẳng chéo nhau, thao tác lisp là chọn 2 đường thẳng nó sẽ vẽ 2 point và cho biết khoảng cách giữa hai điểm đánh số thứ tự P1- P1= 35 chẳng hạn. Nếu trên bản vẽ có nhiều đường chéo nhau thì bấm chọn liên tục nó sẽ đánh số thứ tự P2-P2 = ... , Pn-Pn= ...Hoặc đơn giản là chỉ cần vẽ hai đường thẳng thôi quý hóa các bác ạ!

 

Mình có cách này bạn than khảo nhé. Copy d2 cắt d1 (bắt điểm nearest) gọi là d1'. Dựng hình bình hành ABCD từ các đỉnh của d1 d1'. Extrude hình bình hành này với chiều cao là bắt điểm trên d2. Nối đỉnh A' C' trên của hình bình hành đã extrude cắt d2 tại o. Từ o vẽ đường vuông góc với d1 ta được đường vuông góc chung. Do mình dùng điện thoại nên không có hình minh hoạ được bạn thông cảm nhé.

BS: Vừa có mạng mình tranh thủ up ảnh lên cho bạn xem

ddddddd.jpg

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
hoan2182    836

Hì hì hì... :D Em chỉ có tội nhưng em không có lỗi đâu bác ơi! Thật vui khi em nhận được lisp của bác có tên lệnh HA !

Tình hình là công việc của em không liên quan đến vẽ nữa hơn một năm rồi. Trước kia em đã mắc nghiện diễn đàn, ngày nào cũng phải cập nhật thông tin mới một 2 lần.

Từ ngày bố mẹ em, cho em đi ở riêng, em mới cai nghiện được. Từ bữa chị Hà em, nhờ em đính chính câu đố đến nay em lại tái nghiện rồi! :rolleyes: Em đang bắt đầu cai nghiện dần dần từ hôm nay bác ạ, cũng là do hoàn cảnh công việc.

 

Nếu "thao tác lisp là chọn 2 đường thẳng nó sẽ vẽ 2 point và cho biết khoảng cách giữa hai điểm đánh số thứ tự P1- P1= 35 chẳng hạn. Nếu trên bản vẽ có nhiều đường chéo nhau thì bấm chọn liên tục nó sẽ đánh số thứ tự P2-P2 = ... , Pn-Pn= ..."sẽ tiện hơn.

Cơ mà thôi có lisp hiện tại của bác dùng cũng tốt đẹp rồi. Em cũng không có nhu cầu dùng nữa, chỉ vào đây thư giãn cho vui thôi 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.678

Thấy topic vắng vẻ lâu quá, hôm nay nhân tiện từ 1 câu hỏi ở topic khác, mở cửa lại topic này bằng 1 câu đố cho vui:

Hình vẽ là 1 Lwpolyline (màu trắng), bên trong nó là 2 line (màu đỏ).

Lisp dưới đây dùng để chọn các đối tượng nằm trong 1 Lwpolyline.

Hỏi: tại sao dùng lisp này thì không thể chọn được 2 line màu đỏ.

file cad: http://www.cadviet.c...7029_do_vui.dwg

file lisp:

(defun C:HA()
(sssetfirst nil (ssget "wp" (acet-geom-vertex-list (car (entsel "\n Chon Pline: "))))))

67029_do_vui.png

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
Tue_NV    3.841

Thấy topic vắng vẻ lâu quá, hôm nay nhân tiện từ 1 câu hỏi ở topic khác, mở cửa lại topic này bằng 1 câu đố cho vui:

Hình vẽ là 1 Lwpolyline (màu trắng), bên trong nó là 2 line (màu đỏ).

Lisp dưới đây dùng để chọn các đối tượng nằm trong 1 Lwpolyline.

Hỏi: tại sao dùng lisp này thì không thể chọn được 2 line màu đỏ.

file cad: http://www.cadviet.c...7029_do_vui.dwg

file lisp:

(defun C:HA()
(sssetfirst nil (ssget "wp" (acet-geom-vertex-list (car (entsel "\n Chon Pline: "))))))

Cái này mình đã từng gặp rồi. Không những kiểu "wp" mà kiểu "cp" hay "f" cũng thế

Khi 2 điểm (trong list) bị trùng nhau (bất kì) thì không chọn được đối tượng

Cụ tỉ là cái Pline này có điểm đầu trùng điểm cuối (do viết bằng hàm acet-geom-vertex-list )

Loại bỏ 1 điểm trùng này là sẽ chọn được liề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
ketxu    2.653

Thấy topic vắng vẻ lâu quá, hôm nay nhân tiện từ 1 câu hỏi ở topic khác, mở cửa lại topic này bằng 1 câu đố cho vui:

Hình vẽ là 1 Lwpolyline (màu trắng), bên trong nó là 2 line (màu đỏ).

Lisp dưới đây dùng để chọn các đối tượng nằm trong 1 Lwpolyline.

Hỏi: tại sao dùng lisp này thì không thể chọn được 2 line màu đỏ.

file cad: http://www.cadviet.c...7029_do_vui.dwg

file lisp:

(defun C:HA()
(sssetfirst nil (ssget "wp" (acet-geom-vertex-list (car (entsel "\n Chon Pline: "))))))

 

 

Yêu cầu của pt_list :

The pt_list variable cannot contain points that define zero-length segments.

Trong list có tọa độ (46.9972 28.3729 0.0) dup 2 lần, tối kỵ khi vẽ, nhưng người ta đã lỡ thì mình phải đỡ ^^

 

=> giải quyết : Loại bỏ thằng point trùng hoặc flatten đối tượng bao :)

  • 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
Tue_NV    3.841

Có thể mình nói chưa rõ, ý là Cái thằng trùng nhau mà liên tiếp vầy thì không chọn được

 

((47.7723 17.1523 0.0) (49.487 17.5466 0.0) (50.9959 18.4516 0.0)

(52.1514 19.7785 0.0) (52.8402 21.3975 0.0) (52.995 23.1501 0.0) (52.6007

24.8648 0.0) (51.6958 26.3738 0.0) (50.3689 27.5292 0.0) (48.7499 28.2181 0.0)

(46.9972 28.3729 0.0) (46.9972 28.3729 0.0) (45.2825 27.9786 0.0) (43.7736

27.0736 0.0) (42.6181 25.7467 0.0) (41.9293 24.1277 0.0) (41.7745 22.3751 0.0)

(42.1688 20.6604 0.0) (43.0737 19.1514 0.0) (44.4006 17.996 0.0) (46.0196

17.3071 0.0) (47.7723 17.1523 0.0) (47.7723 17.1523 0.0))

 

-> Hàm acet-geom-vertex-list trả điểm cuối trùng điểm đầu nên không chọn được

Cái yêu cầu này đã từng gặp ở đây rồi:

http://www.cadviet.com/forum/index.php?showtopic=56782

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

Đúng là nếu có 1 cặp điểm mà điểm cuối đoạn trước trùng (equal fuzz thôi) điểm đầu đoạn sau thì có chuyện như đã nói ở trên. Xử thì loại bớt thôi. Kết thúc câu đố!

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


×