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

ndtnv

Thành viên
  • Số lượng nội dung

    548
  • Đã tham gia

  • Lần ghé thăm cuối

  • Ngày trúng

    46

Bài đăng được đăng bởi ndtnv


  1. Tôi dùng cad 2010 nên "OSOPTIONS" cũng chỉ có giá trị 0-3

    Xem ảnh và GG thì thấy cad đời mới có thêm bit 4 cho dimension extension lines.

    Trong tương lai có thể thêm các bit khác: 8, 16 ...

    https://knowledge.autodesk.com/support/autocad/learn-explore/caas/CloudHelp/cloudhelp/2016/ENU/AutoCAD-Core/files/GUID-0D05BECE-0DC3-454D-999A-208C6DBC3C3E-htm.html

    • Vote tăng 1

  2. 23 giờ trước, quocmanh04tt đã nói:

    "Quá nhanh, hơi nguy hiểm", có thể gọi là giết nhầm hơn bỏ sót.

    Chính xác là vừa giết nhầm vừa bỏ sót.

    OSOPTIONS = 7, Test => 1

    Giết nhầm:

        Ignore endpoints of dimension extension lines: Check => Uncheck

    Bỏ sót:

        Ignore hatch objects: Check => Check

    Ở đây, có 2 biến ảnh hưởng đến snap hatch objects là OSOPTIONS và OSNAPHATCH nên có thể dùng lisp của ketxu.

    Tổng quát, nếu muốn thay đổi bit khác, dùng hàm

     (defun SwitchBit (n k) (+ n (if (= (logand n k) k)(- k) k))) 

    n : số nguyên >=0

    k : 2^i (1, 2, 4, ..)

    • Like 1
    • Vote tăng 1

  3. Vào lúc 10/5/2012 tại 23:24, hoan2182 đã nói:

    Giả sử có một trò chơi trên TV như sau: có 3 cánh cửa, đằng sau 1 trong 3 cánh cửa đó là 1 món quà lớn, còn sau 2 cửa còn lại không có gì. Người chơi được chọn 1 trong 3 cánh cửa, nếu chọn đúng cửa có quà thì được nhận quà. Sau khi người chơi đã chọn 1 cửa, người hướng dẫn chương trình mở một trong hai cửa còn lại ra, nhưng sẽ chỉ mở cửa không có quà. Sau đó người chơi được quyền chọn, hoặc là giữ cái cửa mình chọn ban đầu, hoặc là đổi lấy cái cửa chưa được mở còn lại. Theo bạn thì người chơi nên chọn phương án nào? Vì sao ?"

    Sưu tầm

     

    Vào lúc 10/7/2012 tại 12:12, hoan2182 đã nói:

    Câu hỏi phụ:

    1- Xác suất chọn đúng của người chơi P= ???

    2- Xác suất của người hướng dẫn chương trình P= ???

     

    Câu đố post đã lâu, tác giả đã offline hơn 1 năm nhưng đây là 1 bài toán thuộc dạng nghịch lý rất hay.

    Nếu các bạn quan tâm, tôi sẽ post lên một số bài khác

    Cách giải như bài sau:

     

    Nghịch lý Monty Hall

     

    Tại Châu Âu, từng thịnh hành trò chơi mang tên "Dốc sức". Ở phần kết thúc người chơi được chọn phần thưởng của mình được để ở một ba chiếc hộp đậy kín như hình vẽ.
    montyhall.jpg

    Sau khi người chơi đã chọn được chiếc hộp mà người chơi tin rằng trong đó có phần thưởng thì MC (người dẫn chương trình) sẽ mở một trong hai chiếc hộp còn lại (tất nhiên là chiếc hộp này không có phần thưởng rồi). Sau đó còn lại hai chiếc hộp, MC cho phép người chơi được quyền đổi hoặc giữ nguyên cái hộp lúc ban đầu.

    Vậy câu hỏi được đặt ra là có nên đổi chiếc hộp hay không ?

    Nhiều người chúng ta sẽ trả lời rằng: Đổi hay không thì xác suất cũng là 50% thôi. Do đó khả năng có được phần thưởng là 50−50.

    Tuy nhiên, với Xác suất chúng ta sẽ chỉ ra rằng, nếu đổi chiếc hộp thì xác suất của chúng ta sẽ tăng từ 1/3 lên thành 2/3. Tại sao có điều vô lý như vậy ? Ta thường gọi đây là nghịch lý Monty Hall

    nghichly.png

    Nguồn: http://mathtdplus.blogspot.com/2015/11/nghich-ly-monty-hall.html

     


  4. 1 giờ trước, Doan Van Ha cho biết:

    Tôi mới nghĩ ra thuật toán thế này. Mọi người cho nhận xét để tìm phương án tối ưu hơn:

    - Zoom cho tất cả tam giác (TG) nằm trong screen.

    - Qua điểm pick P tạo 2 đường vuông góc ngang (d1) và đứng (d2) trong giới hạn screen (chỉ lấy các điểm mút p1 p2 và q1 q2 chứ không cần vẽ).

    - Chọn 2 tập ss1 và ss2 bằng "fence" theo p1 p2 và q1 q2.

    - Lấy tập nhỏ bỏ tập lớn, ví dụ được là ss1.

    - Duyệt ss1 xem TG nào chứa P thì tóm cổ hắn. Nếu không có TG nào chứa P thì P nằm ngoài tất cả TG.

    Ưu điểm của pp này là chỉ xử lý trên tập ss1 (nói chung rất nhỏ so với tập toàn bộ TG là ss).

    Nhược điểm là chọn fence nên nếu TG vẽ bằng nét đứt thì nguy hiểm.

    Mọi người cho ý kiến thêm!

     

    Sao không chọn ss2 là fence các tam giác trong ss1 hay chọn ss là giao của ss1 và ss2.

     

    • Like 1

  5. Kịp thời}}, lp_hai cho biết:

    Ngu kiến của mình sao chủ thớt không dùng Break thay dim trong trường hợp này nhỉ? đỡ tốn công hơn nhiều: không cần set tm2:
     

    
    (setq tm2 (entlast))
    (command "trim" tm2 "" (ssget "c" d4 d3) "")
    >>>(command "Break" tm1 d1 d4)
    

     

    Dùng Break thay Trim trong trường hợp này vì biết d1 là giao điểm của 2 line. Nếu không phải tốn thêm bước tính giao điểm.

    Trong trường hợp này, dùng trim như sau:

    (command "trim" tm2 "" (list tm1 d4) "")

    Dùng Break trong trường hợp là đường cong kín vd Circle còn phức tạp hơn vì ngoài việc tính 2 giao điểm, còn phải xác định thứ tự nữa.

    VD vẽ thêm 1 circle:

    (command "circle" "non" (mapcar '+ p '(500 1000)) 400)
    (setq tm3 (entlast))

    rồi thử từng dòng sau để xem kết quả:

        (command "trim" tm2 "" (list tm3 p) "")
        (command "trim" tm2 "" (list tm3 d4) "")

     


  6. Nếu muốn lưu giá trị của lần nhập sau cùng thì phải sửa code lại như thế nào?

    ví dụ: Lần cuối cùng nhập h=5. Lần dùng sau VBA sẽ lưu lại giá trị h=5 và hiển thị tại dòng nhắc lệnh.

    Dùng biến toàn cục : đưa khai báo

    Dim h As Double

    ra trước

    Sub nhap()

    ...

    h = ThisDrawing.Utility.GetReal("Nhap chieu cao text <" & h & " >:")

    • Vote tăng 1

  7. Viết theo yêu cầu cũng không khó nhưng tôi chưa rãnh, nếu Danh Cong rãnh thì hoàn chỉnh

    Bạn dùng tạm lisp này

    - Copy các dim

    - Chọn dim gốc lấy y chuẩn

    - Chọn các dim cần chỉnh tọa độ

     

    (defun c:cy( / a g) ; chinh y
    (setq a (assoc 10 (entget (car (entsel "\nChon dim goc : ")))))
    (princ "\nChon dim can chinh cao do : ")
    (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget  '((0 . "DIMENSION")(-4 . "&=")(70 . 6))))))
     (entmod (subst a (assoc 10 (setq g (entget e))) g))
    )
    )
    
    • Vote tăng 2

  8. Thấy nhiều bạn than phiền các lisp vẽ Đường Đồng Mức (ĐĐM) thường chạy chậm, thậm chí đôi khi treo máy, nên tôi làm cái này phục vụ cộng đồng.

    Lisp có một phần nguồn từ Internet, tôi hiệu chỉnh và bổ sung để tăng tốc độ xử lý. Một phần khác tự viết.

    Code mở nên mọi người tha hồ vọc. Lệnh: DDM.

    Test với bản vẽ 22629 points ở máy tôi chỉ mất 60 giây (với các thông số mặc định trong lisp).

    Chức năng: vẽ các tam giác TIN, vẽ ĐĐM, tô màu theo cao độ cho ĐĐM.

    Đối tượng: tập các point, hoặc tập các text, hoặc tập các block_att cao độ.

    File Cad để test:

    http://www.mediafire.com/file/c3ey62x9rb35bu6/Draw_Contour_HA.dwg

    File Lisp:

    http://www.mediafire.com/file/90u0sgqmukkuft7/Draw_Contour_HA.lsp

    File Image:

    http://www.mediafire.com/view/ydyhy3csv9pg4yd/Draw_Contour_HA.png

     

    Còn vài điều chưa hài lòng lắm, sẽ sửa sau. Hy vọng được đem đến nguồn vui cho mọi người!

    Tôi cũng có dự định viết chương trình Đường Đồng Mức bằng ARX và đã viết xong phần tạo lưới tam giác. Tuy nhiên đến phần vẽ ĐĐM, tham khảo các file cad tôi thấy ĐĐM vẽ bằng các line xấp xỉ Spline nên rất mịn. Search tìm công thức Spline chưa ra, mặt khác vì không có chuyên môn sâu về trắc địa nên không rõ nguyên tắc xấp xỉ Spline như thế nào nên còn để đó.

    Tham khảo file test thì thấy lisp của bạn Doan Van Ha chạy còn thiếu nhiều chỗ (>15), ĐĐM còn thô nên không biết có đạt y/c TCVN không?

    Về câu hỏi bên http://www.cadviet.com/forum/topic/14210-hoi-ve-lisp-thuat-toan-y-tuong-coding/page-142?do=findComment&comment=410604

    bạn thử dùng cách chọn các line cùng cao độ rồi dùng lệnh PEDIT Join của cad xem.


  9. Lisp của quocmanh04tt chỉ thay 81 đoạn gấp khúc thành 80 đoạn arc, dùng làm trơn pline thì được nếu dùng để Dimradius thì không hiệu quả.

    Trong trường hợp có 1 đỉnh có hướng thay đổi nhiều, các đoạn arc sau đỉnh đó lệch pline rất nhiều.

     

    Lisp của Bee chỉ đổi 2 đoạn liền nhau thành 1 arc, nếu số đoạn lẻ thì mất đoạn cuối.

    Search gg thấy trang này có thuật toán, nhưng chưa có thời gian đọc xem có đúng y/c của bài này không

    http://web.mit.edu/hyperbook/Patrikalakis-Maekawa-Cho/node203.html

    • Vote tăng 1

  10. Tôi không dùng lisp này nhưng khi test :

    200X300 là kết quả khi chạy lisp tkt

    Trong kết cấu, tên ck nếu viết đầy đủ: Dầm 1, Cột 1 ...(ít xảy ra) => sai

    nhưng nếu viết tắt thì cấu kiện ĐK => sai

    Tóm lại: hàm vl-string-left-trim không ổn

     

    @ptd1987: text nào sai mẫu thì ghi ra hay post file


  11. Ai biết thuật toán này tên gì không mách bảo tí để tìm hiểu:

    Cho n điểm A,B,C,D,E... (gọi chung là các điểm X) trên m.phẳng. M là điểm di động. Các chi phí đơn vị từ M đến X là kX (đã biết). MX là các khoảng cách từ M đến X.

    Tìm vị trí điểm M sao cho tổng chi phí là nhỏ nhất:

    (MA*kA+MB*kB+MC*kC+MD*kD+ME*kE+...) -> Min

    Bạn search Bài toán cực trị của hàm nhiều biến, ở đây là hàm 2 biến

    fz = Σ{ki*sqrt[ (xi-x)^2 + (yi-y)^2 ]}


  12. * nếu giá trị a nhập vào nằm ngoài chương trình:

    -  phần tử đầu: (car lst), cuối (last lst)

    Bạn tự viết được

    * nếu giá trị a bằng với giá trị bất kỳ trong bảng sẽ trả về vị trí tương ứng giá bằng a nằm trong list

    (setq c (vl-position a lst))

    * nếu không bằng giá trị nào trong list sẽ trả về 2 vị trí gần nó nhất

     c = nil khi thực hiện dòng lệnh trên: bạn Hạ đã viết ở #2

    Bạn dùng các hàm if hoặc cond để tự hoàn thiện

    • Vote tăng 1
×