Đến nội dung


Hình ảnh
- - - - -

Biến pl phức tạp thành đơn giản mà diện tích không đổi


  • Please log in to reply
50 replies to this topic

#41 DuongTrungHuy

DuongTrungHuy

    biết lệnh copy

  • Members
  • PipPipPip
  • 116 Bài viết
Điểm đánh giá: 41 (tàm tạm)

Đã gửi 16 April 2011 - 08:27 AM

Chắc là bạn up chương trình lên để mình và mọi người cùng tham khảo.

Hi!
Bạn chạy thử xem sao. Mình dự đoán về điều kiện chièu dài cạnh và độ lệch như vậy không biết có đúng không, sai số về diện tích là rất nhỏ.
Chương trình vẫn chưa đẹp lắm, chỉ cốt phục vụ được công việc. Nếu được thì Bjan giới thiệu về toàn bộ vấn đề thì có thể viết hoàn thiện để thân thiện với người dùng hơn. Ví dụ chắc nó phải là 1 Poly đầy đủ các loại chứ không như ở đây chỉ là 1 poly duy nhất v.v...
Bạn xem rồi góp ý nhé!
Chúc may mắn!

(defun cXapxi_22(e1 d1a d2a)
(setq l1 (vlax-curve-getdistatpoint e1 d1a)
l2 (vlax-curve-getdistatpoint e1 d2a)
d0a (vlax-curve-getPointAtDist e1 (* 0.5 (+ l1 l2)))
)
(command "ARC" d1a d0a d2a)(command "PEDIT" (entlast) "Y" "")
(setq e11 (entlast) ds1 (acet-pline-segment-list e11)
ds2 (cdrr (cadddr ds1))
d1 (car (car ds1)) d2 (cadr (car ds1)) bulge1 (car ds2)
ts1 (acet-geom-pline-arc-info d1 d2 bulge1)
tamO (car ts1) bkR (cadr ts1) Ldai (cadddr ts1) LD (last ts1)
goc (angle tamO d0a)
l1 bkR Nua_goctamO (abs (/ (caddr ts1) 2))
deltaL 1.0
)
(If (< Nua_goctamO (/ pi 2))(setq DeltaL (* bkR (- (/ 1 (cos Nua_goctamO)) 1) 0.1)))

(entdel e11)
(While (> deltaL 0.0001)
(setq l1 (+ l1 deltaL) d3 (polar tamO goc l1))
(command "line" d2 d3 "")
(setq e2 (entlast) giao (acet-geom-intersectwith e1 e2 0))
(If (< (distance d2 (car giao)) 0.000001)(setq d4 (cadr giao)) (setq d4 (car giao)))
(setq goc1 (- (angle tamO d2) (angle tamO d4)))
(If (> goc1 Nua_goctamO)(setq goc1 (- (* 2 pi) goc1)))
(setq S1a (* goc1 bkR bkR 0.5)
S1b (Dientich_3canh bkR bkR (distance d2 d4))
S1 (- S1a S1b)
S2a (- (* Nua_goctamO bkR bkR 0.5) S1a)
S2b (Dientich_3canh bkR l1 (distance d3 d4))
S2 (- S2b S2a)
)
(entdel e2)
(If (< s1 s2)(setq l1 (- l1 deltaL) deltaL (/ deltaL 10.0)))
)
(setq deltamax (- (distance d3 tamO) bkR))
)

(defun Mid_Cung(d1 d2 bulge)
(setq diem (polar (Mid0 d1 d2) (- (angle d1 d2) (/ pi 2)) (* bulge (distance d1 d2) 0.5)))
)

(Defun Mid0(A B)
(setq diemgiua (list (* 0.5 (+ (car a)(car B))) (* 0.5 (+ (cadr a)(cadr B)))))
)

(defun c:Xapxi_22()
(vl-load-com)
(setvar "osmode" 512) (setvar "cmdecho" 0)
(setq e1 (car (entsel "\nCho Cung duong tron: "))
dsloai (entget e1)
)
(If (> (cdr (assoc 42 dsloai)) 0.001)
(Progn
(setq ds1z (acet-pline-segment-list e1)
d1a (car (car ds1z)) d2a (cadr (car ds1z)) b0 (car (last ds1z))
dax (Mid_Cung d1a d2a b0) day (Mid0 d1a d2a)
)
(command "Mirror" e1 "" dax day "Y")
(setq e1 (entlast))
)
)
(setq dskq '()
ds1z (acet-pline-segment-list e1)
d1a (car (car ds1z)) d2a (cadr (car ds1z)) b0 (car (last ds1z))
dax (Mid_Cung d1a d2a b0)
Lcung (* 2 (vlax-curve-getdistatpoint e1 dax))
)
(setq dkLdai 26.5 dkCuc 1.47
chu1 (Strcat "\nCung dai: " (rtos Lcung 2 1) " . Dieu kien Lmax: ")
dkLdai (getreal chu1)
dkCuc (getreal "\nDo lech CHmax: ")
)
(setq ncung (fix (/ Lcung dkLdai 2)) deltamax 1000.0 S0 (vlax-curve-getArea e1))
(setvar "osmode" 0)
(While (> deltamax dkcuc)
(setq ncung (1+ ncung) d1b (vlax-curve-getPointAtDist e1 (/ Lcung ncung)))
(cXapxi_22 e1 d1a d1b)
(Princ (strcat "\nLcanh = " (rtos (distance d2 d3) 2 2) ". Do lech CH = " (rtos deltamax 2 3) " Ndoan = " (itoa ncung)))
)
(setq gocCung (- (angle tamO d1a)(angle tamO d2a)))
(If (< goccung 0)(setq goccung (+ goccung pi pi)))
(setq gocCung (/ goccung ncung)
l3 (distance tamO d3) gocdau (angle tamO d3)
dskq (list d2 d3) i 1
)
(repeat (1- ncung)
(setq dskq (append dskq (list (polar tamO (+ (/ gocCung 2)(- gocdau (* i gocCung))) bkR))
(list (polar tamO (- gocdau (* i gocCung)) l3))
)
i (1+ i)
)
)
(setq dskq (append dskq (list d2a)))
(acet-pline-make (list dskq))
(setq S1 (vlax-curve-getArea (entlast))
chu1 (strcat "\nSban dau = " (rtos s0 2 3) " Sxap xi = " (rtos s1 2 3))
chu1 (strcat chu1 "\nSai so % = " (rtos (/ (- s1 s0) s0 0.01) 2 3))
)
(Princ (strcat "\nLcanh = " (rtos (distance d2 d3) 2 2) ". Do lech DeltaH = " (rtos deltamax 2 3)))
(Princ chu1)(Princ)
)

Chương trình chạy là xapxi_22
  • 0

#42 DuongTrungHuy

DuongTrungHuy

    biết lệnh copy

  • Members
  • PipPipPip
  • 116 Bài viết
Điểm đánh giá: 41 (tàm tạm)

Đã gửi 16 April 2011 - 08:30 AM

Chắc là bạn up chương trình lên để mình và mọi người cùng tham khảo.

Không hiểu sao lại có mặt cười chắc trùng ký tự. Bạn download ở đây cho chắc!
http://www.cadviet.c.../3/xapxi_22.lsp
  • 0

#43 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 16 April 2011 - 08:37 AM

Vì "B )" trùng với ký hiệu mặt cười, nên nếu bạn đặt biến là B thì tốt nhất là cho vào tag code :)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#44 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 16 April 2011 - 05:31 PM

Không hiểu sao lại có mặt cười chắc trùng ký tự. Bạn download ở đây cho chắc!
http://www.cadviet.c.../3/xapxi_22.lsp

Mình vẽ cung tròn 90độ bk 25. Khi chạy nó báo lỗi. Bạn xem lại giúp nhé.
Command: XAPXI_22
Cho Cung duong tron: ; error: bad argument type: fixnump: nil
Command:
  • 0

#45 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 17 April 2011 - 03:20 AM

Gọi a là góc chắn cung AOB, a tính bằng radian
Gọi R là bán kính cung AB,
OC x AB = a x R x R

-> Bác có thể tính được OC
-> Biết tọa độ điểm O, biết góc OC nghiêng so với phương ngang => Tọa độ C

Giả sử biết CH (H là hình chiếu của C lên cung AB) (=> biết OC) và R, Tue_NV và các bạn có thể giúp mình xác định AB (hoặc a) nhanh nhất bằng cách nào để vẫn đảm bảo OC x AB = a x R x R. Cám ơn
  • 0

#46 DuongTrungHuy

DuongTrungHuy

    biết lệnh copy

  • Members
  • PipPipPip
  • 116 Bài viết
Điểm đánh giá: 41 (tàm tạm)

Đã gửi 17 April 2011 - 08:05 AM

Mình vẽ cung tròn 90độ bk 25. Khi chạy nó báo lỗi. Bạn xem lại giúp nhé.
Command: XAPXI_22
Cho Cung duong tron: ; error: bad argument type: fixnump: nil
Command:

-Bạn chưa đổi Arc thành Poly đó!
-Nếu chạy sai Bạn chạy lần thứ hai thử xem!
-Bạn load chạy lại thử xem cái này Mình đã điều chỉnh theo như các Bạn trên diễn đàn không cần thử dần Diện tích nữa!
Lệnh là: xapxi_22
http://www.cadviet.c.../xapxi_22_1.lsp
:) Chúc may mắn, vất vả bạn nhỉ!
À Bạn nói sai số 4cm là ở trên thực tế ngoài lô đất hay là trong cad, thực tế mỗi lô đất thì thường yêu cầu chiều dài và độ lêch đó bằng bao nhiêu?
  • 0

#47 DuongTrungHuy

DuongTrungHuy

    biết lệnh copy

  • Members
  • PipPipPip
  • 116 Bài viết
Điểm đánh giá: 41 (tàm tạm)

Đã gửi 17 April 2011 - 08:26 AM

Giả sử biết CH (H là hình chiếu của C lên cung AB) (=> biết OC) và R, Tue_NV và các bạn có thể giúp mình xác định AB (hoặc a) nhanh nhất bằng cách nào để vẫn đảm bảo OC x AB = a x R x R. Cám ơn

OC= OA * (FA / SIN(FA))
Với FA là 1nửa góc ở tâm = góc AOC đó Bạn
OA=R
...
Bạn hỏi xác định AB là xác định cái gì,A và B là 2 điểm đầu mình đã biết rồi mà, có phải không? Mình chỉ đi tìm điểm C thôi mà.
  • 0

#48 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 17 April 2011 - 03:54 PM

OC= OA * (FA / SIN(FA))
Với FA là 1nửa góc ở tâm = góc AOC đó Bạn
OA=R
...
Bạn hỏi xác định AB là xác định cái gì,A và B là 2 điểm đầu mình đã biết rồi mà, có phải không? Mình chỉ đi tìm điểm C thôi mà.

Cái lisp của bạn đã chạy đúng ý mình rồi. Tuy nhiên, lmax là cái bạn phải tính ra sao cho ứng với CHmax sẽ có lmax lớn nhất, mục đích để cho pl mới tạo ra có ít điểm nhất.
Độ lệch 4cm là sai số có thể chấp nhận đc khi chuyển một điểm ra thực địa. Tùy loại công trình, đôi lúc nó đòi hỏi cao hơn.
Đoạn AB cần tìm mà mình hỏi hình như chính là 2 lần lmax trong lisp của bạn đấy (vì mình chưa hiểu lisp của bạn nên kg chắc). Biết R và CHmax tính ra đc OC(=OH+CHmax) và AB (là đoạn dây cung chắn tạo nên hai đoạn thẳng đối xứng AC và BC).
Như ban đầu bài toán mình đặt ra là trong một pl phức tạp. Bạn đã giải quyết trong arc rồi. Bây giờ bạn giúp mình liên kết nó vào trong pl có line và arc. Sau đó bạn nghĩ cách viết trong một pl phức tạp giúp.
Bạn hãy phân biệt TH nào giải quyết đc TH nào kg để người sd biết. Nếu giải quyết đc trong mọi TH thì rất tốt.
Mình đã từng lập trình nên biết đôi lúc rất cam go, mất thời gian và nhức đầu. Bạn lại viết miễn phí nên thật lòng rất cám ơn bạn
  • 0

#49 DuongTrungHuy

DuongTrungHuy

    biết lệnh copy

  • Members
  • PipPipPip
  • 116 Bài viết
Điểm đánh giá: 41 (tàm tạm)

Đã gửi 18 April 2011 - 07:54 AM

Cái lisp của bạn đã chạy đúng ý mình rồi. Tuy nhiên, lmax là cái bạn phải tính ra sao cho ứng với CHmax sẽ có lmax lớn nhất, mục đích để cho pl mới tạo ra có ít điểm nhất.
Độ lệch 4cm là sai số có thể chấp nhận đc khi chuyển một điểm ra thực địa....
Mình đã từng lập trình nên biết đôi lúc rất cam go, mất thời gian và nhức đầu. Bạn lại viết miễn phí nên thật lòng rất cám ơn bạn

Hi! Chào 1 tuần mới tốt lành!
Cám ơn Bạn đã có lời động viên...
Chà ngoài thực địa mà lệch 4cm thì phải có nhiều đỉnh lắm để xấp xỉ 1 cung tròn. Bạn có thể up lên 1 thửa đất cụ thể để Mình dễ hình dung về kích thước của bài toán được k? Mình đã viết hoàn chỉnh nhưng có lẽ phần điều kiện đưa ra về Lmax và độ lệch chưa đúng với ý Bạn. Mình sẽ điều chỉnh lại điều kiện ràng buộc qua những thông tin Bạn vừa đưa đến.

http://www.cadviet.c.../diachinh_1.lsp

Ghi chú: Lệnh là: Diachinh_1
-Bạn chạy thử nếu có trường hợp bị tắc thì up file dwg lên để Mình test thử xem. Lập trình nó cam go ở chỗ như Bạn nói phải hết mọi trường hợp đó. Phải test thật nhiều mẫu thì mới hoàn thiện được, :) có chương trình Mình lập 2-3 năm mà test vẫn chưa hết đó.
-Mình cũng nhờ các Bạn trên diễn đàn cùng test để góp ý luôn nhé, các Bạn đừng chê, gấp quá nên viết nhiều đoạn lũng cũng không tối ưu, chỉ mong chạy tốt rồi sẽ soát xét lại chương trình cho đẹp khong có đoạn thừa...
  • 1

#50 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 18 April 2011 - 11:28 PM

Hi! Chào 1 tuần mới tốt lành!
Cám ơn Bạn đã có lời động viên...
Chà ngoài thực địa mà lệch 4cm thì phải có nhiều đỉnh lắm để xấp xỉ 1 cung tròn. Bạn có thể up lên 1 thửa đất cụ thể để Mình dễ hình dung về kích thước của bài toán được k? Mình đã viết hoàn chỉnh nhưng có lẽ phần điều kiện đưa ra về Lmax và độ lệch chưa đúng với ý Bạn. Mình sẽ điều chỉnh lại điều kiện ràng buộc qua những thông tin Bạn vừa đưa đến.

http://www.cadviet.c.../diachinh_1.lsp

Ghi chú: Lệnh là: Diachinh_1
-Bạn chạy thử nếu có trường hợp bị tắc thì up file dwg lên để Mình test thử xem. Lập trình nó cam go ở chỗ như Bạn nói phải hết mọi trường hợp đó. Phải test thật nhiều mẫu thì mới hoàn thiện được, :) có chương trình Mình lập 2-3 năm mà test vẫn chưa hết đó.
-Mình cũng nhờ các Bạn trên diễn đàn cùng test để góp ý luôn nhé, các Bạn đừng chê, gấp quá nên viết nhiều đoạn lũng cũng không tối ưu, chỉ mong chạy tốt rồi sẽ soát xét lại chương trình cho đẹp khong có đoạn thừa...

Chào bạn. Lisp chạy quá tốt. Nó thiếu cái hàm cdrr và mình đã trích trong cái lisp bạn đã gởi lần trước. Bạn viết rất nhanh và ngắn gọn. Mình đã xem qua nhưng cũng chưa hiểu lắm, mình thiếu một số kiến thức về vl, mình sẽ nghiên cứu sau, hy vọng sẽ học hỏi đc nhiều ở các bạn.
Hôm trước mình thấy bạn viết khi đối tượng là spline tuy chưa đúng ý mình lắm. Bạn có thể giúp mình viết lại bài toán tương tự như arc cho một spline kg. Một là thửa đất vẫn có thể là spline, hai là mình muốn học hỏi bạn viết về spline. Mình kg hiểu lắm về cấu trúc của spline. Cái hôm nọ bạn viết về spline mình thấy nó có nhiều ý tưởng có thể vận dụng cho những TH khác.
Cám ơn bạn rất nhiều
  • 0

#51 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 18 April 2011 - 11:38 PM

Chắc bác viết vội, nên biến thừa cứ gọi là....^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC