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

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

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

Tile1 :boxed_column

Tile2 :button

Tile3 :button

Tile4 :boxed_row

Tile5 :button

Tile6 :button

Chỉnh sửa theo duy782006
  • 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ác Hà cho em chen ngang tí nhé!

Các bác bên Autolisp chơi vui quá, em chuyển đố vui AutoCAD sang đây, các bác thử viết lisp xem sao???

Xin mời các bác tiếp tục thư giãn!

 

vui1111.jpg

(Cho đường spline và đoạn thẳng line mầu xanh lá cây bên ngoài có tọa độ xem trong ảnh, hãy vẽ hai đường thẳng mầu xanh nước biển// và tiếp xúc với spline tại hai điểm như hình vẽ).

Các bác mở File bản vẽ của em ra kiểm tra thử bằng 2 cách :

- Gõ ID di chuột vào tiếp điểm, khi thấy hiện lên chữ Intersetction thì bấm chuột nó sẽ hiện ra tọa độ của tiếp điểm và nó chỉ có duy nhất một tiếp điểm mà thôi.

- Dùng lệnh trim, chọn đường spline rồi …sẽ biết nó đúng là tiếp điểm. File bản vẽ em đã dựng thử đây:

http://www.cadviet.c...678_dovuiha.dwg

Xin mời các bác giải đố cho 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

@Hoan: bạn đã khéo "lót tay" nhỉ! Cái này viết lisp thì không có gì khó khăn, chỉ khó khăn là không chính xác tuyệt đối được (chỉ gần đúng thôi).

Giờ về nhà cái đã, tối hẵng hay.

  • 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ác Duy đúng 1 đáp án. Còn đáp án khác nữa!

 

Tile1 :boxed_column

Tile2 :button

Tile3 :button

Tile4 :boxed_column

Tile5 :button

Tile6 :button

 

Đáp án này cũng được chẳng qua dưới cái đỏ đó phải thêm row nửa

  • 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âu đố ở bài #250, bác Duy mới chỉ đưa ra được 1 đáp án. Còn đáp án khác nữa. Ai rảnh thì mại dzô: tên của 6 tile đó là 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

@Hoan: bạn đã khéo "lót tay" nhỉ! Cái này viết lisp thì không có gì khó khăn, chỉ khó khăn là không chính xác tuyệt đối được (chỉ gần đúng thôi).

Giờ về nhà cái đã, tối hẵng hay.

Không phải là lót tay đâu bác ơi, em bù lỗ cho bác những hôm giá vàng tăng đột biến đó mà!

Sáng nay em mới ăn sáng được 1 bữa đã hết tiền rồi bác ạ! Nhìn cái món Tile4 :boxed_column hấp dẫn của bác Duy782006 em tò mò lắm, thèm ăn lắm, chỉ tiếc là hết tiền đành nhịn đói vậy.

Spam tí: mới sáng tinh mơ mà bạn Hoan2182 đã hết quyền vote. Tiêu xài phung phí cỡ đó hèn chi dạo này vàng tăng miết!

Về câu đố vẽ tiếp điểm //, chị Hà em nói là: Nếu câu đố vẽ đường spline khép kín thì chắc chắn là anh Tuệ sẽ có đáp án ngay, nên chị Hà em đã vòng vo Tam Quốc, vẽ cái spline như một mê lộ như thế....

Bác Hà thử xóa hai đường tiếp xúc với đường spline rồi vẽ lại xem sao? (Đây có thể gọi là gợ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âu đố ở bài #250 xem như chưa có lời giải đáp ngon, trừ bác Duy đưa ra lời giải chính thống. Tôi chờ và đưa sẽ đưa ra đáp án sau.

Câu đố mới cuối tuần:

Tôi có 1 string mà các ký tự cách nhau bởi 1 ký tự trống, ví dụ như "1 2 3 4 5 6...".

Hỏi: hãy thiết lập hàm để chuyển string này thành 1 list, ví dụ tương ứng (1 2 3 4 5 6...).

Điều kiện: hàm mà bạn thiết lập phải sử dụng số lượng hàm ít nhất.

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: bác tẩu hỏa nhập ma :lol:

@Hoan: lỡ hứa với bạn, nhưng đang bận, nên chừ mới mần xong lisp. Thằng này chơi hàng hoạt chứ không chơi lẻ tẻ vài ba em nhọc sức.

http://www.cadviet.com/upfiles/3/67029_do_vui_tiep_tuyen.dwg

67029_do_vui2.png


;Doan Van Ha - CADViet.com - Ngay 14/10/2012
;Muc dich: Ve cac tiep tuyen voi Curve, song song voi 1 line cho truoc.
(defun C:HA( / ent1 ent2 pd pc len1 len2 goc n m px1 kc1 px2 kc2 px3 kc3)
(if (not cal) (arxload "geomcal"))
(setq ent1 (car (entsel "\nChon duong thang: ")))
(setq ent2 (car (entsel "\nChon Curve: ")))
(setq pd (vlax-curve-getStartPoint ent2))
(setq pc (vlax-curve-getEndPoint ent2))
(setq len1 (vlax-curve-getDistAtParam ent1 (vlax-curve-getEndParam ent1)))
(setq len2 (vlax-curve-getDistAtParam ent2 (vlax-curve-getEndParam ent2)))
(setq goc (angle (setq p1 (cdr (assoc 10 (entget ent1)))) (setq p2 (cdr (assoc 11 (entget ent1))))))
(setq n 1000 m (/ len2 n) kc (- m)) ;do chinh xac 1000, co the edit so nay.
(repeat (- n 2)
 (setq px1 (GetP pd pc (setq kc (+ m kc)) ent2))
 (setq kc1 (cal "dpl(px1,p1,p2)"))
 (setq px2 (GetP pd pc (+ kc m) ent2))
 (setq kc2 (cal "dpl(px2,p1,p2)"))
 (setq px3 (GetP pd pc (+ kc m m) ent2))
 (setq kc3 (cal "dpl(px3,p1,p2)"))
 (if
  (or (and (> kc1 kc2) (> kc3 kc2)) (and (< kc1 kc2) (< kc3 kc2)))
  (entmake (list (cons 0 "LINE") (cons 10 (polar px2 goc (/ len1 2))) (cons 11 (polar px2 (+ goc pi) (/ len1 2)))))))) 
;----- LÊy ®iÓm p trªn Curve c¸ch pg kho¶ng c¸ch kc, víi ph lµ ®iÓm ®Þnh h­íng trªn Curve.
(defun GetP (pg ph kc cur / dg dh dp)
(setq dg (vlax-curve-getDistAtPoint cur pg))
(setq dh (vlax-curve-getDistAtPoint cur ph))
(if (> dh dg)
 (setq dp (+ dg kc))
 (setq dp (- dg kc)))
(vlax-curve-getPointAtDist cur dp))

  • 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âu đố ở bài #250 xem như chưa có lời giải đáp ngon, trừ bác Duy đưa ra lời giải chính thống. Tôi chờ và đưa sẽ đưa ra đáp án sau.

Câu đố mới cuối tuần:

Tôi có 1 string mà các ký tự cách nhau bởi 1 ký tự trống, ví dụ như "1 2 3 4 5 6...".

Hỏi: hãy thiết lập hàm để chuyển string này thành 1 list, ví dụ tương ứng (1 2 3 4 5 6...).

Điều kiện: hàm mà bạn thiết lập phải sử dụng số lượng hàm ít nhất.

Có 1 list : (setq tso '(d b g a h c e f i))

Câu đố : Sắp xếp List theo thứ tự :

(a b c d e f g h i)

Câu trả lời của bác DoanVan Ha ở đây là không đúng :

(vl-sort tso '(lambda (e1 e2) (< e1 e2))) -> sai

 

Nguồn : http://www.cadviet.c...80

Mời các bác tiếp tục.....

  • 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

Chuyện sơ ý giữa "a" và a, chưa kịp srr, sao nhắc hoài ở 2 topic nhỉ?

Hì, Tue_NV tiện thể đem luôn qua đây để giải luôn mà :)

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: bác tẩu hỏa nhập ma :lol:

@Hoan: lỡ hứa với bạn, nhưng đang bận, nên chừ mới mần xong lisp. Thằng này chơi hàng hoạt chứ không chơi lẻ tẻ vài ba em nhọc sức.

http://www.cadviet.c..._tiep_tuyen.dwg

67029_do_vui2.png


;Doan Van Ha - CADViet.com - Ngay 14/10/2012
;Muc dich: Ve cac tiep tuyen voi Curve, song song voi 1 line cho truoc.
(defun C:HA( / ent1 ent2 pd pc len1 len2 goc n m px1 kc1 px2 kc2 px3 kc3)
(if (not cal) (arxload "geomcal"))
(setq ent1 (car (entsel "\nChon duong thang: ")))
(setq ent2 (car (entsel "\nChon Curve: ")))
(setq pd (vlax-curve-getStartPoint ent2))
(setq pc (vlax-curve-getEndPoint ent2))
(setq len1 (vlax-curve-getDistAtParam ent1 (vlax-curve-getEndParam ent1)))
(setq len2 (vlax-curve-getDistAtParam ent2 (vlax-curve-getEndParam ent2)))
(setq goc (angle (setq p1 (cdr (assoc 10 (entget ent1)))) (setq p2 (cdr (assoc 11 (entget ent1))))))
(setq n 1000 m (/ len2 n) kc (- m)) ;do chinh xac 1000, co the edit so nay.
(repeat (- n 2)
 (setq px1 (GetP pd pc (setq kc (+ m kc)) ent2))
 (setq kc1 (cal "dpl(px1,p1,p2)"))
 (setq px2 (GetP pd pc (+ kc m) ent2))
 (setq kc2 (cal "dpl(px2,p1,p2)"))
 (setq px3 (GetP pd pc (+ kc m m) ent2))
 (setq kc3 (cal "dpl(px3,p1,p2)"))
 (if
  (or (and (> kc1 kc2) (> kc3 kc2)) (and (< kc1 kc2) (< kc3 kc2)))
  (entmake (list (cons 0 "LINE") (cons 10 (polar px2 goc (/ len1 2))) (cons 11 (polar px2 (+ goc pi) (/ len1 2))))))))
;----- LÊy ®iÓm p trªn Curve c¸ch pg kho¶ng c¸ch kc, víi ph lµ ®iÓm ®Þnh h­íng trªn Curve.
(defun GetP (pg ph kc cur / dg dh dp)
(setq dg (vlax-curve-getDistAtPoint cur pg))
(setq dh (vlax-curve-getDistAtPoint cur ph))
(if (> dh dg)
 (setq dp (+ dg kc))
 (setq dp (- dg kc)))
(vlax-curve-getPointAtDist cur dp))

Em chưa thử xem lisp của bác, xem có nhanh hơn AutoCAD2013 không??? (AutoCAD2013 chỉ sử dụng 2 lệnh duy nhất thôi bác ạ)

 

Nhưng em vui lắm anh Hà ơi! :rolleyes: :rolleyes: (Xin phép bác Hà cho em gọi bác bằng anh như chị Hà em và em vẫn gọi anh Tuệ bằng anh cho thân mật, gọi bằng bác xã giao lắm. Em chưa biết tuổi bác bao nhiêu, cơ mà quan trọng gì về tuổi tác và cách xưng hô phải không anh? Em thì đã bước sang tuổi băm rồi, thời gian trôi đi nhanh quá... em sợ cái băm mốt, băm hai, băm ba, và ... băm chín lắm lắm ứ!

Làm anh khó lắm đấy anh Hà ạ! Này nhé: Nào là làm anh phải nhường nhịn em này, nào là sắp tới có thời gian rảnh em sẽ học lớp lisp của bác Ketxu, làm anh là phải kèm cặp em đến nơi đến chốn này. Nào là em có hay hỏi vặt làm anh cũng phải nể tình mà gõ đầu nhè nhẹ như một cánh hoa rơi vào đầu em thôi này.....hi hi@ :rolleyes:

 

Về cái câu đố của chị Hà em, chị nói với em là tiếp theo câu đố ấy, chị Hà em sẽ ra câu đố về vẽ các đường tiếp tuyến chung giữa hai em... lip ( hình ellipse) có vị trí bất kỳ.

Về cách vẽ các đường tiếp tuyến chung giữa hai hình ellipse em vẫn chưa biết cách làm đâu, hỏi chị Hà em , chị không nói bắt em phảit tự nghĩ .

Thôi thì tiện đây em cũng cầm đèn chạy trước xe tăng, nhờ anh viết luôn lisp nhé, em thích lisp lắm!

 

Xin mời các bác cùng thư giãn: Vẽ nhanh các đường tiếp tuyến chung giữa hai hình ellipse có vị trí bất kỳ???

Điều kiện đính kèm: Sử dụng AutoCAD hoặc sử dụng AuotLISP miễn là phải nhanh!

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 : mình cứ đinh ninh những cách vẽ này dùng XLine là ra (chưa test) ? Mà bên này là sử dụng lisp hoan2182 nhé ^^

  • 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

Em chưa test nhưng chắc là được anh Ketxu ạ!

Mà bên này là sử dụng lisp hoan2182 nhé ^^ : Vâng ạ, em hiểu rồi!

 

Dù sao thì em vẫn cám ơn anh chủ thớt Ketxu rất nhiều! Nhờ có thớt của anh mà đố vui AutoCAD được giải bằng AutoLISP. Nếu cứ để nó bên AutoCAD thì chắc là ....không bao giờ có :

<pre class="cadvietlispcode">;Doan Van Ha - CADViet.com - Ngay 14/10/2012;Muc dich: Ve cac tiep tuyen voi Curve, song song voi 1 line cho truoc.(defun C:HA( / ent1 ent2 pd pc len1 len2 goc n m px1 kc1 px2 kc2 px3 kc3)</pre>

  • 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

AutoCAD 2013 đúng là "siêu phẩm trong mơ" :“Giúp bạn quét các đối tượng dẽ dàng hơn, truy bắt điểm chính xác hơn với sự hỗ trợ hơn 2 tỷ điểm trên màn hình thao tác” (Nguồn : http://fullvn.com/au...ack-mediafire-2)

 

Anh Hà ơi! Em đã vừa chạy thử lisp của anh, hay thiệt đó, anh Hà ạ! Đúng như anh đã nói: "Thằng này chơi hàng hoạt chứ không chơi lẻ tẻ vài ba em nhọc sức." :rolleyes: :rolleyes:

Em đo thử khoảng cách 2 đường // kết quả:

Dimaligned = 41.33211356 (Hoan2182)

Dimaligned = 41.33072594 (Doan Van Ha)

Em hoang mang quá, nếu kết quả của em đúng thì anh chỉ đạt độ chính xác đến 0.00 và ngược lại…

Trong ngành chế tạo máy, sai lệnh cho phép giới hạn đến 0.000 , sản phẩn chỉ cần gia công chính xác đến 0.00 là máy đã chạy ầm ầm rồi. >>> Kết luận: Lisp của anh dùng được.

Em có thắc mắc, kết quả đo khác nhau, độ chính xác của một cái chỉ đạt 0.00 , vậy mà khi dùng lệnh trim cắt thử để kiểm tra sự tiếp xúc thì vẫn ổn mới khó hiểu?????

Bác nào quan tâm đến lisp này giải thích cho em vớ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

Như anh đã nói từ đầu rồi mà Hoan: với những bài toán kiểu này lisp không đạt chính xác tuyệt đối được. Phương pháp chung là vi phân đường cong, mà đã vi phân thì không tuyệt đối. Em muốn tăng độ chính xác lên thì sửa con số 1000 thành 10000 hay 100000... (trong lisp ấy). Nhưng, hãy pha trà hay bỏ đá vô li để ngồi mà nhâm nhi nhé!

  • 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

Về cái câu đố của chị Hà em, chị nói với em là tiếp theo câu đố ấy, chị Hà em sẽ ra câu đố về vẽ các đường tiếp tuyến chung giữa hai em... lip ( hình ellipse) có vị trí bất kỳ.

Về cách vẽ các đường tiếp tuyến chung giữa hai hình ellipse em vẫn chưa biết cách làm đâu, hỏi chị Hà em , chị không nói bắt em phảit tự nghĩ .

Thôi thì tiện đây em cũng cầm đèn chạy trước xe tăng, nhờ anh viết luôn lisp nhé, em thích lisp lắm!

Xin mời các bác cùng thư giãn: Vẽ nhanh các đường tiếp tuyến chung giữa hai hình ellipse có vị trí bất kỳ???

Điều kiện đính kèm: Sử dụng AutoCAD hoặc sử dụng AuotLISP miễn là phải nhanh!

Vẽ tiếp tuyến chung của 2 ellipse với Cad thì mất... 3 giây:

XLINE >> TAN >> TAN.

Còn với lisp thì mất... 2 giây :lol: :

(defun C:HA()
(command "xline" "tan" pause "tan" pause))

  • 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âu đố ở bài #250 xem như chưa có lời giải đáp ngon, trừ bác Duy đưa ra lời giải chính thống. Tôi chờ và đưa sẽ đưa ra đáp án sau.

Bác cho lời giải đ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

Tile1 :boxed_column

Tile2 :button

Tile3 :button

Tile4 :boxed_row

Tile5 :button

Tile6 :button

Lời giải:

Các tile 2,3,5,6 thì luôn phải là button như đáp án trên.

Riêng các tile 1 và 4 thì có thể:

1). Tile1: boxed_column hoặc column

2). Tile4: boxed_row hoặc row

Khi row hoặc column có labellabel khác chuỗi trống thì nó tương tự boxed_row và boxed_column!!!!!

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

×