snowman.hms
-
Số lượng nội dung
105 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
9
Bài đăng được đăng bởi snowman.hms
-
-
-
-
1 giờ} trướ}c, Doan Van Ha đã nói:Nếu là index thì chưa đủ. VD khi test với p1 thì có 5 q, p2 có 3 q, p3 có 4 q. Mà tôi thì cần biết đủ q của từng nhóm.
Dù sao cũng cám ơn bạn. Bạn là 1 trong số ít người luôn đưa ra những thuật toán hay, tôi rất thích.
à em k rõ mục đích của bác. chỉ đưa ra vậy thôi. trong lisp có vài điểm: dùng int thì nhanh hơn double, phép so sánh thì nhanh hơn tính toán, array thì nhanh hơn list, dùng sort quá nhiều sẽ gây chậm...
- 1
-
10 giờ trước, Doan Van Ha đã nói:Nhờ bạn giải thích giùm để chỉnh sửa:
1. Hàm của tôi sai ở chỗ nào?2. Test hàm (_map dsp dsq) >> ((0 . 3) (1 . 7) (2 . 10)) nghĩa là sao?
Ah. Xin lỗi bác! Sai ở em, lâu rồi k lisp lủng gì ^^
còn các số kia là index.,
- 1
-
(defun _map (lp lq / f1 f2 f3) ;; where lp = dsQ && lq = dsP (query points) ((lambda (lp lq f1 f2 / l1 l2 a) (setq l1 (f1 (vl-sort lp '(lambda (a b) (< (car a) (car b)))) 0) l2 (f1 (vl-sort lq '(lambda (a b) (< (car a) (car b)))) 0) a (vlax-make-safearray vlax-vbinteger (cons 0 (1- (length lp)))) ) (foreach p l1 (f2 p l2 a)) (f1 (vlax-safearray->list a) -1) ) lp lq (lambda (l i) (mapcar (function (lambda (x) (cons (setq i (1+ i)) x))) l)) (lambda (p l a / d d1 q q1 i) (cond ((null l)) ((setq q (car l) i (car p) p (cdr p) l (cdr l) d (distance p (cdr q)) q1 q) (while l (setq q (car l) l (cdr l)) (cond ((< d (abs (- (car p) (cadr q)))) (setq l nil)) ((< (setq d1 (distance p (cdr q))) d) (setq d d1 q1 q)) ) ) ;;(princ (strcat "\n" (vl-prin1-to-string (list (1- i) d (1- (car q1)))))) (vlax-safearray-put-element a (1- i) (1- (car q1))) ) ) ) ) ) ;; (_map dsQ dsP)
- 1
-
There ' someting wrong with your function!
-
Voronoi Cell
-
-
p = vlax-curve-getclosestpointto
pa = vlax-curve-getparamatpoint
cond(
((equal pa (fix pa) 1e-6) (specialCheck...))
(t p)
);cond
-
2 giờ trước, VoHoan đã nói:Hic. Đơn giản và hiệu quả. Cảm ơn bác nhiều.
nop!
-
- Nếu đường cong cần tìm là đường tròn, và nếu điểm tiếp xúc với đường thẳng là điểm cuối (A)
thì
+ tâm đường cong cần tìm nằm trên đường thẳng tại A và vuông góc với đoạn thẳng cho trước
+ khoảng cách từ tâm đường tròn cần tìm (O1) đến tâm đường tròn cho trước = khoảng cách từ điểm đó đến điểm A1 (offset theo cùng hướng một khoảng đúng bằng bán kính đường tròn cho trước)
+ tâm đường tròn cần tìm là giao điểm giữa đường trung trực của OA1 và AA1.
- 1
-
cong khù khoằm có đc ko bạn?
-
bác tính:
- ma trận m1 cho 3 điểm A-B-C.
- ma trận m2 cho 3 điểm A1-B1-C1.
- tính ma trận biến đổi m từ m1,m2
- transfrom M->M1 thông qua m.
- 1
-
Norm3pts
matrix
trans
-
-
Hint : vlr-insert-reactor
First parameter is a VLA-object pointing to the database in which the block is being inserted. ;;----> current database object
Second parameter is a string naming the block to be inserted. ;;-----> Name of the block (or clipboard temp file within local->temp folder
Third parameter is a VLA-object identifying the source database of the block. ;-----> the source database object (where the block being copied belong to)
** Source database Contains :
- Blockname : *Model_Space
- Blockname : *Paper_Space
- Blockname : _Oblique
- Blockname : 2- 1
-
(defun c:tt1 (/ cp dx dy p1 p2)
(setq
cp (getvar "VIEWCTR")
dy (* 0.5 (getvar "VIEWSIZE"))
dx (* 0.5 (* dy (/ (car (getvar "SCREENSIZE"))(cadr (getvar"SCREENSIZE")))))
p1 (mapcar '- cp (list dx dy))
p2 (mapcar '+ cp (list dx dy))
)
(princ
(vl-prin1-to-string
(list 'progn
(list 'setvar "ctab" (getvar 'ctab))
(list 'setq 'p1 (cons 'list p1) 'p2 (cons 'list p2))
(list 'command ".zoom" "w" 'p1 'p2)
)
)
)
(princ)
)- 1
-
@gia_bach với 2 pline phức tạp, cách này ko hiệu quả. Vì nó có thể tạo nhiều region khi thực hiện phép giao region. Thuật toán sẽ phải check in_pline nhiều lần.
Nếu là e, e sẽ làm như này
1. Chọn pline đỏ.
2. Ssget "cp"
3. Lọc ss, những thằng ko intersect thì cho vào result
Những thằng intersect thì _dointersection
Cái dointersection này với tập lớn thì nên build graph với integer index sẽ hiệu quả.
- 1
-
Bác theo thuật toán ở cái link trong này. Tương đối nhanh.
- 1
-
[Hỏi]Đố vui với LISP
trong AutoLisp
6 phút trước, Doan Van Ha đã nói:Đáp án chính xác!
Qua câu hỏi này muốn truyền 1 thông tin mà user khi xử lý chuỗi dạng "nDm" chú ý, nếu không coi chừng lỗi lisp bất tử!
Chữ "D" và "d" hóa ra cũng "gần giống" chữ "E" và chữ "e". Tuy nhiên (type 1E3) là REAL, nhưng (type 1D3) là Nil.
(mapcar '(lambda (x) (princ (strcat "\n(atof \"" x "\") = " (vl-prin1-to-string (atof x)) "\n\t(distof \"" x "\") = " (vl-prin1-to-string (distof x)) ) ) ) '("1D9" "1d9" "2D8" "2D9" "2d8" "2d9" "3D8" "3D9" "3d8" "3d9" "4D8" "4D9" "4d8" "4d9" "5D8" "5D9" "5d8" "5d9" "6D8" "6D9" "6d8" "6d9" "7D8" "7D9" "7d8" "7d9" "8D8" "8D9" "8d8" "8d9" "9D8" "9D9" "9d8" "9d9" ) ) ->> (atof "1D9") = 1.0e+009 (distof "1D9") = nil (atof "1d9") = 1.0e+009 (distof "1d9") = nil (atof "2D8") = 2.0e+008 (distof "2D8") = nil (atof "2D9") = 2.0e+009 (distof "2D9") = nil (atof "2d8") = 2.0e+008 (distof "2d8") = nil (atof "2d9") = 2.0e+009 (distof "2d9") = nil (atof "3D8") = 3.0e+008 (distof "3D8") = nil (atof "3D9") = 3.0e+009 (distof "3D9") = nil (atof "3d8") = 3.0e+008 (distof "3d8") = nil (atof "3d9") = 3.0e+009 (distof "3d9") = nil (atof "4D8") = 4.0e+008 (distof "4D8") = nil (atof "4D9") = 4.0e+009 (distof "4D9") = nil (atof "4d8") = 4.0e+008 (distof "4d8") = nil (atof "4d9") = 4.0e+009 (distof "4d9") = nil (atof "5D8") = 5.0e+008 (distof "5D8") = nil (atof "5D9") = 5.0e+009 (distof "5D9") = nil (atof "5d8") = 5.0e+008 (distof "5d8") = nil (atof "5d9") = 5.0e+009 (distof "5d9") = nil (atof "6D8") = 6.0e+008 (distof "6D8") = nil (atof "6D9") = 6.0e+009 (distof "6D9") = nil (atof "6d8") = 6.0e+008 (distof "6d8") = nil (atof "6d9") = 6.0e+009 (distof "6d9") = nil (atof "7D8") = 7.0e+008 (distof "7D8") = nil (atof "7D9") = 7.0e+009 (distof "7D9") = nil (atof "7d8") = 7.0e+008 (distof "7d8") = nil (atof "7d9") = 7.0e+009 (distof "7d9") = nil (atof "8D8") = 8.0e+008 (distof "8D8") = nil (atof "8D9") = 8.0e+009 (distof "8D9") = nil (atof "8d8") = 8.0e+008 (distof "8d8") = nil (atof "8d9") = 8.0e+009 (distof "8d9") = nil (atof "9D8") = 9.0e+008 (distof "9D8") = nil (atof "9D9") = 9.0e+009 (distof "9D9") = nil (atof "9d8") = 9.0e+008 (distof "9d8") = nil (atof "9d9") = 9.0e+009 (distof "9d9") = nil
- 1
-
[Hỏi]Đố vui với LISP
trong AutoLisp
Vào lúc 2/12/2020 tại 21:54, Doan Van Ha đã nói:Đào lên thư giản nhức đầu cho vui.
Không dùng ký tự "E" và "e", hãy tìm 1 chuỗi có 3 ký tự "ABC" mà giá trị khi hàm atof trả về lớn hơn 123456789.
(> (atof "ABC") 123456789) >> T
("1D9" "1d9" "2D8" "2D9" "2d8" "2d9" "3D8" "3D9" "3d8" "3d9" "4D8" "4D9" "4d8" "4d9" "5D8" "5D9" "5d8" "5d9" "6D8" "6D9" "6d8" "6d9" "7D8" "7D9" "7d8" "7d9" "8D8" "8D9" "8d8" "8d9" "9D8" "9D9" "9d8" "9d9")
- 1
-
Search for fast convexhull. It really much more faster than normal.
- 1
-
ConvexHull->>
-
Hỏi về Lisp (thuật toán, ý tưởng, coding,...)
trong AutoLisp
Đã đăng · Trả lời báo cáo
blocreference(insert) -> blockrecord -> xdict -> acad_evaluation_graph -> blockvisibilityparameter (dxf 360) -> filter dxf 333 (*parameter)
tham khảo bài viết của Gile: https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/get-list-of-parameters-being-used-in-block-without-vla-vlax/m-p/8461420#M378276
http://poleshchuk.spb.ru/cad/2009/tainypod08e.htm