traitimgio 0 Báo cáo bài đăng Đã đăng Tháng 5 14, 2016 Nhờ viết code 1 hàm trong lisp Hàm trả về là điểm trong autocad. Có 2 đường thằng giao nhau tại A. đường thẳng 1 tạo với trục x góc a, đường thẳng 2 tạo với trục x góc b. tạo 2 đường thường // với đường thẳng 1, 2 cách đều 1 đoạn a (offset xuống phía dưới) 2 đường thẳng này giao nhau tại B. xác định điểm B này. Theo hình học thì ta có AB tạo với trục x góc (180-a+b)/2 và AB=a/sin((180-a-b)/2 ) Hàm có 4 biến ( điểm A, kc a, góc a, góc b ). Hình minh họa cho ý tưởng 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 3202 Báo cáo bài đăng Đã đăng Tháng 5 14, 2016 Chỉ cần dùng 1 hàm polar thôi: (setq B (polar A goc AB)). Chú ý chuyển từ độ sang radian. 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
traitimgio 0 Báo cáo bài đăng Đã đăng Tháng 5 14, 2016 Chỉ cần dùng 1 hàm polar thôi: (setq B (polar A goc AB)). Chú ý chuyển từ độ sang radian. em biết làm hàm polar rồi. Nhưng lisp em có rất nhiều điểm A như thế cần xác định điểm B. EM muốn tạo funcion ( A, a, apha, beta) để ghi gọi nó tính ra các điểm B luôn. Em k bik cách lập hà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
quocmanh04tt 635 Báo cáo bài đăng Đã đăng Tháng 5 14, 2016 em biết làm hàm polar rồi. Nhưng lisp em có rất nhiều điểm A như thế cần xác định điểm B. EM muốn tạo funcion ( A, a, apha, beta) để ghi gọi nó tính ra các điểm B luôn. Em k bik cách lập hàm. :( Test thử nhé! (defun c:test (/ a anpha beta pa) (setq a 500 anpha 75 beta 30) (command "Line" (setq pa (getpoint "\nPick point: ")) (b_point pa anpha beta a) "")) ;;---------------- (defun b_point (pa anpha beta a) (polar pa (- (* 2 pi) (* pi (/ (* (+ (- 180 anpha) beta) 0.5) 180))) (/ a (sin (* pi (/ (* (- 180 (+ anpha beta)) 0.5) 180.)))))) 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
traitimgio 0 Báo cáo bài đăng Đã đăng Tháng 5 14, 2016 (Đă chỉnh sửa) (defun c:test () ;;;;;;;;;;;;;;;; (defun tinhtoado ( point a ang1 ang2 / pB) (setq pB (polar point (/ (+ pi ( - ang2 ang1)) -2) (/ a (sin (/ (- pi ang1 ang2) -2))))) ) ;;;;;;;;;;;; (setq pt-01 (getpoint "\nNhap toa do diem 01:")) (setq pt-02 (getpoint "\nNhap toa do diem 02:")) (setq pt-03 (getpoint "\nNhap toa do diem 03:")) (setq ang1 (angle pt-01 pt-02)) (setq ang2 (angle pt-02 pt-03)) (COMMAND "line" (b_point pt-02 ang1 ang2 500) pt-02) ) ;;---------------- (defun b_point (pa anpha beta a) (polar pa (- (* 2 pi) (* pi (/ (* (+ (- 180 anpha) beta) 0.5) 180))) (/ a (sin (* pi (/ (* (- 180 (+ anpha beta)) 0.5) 180.)))))) em tự lập hàm với thử hàm của bác đều k ra kết quả chuẩn so với hình học tính. với góc anfa= góc( p-01,p-02)=45do, beta= (p-02,p03)=315do a=500. đây là hình ảnh so với lisp test. hình như nó liên quan đến góc âm, góc dương với 2kPi j đó. bác test giúp em vs 1r5e7d8ppp9npp7zg.jpg Chỉnh sửa Tháng 5 14, 2016 theo traitimgio 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
quocmanh04tt 635 Báo cáo bài đăng Đã đăng Tháng 5 14, 2016 Hàm của mình, các góc đầu vào là độ, lệnh test của bạn ang1, ang2 lại là radians thì nó sai là phải rồi. => Hoặc phải đổi trong hàm, hoặc phải đổi ang1, ang2 sang độ rồi mới đưa vào hàm được. Thử thay cái này xem: (COMMAND "line" (b_point pt-02 (* 180.0 (/ ang1 pi)) (* 180.0 (/ ang2 pi)) 500) pt-02) 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
traitimgio 0 Báo cáo bài đăng Đã đăng Tháng 5 15, 2016 Hàm của mình, các góc đầu vào là độ, lệnh test của bạn ang1, ang2 lại là radians thì nó sai là phải rồi. => Hoặc phải đổi trong hàm, hoặc phải đổi ang1, ang2 sang độ rồi mới đưa vào hàm được. Thử thay cái này xem: (COMMAND "line" (b_point pt-02 (* 180.0 (/ ang1 pi)) (* 180.0 (/ ang2 pi)) 500) pt-02) (COMMAND "line" (b_point pt-02 (* 180.0 (/ ang1 pi)) (* 180.0 (/ ang2 pi)) 500) pt-02 "") em nhập như này cũng ko chuẩn. có vẻ như là góc (180-a+b)/2 là góc đại số, góc hình học thì -(180-a+b)/2 (ngc chiều kim đồng hồ, với giá trị góc tính sin((180-a-b)/2 ) cũng thế. vị trí điểm point bị sai 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
quocmanh04tt 635 Báo cáo bài đăng Đã đăng Tháng 5 15, 2016 Vẫn hàm cũ, theo thứ tự pick điểm của bạn nhé! (Chú ý: cách xác định góc của AutoCAD). (defun c:tt (/ ang1 ang2 pt-01 pt-02 pt-03 b_point) (defun b_point (pa anpha beta a) (polar pa (- (* 2 pi) (* pi (/ (* (+ (- 180 anpha) beta) 0.5) 180))) (/ a (sin (* pi (/ (* (- 180 (+ anpha beta)) 0.5) 180.)))))) ;;------------------------------------------------------- (if (and (setq pt-01 (getpoint "\nNhap toa do diem 01:")) (setq pt-02 (getpoint "\nNhap toa do diem 02:")) (setq pt-03 (getpoint "\nNhap toa do diem 03:"))) (progn (setq ang1 (- (angle pt-02 pt-01) pi)) (setq ang2 (- (* 2 pi) (angle pt-02 pt-03))) (COMMAND "line" (b_point pt-02 (* 180.0 (/ ang1 pi)) (* 180.0 (/ ang2 pi)) 500) pt-02 "")))) 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
traitimgio 0 Báo cáo bài đăng Đã đăng Tháng 5 15, 2016 Vẫn hàm cũ, theo thứ tự pick điểm của bạn nhé! (Chú ý: cách xác định góc của AutoCAD). (defun c:tt (/ ang1 ang2 pt-01 pt-02 pt-03 b_point) (defun b_point (pa anpha beta a) (polar pa (- (* 2 pi) (* pi (/ (* (+ (- 180 anpha) beta) 0.5) 180))) (/ a (sin (* pi (/ (* (- 180 (+ anpha beta)) 0.5) 180.)))))) ;;------------------------------------------------------- (if (and (setq pt-01 (getpoint "\nNhap toa do diem 01:")) (setq pt-02 (getpoint "\nNhap toa do diem 02:")) (setq pt-03 (getpoint "\nNhap toa do diem 03:"))) (progn (setq ang1 (- (angle pt-02 pt-01) pi)) (setq ang2 (- (* 2 pi) (angle pt-02 pt-03))) (COMMAND "line" (b_point pt-02 (* 180.0 (/ ang1 pi)) (* 180.0 (/ ang2 pi)) 500) pt-02 "")))) lisp này bjo ra kết quả đúng, nhung mình muốn hàm góc anfa, beta nhập vào là radian sẵn rồi, ang1 là góc pt-01 pt-02 với trục x. ang2 là pt-02 pt-03 với trục x thì chỉnh trong hàm như thế nào. vì mình làm nhiều hàm mà mỗi lần setq ang lại phải thêm công trừ pi mất công, nhầm lẫ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
Tot77 508 Báo cáo bài đăng Đã đăng Tháng 5 15, 2016 Có cách này ko cần quan tâm góc. (defun tt (pt-01 pt-02 pt-03 a / ANG1 ANG2 ANG3) (if (and pt-01 pt-02 pt-03 a) (progn (setq ang1 (angle pt-01 pt-02) ang2 (angle pt-01 pt-03) ang3 (* 0.5 (+ ang1 ang2)) ) (COMMAND "line" (polar pt-01 ang3 (/ a (sin (abs (- ang1 ang3))))) pt-01 ""))) ) (defun c:tt() (tt (getpoint "\nP1:") (getpoint "\nP2:") (getpoint "\nP3:") (getreal "\nOffset:"))) pt_01 là điểm giữa. 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
traitimgio 0 Báo cáo bài đăng Đã đăng Tháng 5 15, 2016 Có cách này ko cần quan tâm góc. (defun tt (pt-01 pt-02 pt-03 a / ANG1 ANG2 ANG3) (if (and pt-01 pt-02 pt-03 a) (progn (setq ang1 (angle pt-01 pt-02) ang2 (angle pt-01 pt-03) ang3 (* 0.5 (+ ang1 ang2)) ) (COMMAND "line" (polar pt-01 ang3 (/ a (sin (abs (- ang1 ang3))))) pt-01 ""))) ) (defun c:tt() (tt (getpoint "\nP1:") (getpoint "\nP2:") (getpoint "\nP3:") (getreal "\nOffset:"))) pt_01 là điểm giữa. cách này hay. em sửa lại chút để làm chỉ xuất ra tọa độ điểm B. còn lệnh thực hiện với điểm đó k phải line, line chỉ để test thôi. (defun tt (pt-01 pt-02 pt-03 a / ANG1 ANG2 ANG3) (if (and pt-01 pt-02 pt-03 a) (progn (setq ang1 (angle pt-01 pt-02) ang2 (angle pt-01 pt-03) ang3 (* 0.5 (+ ang1 ang2))) (setq pb (polar pt-01 ang3 (/ a (sin (abs (- ang1 ang3))))) )))) (defun c:tt () (COMMAND "line" (tt (getpoint "\nP1:") (getpoint "\nP2:") (getpoint "\nP3:") (getreal "\nOffset:")) pt-01 "")) vậy mà khi gõ lệnh tt nhập điểm xong, báo lỗi ko hiểu lệnh tt 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
Tot77 508 Báo cáo bài đăng Đã đăng Tháng 5 15, 2016 Vì trong lệnh tt bạn chưa định nghĩa biến pt-01, phải viết: (defun c:tt () (COMMAND "line" (tt (setq pt-01 (getpoint "\nP1:")) (getpoint "\nP2:") (getpoint "\nP3:") (getreal "\nOffset:")) pt-01 "")) 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
traitimgio 0 Báo cáo bài đăng Đã đăng Tháng 5 15, 2016 Vì trong lệnh tt bạn chưa định nghĩa biến pt-01, phải viết: (defun c:tt () (COMMAND "line" (tt (setq pt-01 (getpoint "\nP1:")) (getpoint "\nP2:") (getpoint "\nP3:") (getreal "\nOffset:")) pt-01 "")) làm mình cứ loay hoay mãi. :D Nhờ bác giúp, bài toán trên, mở rộng chút : vẫn 3 điểm p-01, p02, p-03. cho 2 đường // với p01 p02 và p01 p03 lần lượt khoảng cách là a, b. Giao nhau ở B. Viết hầm xuất ra điểm B :) 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
traitimgio 0 Báo cáo bài đăng Đã đăng Tháng 5 15, 2016 làm mình cứ loay hoay mãi. :D Nhờ bác giúp, bài toán trên, mở rộng chút : vẫn 3 điểm p-01, p02, p-03. cho 2 đường // với p01 p02 và p01 p03 lần lượt khoảng cách là a, b. Giao nhau ở B. Viết hầm xuất ra điểm B :) Hình như thuật toán giải bài này quá khó :( 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
traitimgio 0 Báo cáo bài đăng Đã đăng Tháng 5 15, 2016 Hình như thuật toán giải bài này quá khó :( Theo Hình học: AB= a/sina1= b/ sina2 a1+ a2=pi-a-b góc đại số Nếu tìm dc ra góc thì tính dc tọa độ B nhưng phức tạp, Hỏi có thuật toán nào đơn giản hơn k? 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 3202 Báo cáo bài đăng Đã đăng Tháng 5 15, 2016 Hình như thuật toán giải bài này quá khó :( Bài toán hình học này là bài toán dành cho học sinh trung bình cấp II. Viết hàm lisp này thì trên forum này cũng đếm được vài trăm. Nhưng bạn đặt 1 đầu bài hết sức chán nản: (180-alpha-beta)/2 rồi bảo alpha và beta tính bằng radian. Có ai đem 5 con gà trừ đi 3 bó cải chưa? 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
quocmanh04tt 635 Báo cáo bài đăng Đã đăng Tháng 5 15, 2016 Có ai đem 5 con gà trừ đi 3 bó cải chưa? Trừ thì chưa thấy, nhưng cộng thì có rồi bác ợ! Thậm chí người ta còn cộng thêm cả 1 chai rượu ... :D 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
traitimgio 0 Báo cáo bài đăng Đã đăng Tháng 5 15, 2016 Bài toán hình học này là bài toán dành cho học sinh trung bình cấp II. Viết hàm lisp này thì trên forum này cũng đếm được vài trăm. Nhưng bạn đặt 1 đầu bài hết sức chán nản: (180-alpha-beta)/2 rồi bảo alpha và beta tính bằng radian. Có ai đem 5 con gà trừ đi 3 bó cải chưa? vâng. em nói k rõ. Bài toán trc bác tot 77 giúp em xong rồi. Bjo là bài toán mở rộng :( kiến thức hình học có thể có nhưng k biết mã hóa thành code. Bác có lòng giúp em 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 3202 Báo cáo bài đăng Đã đăng Tháng 5 15, 2016 Tôi là người đầu tiên lên tiếng, và tất nhiên là vì muốn giúp bạn. Nhưng nay đã có tới 2 người giúp rồi, nên nhường lại cho 2 anh kia để theo 1 mạch suy nghĩ. Hẹn dịp khác sẽ giúp bạn. 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
traitimgio 0 Báo cáo bài đăng Đã đăng Tháng 5 15, 2016 Trừ thì chưa thấy, nhưng cộng thì có rồi bác ợ! Thậm chí người ta còn cộng thêm cả 1 chai rượu ... :D cải vs gà chắc là nhúng lẩu :), nhưng thế này rau hơi ít mà gà lại nhiều :d 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
quocmanh04tt 635 Báo cáo bài đăng Đã đăng Tháng 5 16, 2016 Thiếu rau thì bổ sung bát canh chua vậy: (defun b_point (pt1 pt2 pt3 a b / ag1 ag2 phi len bet) (setq ag1 (angle pt2 pt1) ag2 (angle pt2 pt3) phi (- ag2 ag1) bet (atan (/ (* a (sin phi)) (+ (* a (cos phi)) b))) len (/ a (sin bet))) (polar pt2 (+ ag1 bet) len)) ;;---------------------------- (defun c:tt (/ pt-01 pt-02 pt-03) (if (and (setq pt-01 (getpoint "\nNhap toa do diem 01:")) (setq pt-02 (getpoint "\nNhap toa do diem 02:" pt-01)) (setq pt-03 (getpoint "\nNhap toa do diem 03:" pt-02))) (command "Line" "none" (b_point pt-01 pt-02 pt-03 900 500) pt-02 "")) (princ)) P/s: Thứ tự p1, p2, p3 thuận chiều kim đồng hồ, p2 nằm ở đỉnh. 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
phongtran86 39 Báo cáo bài đăng Đã đăng Tháng 5 16, 2016 Thiếu rau thì bổ sung bát canh chua vậy: (defun b_point (pt1 pt2 pt3 a b / ag1 ag2 phi len bet) (setq ag1 (angle pt2 pt1) ag2 (angle pt2 pt3) phi (- ag2 ag1) bet (atan (/ (* a (sin phi)) (+ (* a (cos phi)) b))) len (/ a (sin bet))) (polar pt2 (+ ag1 bet) len)) ;;---------------------------- (defun c:tt (/ pt-01 pt-02 pt-03) (if (and (setq pt-01 (getpoint "\nNhap toa do diem 01:")) (setq pt-02 (getpoint "\nNhap toa do diem 02:" pt-01)) (setq pt-03 (getpoint "\nNhap toa do diem 03:" pt-02))) (command "Line" "none" (b_point pt-01 pt-02 pt-03 900 500) pt-02 "")) (princ)) P/s: Thứ tự p1, p2, p3 thuận chiều kim đồng hồ, p2 nằm ở đỉnh. đúng yêu cầu em :). 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
traitimgio 0 Báo cáo bài đăng Đã đăng Tháng 5 16, 2016 đúng yêu cầu em :). Đúng yêu cầu luôn. :) mấy hàm sin atan loạn xì ngầu lên. Kiến thức hình học của quocmanh04tt với code rất tốt 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 3202 Báo cáo bài đăng Đã đăng Tháng 5 16, 2016 @quocmanh04tt: trong command có 2 points mà chỉ 1 "none" là thiếu mất 1 "none" nhé! 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
quocmanh04tt 635 Báo cáo bài đăng Đã đăng Tháng 5 16, 2016 @quocmanh04tt: trong command có 2 points mà chỉ 1 "none" là thiếu mất 1 "none" nhé! Vâng! Cám ơn 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