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

phat1998

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

    41
  • Đã tham gia

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

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


  1. 6 giờ trước, alisp đã nói:

    Ý bạn này chác muốn nói nếu đi từ đầu tới cuối đg cong hoặc đi ngược từ cuối lên đầu thì góc có giống nhau hay không đó mà, phải vậy ko?

    Nếu đúng là như vậy thì xin thưa là tại 1 điểm trên đg cong thì góc là như nhau bạn nhé, chỉ có điều vị trí điểm đo và thứ tự đo sẽ khác nhau thôi, tức là đi xuôi vị trí điểm đo sẽ khác với khi đi ngược.

    vâng ạ. từ đầu đến cuối góc khác từ cuối lên đầu ạ, mong anh cho giải pháp

    tiện thể cho em hỏi thêm, như lisp của em kia thì trình bày thuật toán của nó dạng sơ đồ khối như thế nào ạ. 

    em cảm ơn các anh !

     


  2. 34 phút trước, Doan Van Ha đã nói:

    Đã có 2 góc nên muốn chỉ nhận 1 giá trị thì bạn chọn (min (angle A B) (angle B A)) hoặc (max (angle A B) (angle B A)), hoặc bạn xét góc để trừ đi 1 giá trị là PI.

    Ý em là với lisp và với 2 đường thẳng AB và BA chứ không phải là có 2 góc rồi lấy 1 góc duy nhất anh ạ. tức là với lisp đó đối tượng là AB hya là BA thì kết quả là 1 ý ạ

    đây là lisp ạ:

     

    (setvar "Osmode" 0)(Setvar "orthomode" 0)(setvar "cmdecho" 0)
    (setq file_text  (getfiled "xuât du liêu " "gia công 1 chiêu "  "txt" 1))
    (setq ket_qua (open file_text "w" )
            doi_tuong (car ( entsel " \n chon duong phun son  : "))
            so_doan (getint (strcat "\n nhâp vào môt sô : "))
            d 0.0
            L  (vlax-curve-getDistAtParam doi_tuong (vlax-curve-getEndParam doi_tuong)) 
           delta_L (/ L so_doan)
    )
    (setq diem (vlax-curve-getpointatdist doi_tuong d)
          dao_ham(vlax-curve-getFirstDeriv doi_tuong d)
          goc_tiep_tuyen (angle '( 0 0) dao_ham)
          goc_phap_tuyen ( *  (- (/ pi 2) goc_tiep_tuyen)(/ 180 pi))
          
    )
    (Princ (strcat "\nG02 X" (rtos (car diem) 2 0) " Y" (rtos (cadr diem) 2 0) " A" (rtos goc_phap_tuyen 2 0) ) ket_qua)
    (setq d (+ d delta_L))
    (repeat  ( 1+ (- so_doan 1))
       ( setq diem (vlax-curve-getPointAtDist doi_tuong d) 
          dao_ham (vlax-curve-getFirstDeriv doi_tuong d)
          goc_tiep_tuyen (angle '( 0 0) dao_ham)
          goc_phap_tuyen ( * (-  (/ pi 2) goc_tiep_tuyen)  (/ 180 pi))
           d (+ d delta_L)
    )
        (Princ (strcat "\nG01 X" (rtos (car diem) 2 0) " Y" (rtos (cadr diem) 2 0) " A" (rtos goc_phap_tuyen 2 0)) ket_qua)
         )
      (close ket_qua)
      (Princ (strcat "\nFile Ket qua : \"" file_text "\"")) (princ)

    • Vote giảm 1

  3. Vào lúc 13/11/2020 tại 09:32, Doan Van Ha đã nói:

    '(0 0): tọa độ điểm có x=0 và y=0

    anh cho em hỏi về hàm angle.

    giả sử dùng hàm angle và chọn điểm thứ nhất là A điểm thứ 2 là B cho ra góc anpha1

                                                   chọn điểm thứ nhất là B điểm thứ 2 là C cho ra góc anpha2

    anpha1 khác anpha2

    tức là vẫn là đường thẳgn AB nhưng góc thu được khác nhau do hướng của vector AB và BA ngươc nhau

    vậy làm cách nào để ta luôn thu được góc giữa AB và 0x cố định với cả vector AB và BA ạ


  4. Vào lúc 31/10/2020 tại 17:16, DuongTrungHuy đã nói:

    ; Day Ban

     

      (setvar "Osmode" 0)(Setvar "orthomode" 0)(setvar "cmdecho" 0)
      (setq file_name (getfiled "Xuat du lieu" "Toa_do_diem_va_goc" "txt" 1))
      (setq kq (open file_name "w") nd 10 kc 0.0 2pi (* 2.0 pi)
            e1 (car (entsel "\nChon Spline: ")) 
            Ldai (/ (vlax-curve-getDistAtParam e1 (vlax-curve-getEndParam e1)) nd)
      )
      (Repeat (1+ nd)
        (setq d1 (vlax-curve-getPointAtDist e1 kc) so (vlax-curve-getFirstDeriv e1 kc) goc (+ (angle (list 0 0) so) (/ pi 2.0))
              oo (if (> goc 2pi)(setq goc (- goc 2pi)))
              oo (Princ (strcat "\n**" (rtos kc 2 8) " " (rtos (car d1) 2 8) " " (rtos (cadr d1) 2 8) " " (rtos goc 2 7)))
              oo (Print (angle (list 0 0) so)) kc (+ kc Ldai)
              oo (Princ (strcat "\n=" (rtos kc 2 8) " " (rtos (car d1) 2 8) " " (rtos (cadr d1) 2 8) " " (rtos goc 2 7)))
        )
        (Princ (strcat "\n" (rtos kc 2 8) " " (rtos (car d1) 2 8) " " (rtos (cadr d1) 2 8) " " (rtos goc 2 7)))
        (Princ (strcat "\nG01 X" (rtos (car d1) 2 8) " Y" (rtos (cadr d1) 2 8) " A" (rtos goc 2 7)) kq)
      )
      (close kq)
      (Princ (strcat "\nFile ket qua: \"" file_name "\"")) (princ)

    anh ơi em ms phát hiện 1 vấn đề đó là giả sử đường cong có điểm xuất phát là A , điểm cuối là B thì giá trị góc thu được khác với đường cong cũng như trên nhưng điểm xuát phát là B và điểm cuối là A.

    Tức là  lm cách nào để ta các hướng của vector tiếp tuyến không ảnh hưởng đến kết quả được không ạ. 

    ta chỉ cần thu giá trị góc giữa 2 đường thẳng tiếp tuyến và đường 0x


  5. tức là khi em đi bảo vệ đồ án, em sẽ phải trình bày chương trình này giải quyết cái gì

    từ đầu vào là 1 curve chương trình sẽ cho đầu ra là tọa độ và góc

    vậy để trình bày điều này cần có thuật toán dạng như sơ đồ khối ấy ạ

    chứ mình không thể show lisp lên rồi giải thích từng dòng được

    • Vote giảm 1

  6. 1 giờ} trướ}c, alisp đã nói:

    Bạn có vẻ bị ám ảnh bởi cái điểm (0 0) nhỉ, thôi bây giờ bạn tìm góc tiếp tuyến tại  (x y) với điểm kế tiếp (x + dx, y + dy) cho nó dễ hiểu đi, trong đó (dx dy) tìm bởi cái hàm trên.

    cảm ơn anh nhiều ạ, em sẽ cố gắng hiểu cặn kẽ

    vì em sắp bảo vệ tốt nghiệp, nên em cần hiểu kĩ để còn trả lời các thầy


  7. Vào lúc 13/11/2020 tại 10:24, Doan Nguyen Van đã nói:

    Có thể bạn chưa hiểu rõ ý rồi, kết quả tạo ra là 1 point, nếu xét riêng point đó với gốc tọa độ thì được 1 phương trình đường thẳng đi qua 2 điểm (0 . 0) và điểm kết quả, Nên nó được gọi là đạo hàm bậc nhất. Tương ứng với kết quả bạn mong muốn 

    có vẻ em vẫn đang bị rối , do em chưa hiểu bản chất, cho em hỏi: 

    em đã đọc khái niệm đạo hàm được ghim ở trên, vậy cuối cùng hàm ( angle '(0 0) (Vlax-curve-getfirstderiv curve (vlax-curve-getParamAtPoint curve pt))) tạo ra kết quả góc giữa cái gì với cái gì, có phải góc giữa tiếp tuyến tại điểm ta xét với trục 0x không ạ.

    cái em không hiểu là hàm Vlax-curve-getfirstderiv như anh nói trả về điểm, vậy sao lại là '(0 0) vì tiếp tuyến nó đâu có đi qua điểm gốc tọa độ ( 0 , 0)

     


  8. Vào lúc 31/10/2020 tại 17:16, DuongTrungHuy đã nói:

    ; Day Ban

     

      (setvar "Osmode" 0)(Setvar "orthomode" 0)(setvar "cmdecho" 0)
      (setq file_name (getfiled "Xuat du lieu" "Toa_do_diem_va_goc" "txt" 1))
      (setq kq (open file_name "w") nd 10 kc 0.0 2pi (* 2.0 pi)
            e1 (car (entsel "\nChon Spline: ")) 
            Ldai (/ (vlax-curve-getDistAtParam e1 (vlax-curve-getEndParam e1)) nd)
      )
      (Repeat (1+ nd)
        (setq d1 (vlax-curve-getPointAtDist e1 kc) so (vlax-curve-getFirstDeriv e1 kc) goc (+ (angle (list 0 0) so) (/ pi 2.0))
              oo (if (> goc 2pi)(setq goc (- goc 2pi)))
              oo (Princ (strcat "\n**" (rtos kc 2 8) " " (rtos (car d1) 2 8) " " (rtos (cadr d1) 2 8) " " (rtos goc 2 7)))
              oo (Print (angle (list 0 0) so)) kc (+ kc Ldai)
              oo (Princ (strcat "\n=" (rtos kc 2 8) " " (rtos (car d1) 2 8) " " (rtos (cadr d1) 2 8) " " (rtos goc 2 7)))
        )
        (Princ (strcat "\n" (rtos kc 2 8) " " (rtos (car d1) 2 8) " " (rtos (cadr d1) 2 8) " " (rtos goc 2 7)))
        (Princ (strcat "\nG01 X" (rtos (car d1) 2 8) " Y" (rtos (cadr d1) 2 8) " A" (rtos goc 2 7)) kq)
      )
      (close kq)
      (Princ (strcat "\nFile ket qua: \"" file_name "\"")) (princ)

    anh cho em hỏi, trình bày thuật toán của chương trình này như nào ạ ?

     

    • Vote giảm 1

  9. 2 phút trước, Doan Nguyen Van đã nói:

    Có thể bạn chưa hiểu rõ ý rồi, kết quả tạo ra là 1 point, nếu xét riêng point đó với gốc tọa độ thì được 1 phương trình đường thẳng đi qua 2 điểm (0 . 0) và điểm kết quả, Nên nó được gọi là đạo hàm bậc nhất. Tương ứng với kết quả bạn mong muốn 

    à em đã hiểu. em cảm ơn ạ!


  10. Vào lúc 9/6/2014 tại 10:33, gia_bach đã nói:

    Update theo yêu cầu :

    
    (defun c:Vg (/ curve pt ang )
      (if (setq curve (car (entsel "\nChon Curve : ")))
        (progn
          (or *len (setq *len 50))
          (initget 6)
          (setq *len (cond ((getdist (strcat "\nChieu dai <" (rtos *len) "> :"))) (*len)))
          (while (setq pt (getpoint "\n Chon diem tren Curve : "))
    	(setq pt (vlax-curve-getClosestPointTo curve (trans pt 1 0))
    	      ang (angle '(0 0) (Vlax-curve-getfirstderiv curve (vlax-curve-getParamAtPoint curve pt))) )
    	(entmake (list '(0 . "LINE")(cons 10 pt)(cons 11 (polar pt (+ ang (/ pi 2) ) *len))(cons 62 3) ))
    	(entmake (list '(0 . "LINE")(cons 10 pt)(cons 11 (polar pt (- ang (/ pi 2) ) *len))(cons 62 4) )) )))
      (princ) )

    anh cho em  hỏi ở dòng: 

    ang ( angle '(0 0) (Vlax-curve-getfirstderiv curve (vlax-curve-getParamAtPoint curve pt))) )

    thì '(0 0) nó có nghĩa là gì ạ?


  11. thật sự hỏi các anh em cũng ngại lắm vì biết làm phiền các anh. thầy bảo tốt nhất là viết bằng c++, còn lisp là phương án dự phòng . còn robot không đọc được file text đâu anh ạ. robot chỉ đọc được file .nc

    lisp cho ra file text thì sẽ thêm 1 bước nữa là lấy dữ liệu file text cho sang file .nc còn c++ nó sẽ ra được file .nc ( đại loại là như vậy)

    còn chuyên ngành thì em học cơ điện tử anh ạ, trước giờ học nhiều về cơ khí vẽ vời tính toán các kiểu phải đến 80% có biết gì về C++ đâu anh, 

    còn thầy thì thấy có lisp rồi lại muốn có C++ kiểu càng mở rộng càng tốt ấy ạ

    • Vote tăng 1
    • Vote giảm 1

  12. 7 phút trước, gia_bach đã nói:

    Ở bên topic Lisp, bác Huy đã làm tốt công việc này, cớ gì bạn phải convert qua C#?

     

    có vẻ như cái bạn cần là C++ (ARX), để lập trình cho máy CNC.

    đúng là em đã được các  anh giúp để giải bài toán bằng lisp

    nhưng kiểu thầy em nói lisp sẽ không linh hoạt. muốn em viết bằng c++ tạo file ARX

    em làm đồ án tay máy phun sơn mũ bảo hiểm. bài toán trên là bài toán gia công ( 1 phần của đồ án).

    có lẽ lí do là lisp chỉ ra được file text còn c++ có thể ra file .nc . file là file gcode để đe đi gia công


  13. Vào lúc 2/5/2019 tại 10:05, gia_bach đã nói:

    Thiếu  file AcCoreMgd.dll, "Add reference" thêm là được.

    chào anh, đây là lisp chia đường thành n điểm để lấy về tọa độ điểm và góc tạo bởi đường pháp tuyến tại mỗi điểm với trục 0x. xuất ra file text với cú pháp mỗi dòng là ( G01 X_ Y_ A_)

    anh có thể convert từ lisp  sang c# được ko ạ

    phat.LSP


  14. Vào lúc 31/10/2020 tại 17:16, DuongTrungHuy đã nói:

    ; Day Ban

     

      (setvar "Osmode" 0)(Setvar "orthomode" 0)(setvar "cmdecho" 0)
      (setq file_name (getfiled "Xuat du lieu" "Toa_do_diem_va_goc" "txt" 1))
      (setq kq (open file_name "w") nd 10 kc 0.0 2pi (* 2.0 pi)
            e1 (car (entsel "\nChon Spline: ")) 
            Ldai (/ (vlax-curve-getDistAtParam e1 (vlax-curve-getEndParam e1)) nd)
      )
      (Repeat (1+ nd)
        (setq d1 (vlax-curve-getPointAtDist e1 kc) so (vlax-curve-getFirstDeriv e1 kc) goc (+ (angle (list 0 0) so) (/ pi 2.0))
              oo (if (> goc 2pi)(setq goc (- goc 2pi)))
              oo (Princ (strcat "\n**" (rtos kc 2 8) " " (rtos (car d1) 2 8) " " (rtos (cadr d1) 2 8) " " (rtos goc 2 7)))
              oo (Print (angle (list 0 0) so)) kc (+ kc Ldai)
              oo (Princ (strcat "\n=" (rtos kc 2 8) " " (rtos (car d1) 2 8) " " (rtos (cadr d1) 2 8) " " (rtos goc 2 7)))
        )
        (Princ (strcat "\n" (rtos kc 2 8) " " (rtos (car d1) 2 8) " " (rtos (cadr d1) 2 8) " " (rtos goc 2 7)))
        (Princ (strcat "\nG01 X" (rtos (car d1) 2 8) " Y" (rtos (cadr d1) 2 8) " A" (rtos goc 2 7)) kq)
      )
      (close kq)
      (Princ (strcat "\nFile ket qua: \"" file_name "\"")) (princ)

    anh ơi cái trình lisp này của em có thể chuyển sang file.ARX không ạ

    • Vote giảm 2

  15. Vào lúc 31/10/2020 tại 17:16, DuongTrungHuy đã nói:

    ; Day Ban

     

      (setvar "Osmode" 0)(Setvar "orthomode" 0)(setvar "cmdecho" 0)
      (setq file_name (getfiled "Xuat du lieu" "Toa_do_diem_va_goc" "txt" 1))
      (setq kq (open file_name "w") nd 10 kc 0.0 2pi (* 2.0 pi)
            e1 (car (entsel "\nChon Spline: ")) 
            Ldai (/ (vlax-curve-getDistAtParam e1 (vlax-curve-getEndParam e1)) nd)
      )
      (Repeat (1+ nd)
        (setq d1 (vlax-curve-getPointAtDist e1 kc) so (vlax-curve-getFirstDeriv e1 kc) goc (+ (angle (list 0 0) so) (/ pi 2.0))
              oo (if (> goc 2pi)(setq goc (- goc 2pi)))
              oo (Princ (strcat "\n**" (rtos kc 2 8) " " (rtos (car d1) 2 8) " " (rtos (cadr d1) 2 8) " " (rtos goc 2 7)))
              oo (Print (angle (list 0 0) so)) kc (+ kc Ldai)
              oo (Princ (strcat "\n=" (rtos kc 2 8) " " (rtos (car d1) 2 8) " " (rtos (cadr d1) 2 8) " " (rtos goc 2 7)))
        )
        (Princ (strcat "\n" (rtos kc 2 8) " " (rtos (car d1) 2 8) " " (rtos (cadr d1) 2 8) " " (rtos goc 2 7)))
        (Princ (strcat "\nG01 X" (rtos (car d1) 2 8) " Y" (rtos (cadr d1) 2 8) " A" (rtos goc 2 7)) kq)
      )
      (close kq)
      (Princ (strcat "\nFile ket qua: \"" file_name "\"")) (princ)

    kết quả góc sai anh ạ

    • Vote giảm 2

  16. Vào lúc 29/10/2020 tại 14:14, DuongTrungHuy đã nói:

    Hi. bạn Danh Cong đã hướng dẫn rồi đó.

     

    À việc lập trình nói chung cũng không khó lắm, nhưng điểm cần thiết phải là người tỉ mỉ, máy tính hiểu 1 cách rất máy móc nên phải chỉn chu, sai 1 dấu nhỏ nó cũng không hiểu :)

    và tất nhiên phải có 1 chút kiến thức cơ sở về Toán đó Bạn.

     

    Chúc công việc thuận lợi nhé!.

    anh ơi khó quá anh ạ. em không sửa cái số thứ tự 1 2 3 4 5.. n thành G01 được ạ. em nghĩ nó ở đoạn này mà em sửa toàn bị lỗi

    (setq lst_pt (reverse lst_pt))
      (if (setq file_name (getfiled "Xuat du lieu" "Toa do diem va goc" "txt" 1))
        (progn
          (setq file_write (open file_name "W"))
          (setq lst_write (mapcar '(lambda (lst) (list (itoa (car lst)) (rtos (caadr lst) 2 4) (rtos (cadadr lst) 2 4) (rtos (caddr lst) 2 2))) lst_pt))
          (foreach lst lst_write
        (setq str "")
        (foreach n lst 
          (setq str (strcat str n "\t"))
          )
        (setq str (substr str 1 (1- (strlen str))))
        (write-line  str file_write )
        )
          (close file_write)
          )
        )
      (print)

     


  17. 2 phút trước, DuongTrungHuy đã nói:

    Hi. bạn Danh Cong đã hướng dẫn rồi đó.

     

    À việc lập trình nói chung cũng không khó lắm, nhưng điểm cần thiết phải là người tỉ mỉ, máy tính hiểu 1 cách rất máy móc nên phải chỉn chu, sai 1 dấu nhỏ nó cũng không hiểu :)

    và tất nhiên phải có 1 chút kiến thức cơ sở về Toán đó Bạn.

     

    Chúc công việc thuận lợi nhé!.

    dạ em vẫn đang đọc hiểu từng dòng code đây ạ. đọc đến đâu tra gg hàm đến đó. mong là sẽ tự sử được theo yêu cầu

    trong trường hợp không ra hi vọng sẽ đc anh chỉ dạy ạ. 

    e, cảm ơn anh ạ

    • Like 1
×