Đến nội dung


Hình ảnh
- - - - -

nội suy cao độ tại giao điểm


  • Please log in to reply
22 replies to this topic

#1 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 07 December 2007 - 08:57 PM

Nhờ các anh trong diễn đàn giúp tôi tiện ích nội suy cao độ (tham khảo file dwg) chân thành cảm ơn các anh.

http://www.cadviet.com/upfiles/noisuy_caodo_1.dwg
  • 0

#2 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 08 December 2007 - 09:53 AM

Nhờ các anh trong diễn đàn giúp tôi tiện ích nội suy cao độ (tham khảo file dwg) chân thành cảm ơn các anh.

http://www.cadviet.com/upfiles/noisuy_caodo_1.dwg

Bạn có thể giải thích kỹ hơn chút nữa? Câu hỏi mình đã ghi trong này:

http://www.cadviet.com/upfiles/noisuy_caodo_2.dwg

Hay là bạn post 1 bài tổng quan về trắc địa để những ai lơ mơ như mình hiểu thêm chút ít. Mình chỉ muốn hiểu để khi lập các trình liên quan đến trắc địa có sức thuyết phục hơn. Và biết đâu có lúc nào đó bị thất nghiệp, xin đi làm 1 chân... vác máy cho bạn?
  • 0

#3 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 09 December 2007 - 08:06 AM

Bạn có thể giải thích kỹ hơn chút nữa? Câu hỏi mình đã ghi trong này:

http://www.cadviet.com/upfiles/noisuy_caodo_2.dwg

Hay là bạn post 1 bài tổng quan về trắc địa để những ai lơ mơ như mình hiểu thêm chút ít. Mình chỉ muốn hiểu để khi lập các trình liên quan đến trắc địa có sức thuyết phục hơn. Và biết đâu có lúc nào đó bị thất nghiệp, xin đi làm 1 chân... vác máy cho bạn?


anh ssg cứ đùa, anh mà thất nghiệp thì tụi tôi chỉ có nước . . ."bị + gậy" :) tôi đã giải thích thêm trong file dwg nhờ anh ssg gúp cho. Thanks
http://www.cadviet.com/upfiles/noisuy_caodo_3.dwg
  • 0

#4 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 10 December 2007 - 10:47 AM

Ssg không đùa. "Trăng tròn rồi khuyết, sông đầy lại vơi" - mọi cái đều có thể! Biển học mênh mông, học được cái gì hay cái ấy. Cám ơn Vbao đã diễn giải rất chi tiết.
Về chương trình thì thế này, ssg không đủ khả năng lập một chương trình gọi là "thông minh" để có thể thực hiện các yêu cầu của Vbao một cách tự động hoàn toàn. Lisp dễ dàng xác định loại và tọa độ của tất cả các đối tượng cũng như các phép tính toán, nhưng rất khó phân biệt tính thứ tự của các yếu tố. Trong ví dụ của Vbao có 8 điểm tham chiếu, chia thành 4 cặp. Người dùng rất dễ nhận ra điểm nào kết hợp với điểm nào thành 1 cặp. Nhưng đối với chương trình, rất khó khăn để có thể phân biệt được cái điều rất đơn giản trong mắt con người. Bởi vậy, mình đề nghị cách thức hoạt động của chương trình như sau:
Người dùng chọn điểm cần nội suy p. Có 2 trường hợp:
1) Nếu p nằm trên đường đồng mức -> lấy cao độ đường đồng mức -> ghi kết quả -> kết thúc.
2) Nếu không, yêu cầu người dùng chọn các yếu tố để nội suy (pline đồng mức lẫn điểm tham chiếu) theo từng cặp. Chỗ này xin hỏi lại cho rõ, các điểm tham chiếu và text ghi cao độ trong ví dụ đều ở độ cao z=0, nghĩa là "1 yếu tố điểm tham chiếu" phải bao gồm 1 cặp đối tượng: point để lấy x, y và text để lấy z? Nếu đúng vậy thì hơi lôi thôi hơn một chút. Tại sao mình không quy định vẽ luôn đối tượng point (hoặc điểm insert của đối tượng text) tại đúng vị trí có tọa độ x, y, z mà nó biểu diễn? Nếu được như vậy thì chương trình chỉ cần 1 trong 2 cái đó thôi.
Vbao lưu ý thêm chỗ này nữa, vị trí tương đối (x, y, z) của text ghi kết quả (lấy điểm insert của nó làm chuẩn) so với point tương ứng (có thể lấy h = textheight của chữ làm đơn vị để xác định)
  • 0

#5 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 10 December 2007 - 02:25 PM

Để hỗ trợ cùng bác Ssg, hàm nội suy Z của 1 điểm tôi định sử dụng thuật toán dưới đây, bác Vbao xem có ổn không?
Nếu ok thì tôi sẽ code được hàm nội suy chiều cao z của điểm (x,y) từ tập hợp các đường đồng mức pline.

Đầu vào: P(x,y) và tập đối tượng pline đường đồng mức.
Các bước:
1. Tìm 2 Pline gần điểm P nhất. Khoảng cách từ 1 Pline bất kỳ đến P được tính sơ bộ khoảng cách từ đỉnh gần nhất của Pline đó đến điểm P.
2. Tìm 1 đoạn thẳng AB (trên mặt bằng) đi qua P có chiều dài bé nhất thỏa mãn A nằm trên Pline thứ nhất và B nằm trên Pline thứ 2. Tìm gần đúng đường thẳng này bằng cách qua P vẽ n (n=5,10,...100,...) đường Xline xiên đều nhau và phủ kín 360 độ, tìm giao điểm của các đường Xline này với 2 Pline vừa chọn. Chọn đường Xline nào có tổng khoảng cách (PA+PB) bé nhất.
3. Nội suy chiều cao Z dựa vào cao độ của 2 Pline và 2 khoảng cách (trên mặt bằng) PA, PB.
  • 0

#6 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 10 December 2007 - 03:26 PM

Đầu vào: P(x,y) và tập đối tượng pline đường đồng mức.
Các bước:
1. Tìm 2 Pline gần điểm P nhất. Khoảng cách từ 1 Pline bất kỳ đến P được tính sơ bộ khoảng cách từ đỉnh gần nhất của Pline đó đến điểm P.
2. Tìm 1 đoạn thẳng AB (trên mặt bằng) đi qua P có chiều dài bé nhất thỏa mãn A nằm trên Pline thứ nhất và B nằm trên Pline thứ 2. Tìm gần đúng đường thẳng này bằng cách qua P vẽ n (n=5,10,...100,...) đường Xline xiên đều nhau và phủ kín 360 độ, tìm giao điểm của các đường Xline này với 2 Pline vừa chọn. Chọn đường Xline nào có tổng khoảng cách (PA+PB) bé nhất.
3. Nội suy chiều cao Z dựa vào cao độ của 2 Pline và 2 khoảng cách (trên mặt bằng) PA, PB.

Theo cách diễn giải của Vbao và mình hiểu thì PA vuông góc với pline1, PB vuông góc với pline2. Do đó, các điểm A, P, B không nhất thiết phải cùng nằm trên 1 đường thẳng? Nếu đúng vậy thì không phải dùng các Xline như trên mà có thể lấy chính xác ngay tọa độ của A và B.
Anh Hoành thử xem các functions sau:

(vlax-curve-getClosestPointTo curve-obj givenPnt [extend])
Returns the point (in WCS) on a curve that is nearest to the specified point

(vlax-curve-getClosestPointToProjection curve-obj givenPnt normal [extend])
Returns the closest point (in WCS) on a curve after projecting the curve onto a plane

Ngoài ra, anh xem thử có thuật giải nào có thể chọn luôn 1 lúc 8 điểm tham chiếu (trong ví dụ của vbao) mà không cần buộc user phải pick từng cặp không?
  • 0

#7 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 10 December 2007 - 04:38 PM

* Khổ nỗi là nếu ABP không cùng trên 1 đường thẳng thì ta không có công thức để nội suy. Chỉ có chúng thẳng hàng thì mới nội suy được theo công thức (rất đơn giản):
zP = (dA*zB + dB*zA)/(dA+dB).
trong đó:
- zP, zA, zB là cao độ Z của điểm P, A, B
- dA, dB là khoảng cách mặt bằng của đoạn PA và PB

* Chọn điểm tham chiếu thì theo tôi nghĩ không khó. Chúng ta chỉ cần chọn tất cả các đối tượng, sau đó bỏ đi những đối tượng có khoảng cách đến điểm tham chiếu lớn hơn sqrt(2)*L*fuzz (trong đó L là khoảng cách ô lưới, fuzz là hệ số sai số=1.1). Cách này trước đây tôi đã sử dụng để giúp bác Vbao một lần rồi, chạy khá ổn (tôi nhớ lần đó hình như là tính khối lượng ô lưới thì phải).

Thanks bác Ssg về 2 hàm tìm điểm trên. Nó rất hay, giúp mình có thể chủ động trong việc xác định các điểm tương đối giữa một điểm và một đối tượng.
  • 0

#8 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 10 December 2007 - 06:53 PM

Ssg không đùa. "Trăng tròn rồi khuyết, sông đầy lại vơi" - mọi cái đều có thể! Biển học mênh mông, học được cái gì hay cái ấy. Cám ơn Vbao đã diễn giải rất chi tiết.
Về chương trình thì thế này, ssg không đủ khả năng lập một chương trình gọi là "thông minh" để có thể thực hiện các yêu cầu của Vbao một cách tự động hoàn toàn. Lisp dễ dàng xác định loại và tọa độ của tất cả các đối tượng cũng như các phép tính toán, nhưng rất khó phân biệt tính thứ tự của các yếu tố. Trong ví dụ của Vbao có 8 điểm tham chiếu, chia thành 4 cặp. Người dùng rất dễ nhận ra điểm nào kết hợp với điểm nào thành 1 cặp. Nhưng đối với chương trình, rất khó khăn để có thể phân biệt được cái điều rất đơn giản trong mắt con người. Bởi vậy, mình đề nghị cách thức hoạt động của chương trình như sau:
Người dùng chọn điểm cần nội suy p. Có 2 trường hợp:
1) Nếu p nằm trên đường đồng mức -> lấy cao độ đường đồng mức -> ghi kết quả -> kết thúc.
2) Nếu không, yêu cầu người dùng chọn các yếu tố để nội suy (pline đồng mức lẫn điểm tham chiếu) theo từng cặp. Chỗ này xin hỏi lại cho rõ, các điểm tham chiếu và text ghi cao độ trong ví dụ đều ở độ cao z=0, nghĩa là "1 yếu tố điểm tham chiếu" phải bao gồm 1 cặp đối tượng: point để lấy x, y và text để lấy z? Nếu đúng vậy thì hơi lôi thôi hơn một chút. Tại sao mình không quy định vẽ luôn đối tượng point (hoặc điểm insert của đối tượng text) tại đúng vị trí có tọa độ x, y, z mà nó biểu diễn? Nếu được như vậy thì chương trình chỉ cần 1 trong 2 cái đó thôi.
Vbao lưu ý thêm chỗ này nữa, vị trí tương đối (x, y, z) của text ghi kết quả (lấy điểm insert của nó làm chuẩn) so với point tương ứng (có thể lấy h = textheight của chữ làm đơn vị để xác định)

xin chân thành cảm ơn anh ssg và anh Hoành đã reply và hỗ trợ, tôi xin giải thích thêm để anh ssg tường minh
1) Nếu p nằm trên đường đồng mức -> lấy cao độ đường đồng mức -> ghi kết quả -> kết thúc.
2) người sử dụng chọn các yếu tố nội suy, điểm point sẽ là điểm insert của đối tượng text (các đối tượng đều có z = 0) textheight = textheight hiện hành
cảm ơn các anh.
  • 0

#9 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 11 December 2007 - 08:12 AM

* Khổ nỗi là nếu ABP không cùng trên 1 đường thẳng thì ta không có công thức để nội suy. Chỉ có chúng thẳng hàng thì mới nội suy được theo công thức (rất đơn giản):
zP = (dA*zB + dB*zA)/(dA+dB).
trong đó:
- zP, zA, zB là cao độ Z của điểm P, A, B
- dA, dB là khoảng cách mặt bằng của đoạn PA và PB

* Chọn điểm tham chiếu thì theo tôi nghĩ không khó. Chúng ta chỉ cần chọn tất cả các đối tượng, sau đó bỏ đi những đối tượng có khoảng cách đến điểm tham chiếu lớn hơn sqrt(2)*L*fuzz (trong đó L là khoảng cách ô lưới, fuzz là hệ số sai số=1.1). Cách này trước đây tôi đã sử dụng để giúp bác Vbao một lần rồi, chạy khá ổn (tôi nhớ lần đó hình như là tính khối lượng ô lưới thì phải).

1) Trong bản vẽ của vbao:
http://www.cadviet.com/upfiles/noisuy_caodo_3.dwg
đã giải thích rằng (thống nhất dùng ký hiệu điểm của anh Hoành để khỏi lẫn lộn):
- "qua P kẻ đường vuông góc với 2 đường đồng mức lân cận..."
- "gọi d1 và d2 là khoảng cách từ P đến các đường đồng mức này..."
và vẫn đưa ra công thức nội suy (tương đương) như công thức trên? Với cách giải thích như vậy của vbao, trong trường hợp tổng quát, APB không nhất thiết phải nằm trên cùng 1 đường thẳng. Tóm lại, cách giải thích của vbao và của anh Hoành mâu thuẫn nhau. Mình đã nói là amateur về chuyên môn, đề nghị các anh thống nhất và làm rõ chỗ này (chưa thông thì không thể bắt tay làm chương trình được).
Xin nói thêm một chút, dù không rành về trắc địa nhưng bằng cảm nhận và suy luận logic của một nhà kỹ thuật, ssg thấy rằng ta cứ kẻ PA, PB vuông góc với 2 đường đồng mức, không cần quan tâm đến việc APB có thẳng hàng hay không và cứ áp dụng công thức nội suy trên là OK. Đưởng gãy khúc cũng cứ xem như là một... đường thẳng đặc biệt(!), giống như khi ta thể hiện mặt cắt với với vết cắt gãy khúc trên các bản vẽ kỹ thuật vậy mà!

2) Chọn được 8 điểm tham chiếu (đánh số từ 1 đến 8) lân cận điểm P theo anh Hoành thì OK rồi. Nhưng làm thế nào để chọn ra các cặp 1-5, 2-6, 3-7, 4-8 để nội suy theo cặp như vbao trình bày (không phải là lấy trung bình cộng cao độ 8 điểm trên)?
  • 0

#10 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 11 December 2007 - 12:21 PM

Hàm findZ dưới đây sẽ nội suy tọa độ Z của điểm P dựa trên các đường đồng mức Pline nằm trong tập chọn (selectionset) sspl. Hàm này được thực hiện theo thuật toán lấy 2 điểm gần nhất trên 2 pline rồi dùng công thức zP = (d1*z2 + d2*z1)/(d1+d2).

Lệnh Test để thử nghiệm tính hiệu quả của hàm findZ. Khi gọi lệnh Test, chương trình sẽ yêu cầu nhập vào tọa độ điểm P, yêu cầu người dùng select các pline là đường đồng mức (nếu enter, tập chọn của lần dùng lệnh trước đó sẽ được sử dụng). Sau khi xử lý, lệnh test sẽ tạo một text có giá trị Z nội suy tại tọa độ P.


(defun findZ (p sspl / MintoPl cmp lstent d1 d2 z1 z2)
;; Tim z cua diem P khi biet selectionset cac duong dong muc la ssp
(setq MinToPl (lambda (x)
(cons x (distance (vlax-curve-getClosestPointTo x p) p))
)
cmp (lambda (x y) (< (cdr x) (cdr y)))
lstent (vl-sort (mapcar 'MinToPl (ss2ent sspl)) 'cmp)
d1 (cdr (car lstent))
d2 (cdr (cadr lstent))
z1 (cdr (assoc 38 (entget (car (car lstent)))))
z2 (cdr (assoc 38 (entget (car (cadr lstent)))))
)
(/ (+ (* d1 z2) (* d2 z1)) (+ d1 d2))
)

(defun c:test ( / p tmp)
(setq p (getpoint "\nVao diem P")
tmp (ssget '((0 . "LWPOLYLINE")))
ss (if tmp tmp ss)
)
(wtxt (rtos (findZ p ss) 2 2) p)
(princ)
)

(defun ss2ent (ss / sodt index lstent)
;; Bien tap chon thanh tap hop cac entname
(setq
sodt (sslength ss)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)

(defun wtxt (txt p / sty d h)
(setq
sty (getvar "textstyle")
d (tblsearch "style" sty)
h (cdr (assoc 40 d))
)
(entmake (list (cons 0 "TEXT")
(cons 7 sty)
(cons 1 txt)
(cons 10 p)
(if (> h 0)
(cons 40 h)
(assoc 40 d)
)
(assoc 41 d)
)
)
)

  • 0

#11 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 11 December 2007 - 03:35 PM

Hàm findZ dưới đây sẽ nội suy tọa độ Z của điểm P dựa trên các đường đồng mức Pline nằm trong tập chọn (selectionset) sspl. Hàm này được thực hiện theo thuật toán lấy 2 điểm gần nhất trên 2 pline rồi dùng công thức zP = (d1*z2 + d2*z1)/(d1+d2).

1) Anh Hoành bổ sung thêm vl-load-com. Nếu không, chạy lần đầu nó báo lỗi!
2) Cám ơn anh đã hỗ trợ. Chờ vbao xác nhận phương pháp tính, ssg sẽ làm thêm phần nội suy theo các cặp điểm và tổng hợp luôn.
  • 0

#12 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 11 December 2007 - 08:32 PM

1) Anh Hoành bổ sung thêm vl-load-com. Nếu không, chạy lần đầu nó báo lỗi!
2) Cám ơn anh đã hỗ trợ. Chờ vbao xác nhận phương pháp tính, ssg sẽ làm thêm phần nội suy theo các cặp điểm và tổng hợp luôn.


cảm ơn anh Hoành đã share tiện ích finfz cho tôi, riêng về cao độ điểm nội suy bản thân nó đã có độ chính xác không cao, áp dụng trường hợp APB phải nằm trên cùng 1 đường thẳng theo cách của anh Hoành là đúng nhất, tôi rất áy náy vì tôi mà hai anh vất vả, một lần nửa xin chân thành cảm ơn các anh.
  • 0

#13 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 12 December 2007 - 08:16 AM

cảm ơn anh Hoành đã share tiện ích finfz cho tôi, riêng về cao độ điểm nội suy bản thân nó đã có độ chính xác không cao, áp dụng trường hợp APB phải nằm trên cùng 1 đường thẳng theo cách của anh Hoành là đúng nhất, tôi rất áy náy vì tôi mà hai anh vất vả, một lần nửa xin chân thành cảm ơn các anh.

Không có gì phải áy náy, theo đúng tinh thần CadViet là ShareReceive! Mình giúp bạn về lisp và học được một chút về trắc địa. OK?
Mình vẫn chưa thông về cách nội suy! Vbao xem lại bản vẽ này, tại vị trí điểm P ấy:

http://www.esnips.com/doc/977485a9-38d9-45.../noisuy_caodo_4

Cách 1: Theo A, B là cung cách của hàm findz vừa rồi.
Cách 2: Theo A', B' là thủ thuật mà anh Hoành đề nghị hôm nọ: vẽ hàng loạt đường Xline và chọn đường Xline nào có A'B' bé nhất (vị trí đường Xline màu lam trên hình là mình vẽ áng chừng, chưa phải A'B' bé nhất)

Nhận xét của ssg:
1) Về lập trình, cách 1 đơn giản hơn rất nhiều
2) Đồng ý là cả 2 phương pháp đều có sai số, nhưng trong đa số trường hợp, cả 2 cách đều cho kết quả gần như nhau. Tuy nhiên, nếu hình dáng đường đồng mức tại khu vực đang xét hơi "quái dị" thì có nhiều khả năng cách 2 sẽ phạm sai số lớn hơn?
3) Cách 2 không đúng với diễn giải của vbao: "qua P kẻ đường vuông góc với 2 đường đồng mức lân cận...", nó chẳng vuông góc với "thằng" nào cả! Chính ra chỗ này cũng chưa rõ ý lắm: từ P bất kỳ, kẻ vuông góc với 1 đường đồng mức thì nói chung nó không vuông góc với đường đồng mức còn lại. Đây chính là vấn đề "ấm ức" nhất của mình!
Tóm lại, quan điểm ssg là phân tích hết ý để rồi cuối cùng chọn lấy 1 cách duy nhất, không có khái niệm "đúng nhất" hay "đúng nhì"! Chấp nhận sai số, nhưng sai số nhỏ vẫn tốt hơn. Sự mất công nhiều hơn trong lập trình không phải là vấn đề chính.
  • 0

#14 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 12 December 2007 - 12:21 PM

Không có gì phải áy náy, theo đúng tinh thần CadViet là ShareReceive! Mình giúp bạn về lisp và học được một chút về trắc địa. OK?
Mình vẫn chưa thông về cách nội suy! Vbao xem lại bản vẽ này, tại vị trí điểm P ấy:

http://www.esnips.com/doc/977485a9-38d9-45.../noisuy_caodo_4

Cách 1: Theo A, B là cung cách của hàm findz vừa rồi.
Cách 2: Theo A', B' là thủ thuật mà anh Hoành đề nghị hôm nọ: vẽ hàng loạt đường Xline và chọn đường Xline nào có A'B' bé nhất (vị trí đường Xline màu lam trên hình là mình vẽ áng chừng, chưa phải A'B' bé nhất)

Nhận xét của ssg:
1) Về lập trình, cách 1 đơn giản hơn rất nhiều
2) Đồng ý là cả 2 phương pháp đều có sai số, nhưng trong đa số trường hợp, cả 2 cách đều cho kết quả gần như nhau. Tuy nhiên, nếu hình dáng đường đồng mức tại khu vực đang xét hơi "quái dị" thì có nhiều khả năng cách 2 sẽ phạm sai số lớn hơn?
3) Cách 2 không đúng với diễn giải của vbao: "qua P kẻ đường vuông góc với 2 đường đồng mức lân cận...", nó chẳng vuông góc với "thằng" nào cả! Chính ra chỗ này cũng chưa rõ ý lắm: từ P bất kỳ, kẻ vuông góc với 1 đường đồng mức thì nói chung nó không vuông góc với đường đồng mức còn lại. Đây chính là vấn đề "ấm ức" nhất của mình!
Tóm lại, quan điểm ssg là phân tích hết ý để rồi cuối cùng chọn lấy 1 cách duy nhất, không có khái niệm "đúng nhất" hay "đúng nhì"! Chấp nhận sai số, nhưng sai số nhỏ vẫn tốt hơn. Sự mất công nhiều hơn trong lập trình không phải là vấn đề chính.

tôi không download file cua anh ssg được, lỗi do tôi không diễn giải cụ thể nên anh ssg " ấm ức" về vuông góc với đường đồng mức, có thể hiểu như sau: kẻ đường thẳng đi qua điểm P sao cho cắt 2 đường đồng mức gần nhất dưới các góc lớn nhất trong trường hơp tốt nhất góc đó là 90d00'
  • 0

#15 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 12 December 2007 - 04:21 PM

tôi không download file cua anh ssg được, lỗi do tôi không diễn giải cụ thể nên anh ssg " ấm ức" về vuông góc với đường đồng mức, có thể hiểu như sau: kẻ đường thẳng đi qua điểm P sao cho cắt 2 đường đồng mức gần nhất dưới các góc lớn nhất trong trường hơp tốt nhất góc đó là 90d00'

Phải có bản vẽ mới hiểu được! Lỗi gì không biết, up lên được nhưng down không được! Mà sao tính năng upload của diễn đàn cũng... đơ rồi???

Thử lại lần nữa:

http://www.esnips.com/doc/7437b70c-f53f-44.../noisuy_caodo_4

Lần này chắc OK rồi. Vbao xem rồi cho ý kiến tiếp.
  • 0

#16 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 12 December 2007 - 07:30 PM

Phải có bản vẽ mới hiểu được! Lỗi gì không biết, up lên được nhưng down không được! Mà sao tính năng upload của diễn đàn cũng... đơ rồi???

Thử lại lần nữa:

http://www.esnips.com/doc/7437b70c-f53f-44.../noisuy_caodo_4

Lần này chắc OK rồi. Vbao xem rồi cho ý kiến tiếp.


cảm ơn anh ssg, tôi đã down được file, lý thuyết của phương pháp nội suy cao độ:
- kẻ đường thẳng đi qua điểm P sao cho cắt 2 đường đồng mức gần nhất (ưu tiên 1)
- trong trường hơp tốt nhất góc đó là 90d00' (ưu tiên 2)
vế lập trình anh ssg thấy cách nào thuận tiện nhất thì áp dụng, vì đây là điểm nội suy (độ chính xác không cao) nên qui phạm cho phép sai số cao độ điểm nội suy = 1/3 sqrt E ( E: khoảng cao đều).
  • 0

#17 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 13 December 2007 - 08:23 AM

cảm ơn anh ssg, tôi đã down được file, lý thuyết của phương pháp nội suy cao độ:
- kẻ đường thẳng đi qua điểm P sao cho cắt 2 đường đồng mức gần nhất (ưu tiên 1)
- trong trường hơp tốt nhất góc đó là 90d00' (ưu tiên 2)
vế lập trình anh ssg thấy cách nào thuận tiện nhất thì áp dụng, vì đây là điểm nội suy (độ chính xác không cao) nên qui phạm cho phép sai số cao độ điểm nội suy = 1/3 sqrt E ( E: khoảng cao đều).

OK, mình hiểu rồi. Mình đề nghị cung cách hoạt động của chương trình như sau:
1) Đặt layer muốn ghi text cao độ cho hiện hành
2) Chọn điểm P cần nội suy
3) Chỉ định chính xác 2 đường đồng mức
4) Chọn các điểm cần tham chiếu (cho phép chọn hàng loạt điểm bằng select window). Điều kiện: tổng số điểm phải là số chẵn (tất nhiên là không tính điểm P) và về đại thể, chúng nằm gần các đỉnh và trung điểm các cạnh của 1 hình vuông với một độ sai lệch vừa phải. Điều kiện này không căng lắm, đủ để phân biệt điểm góc và điểm cạnh.
Đối với bước 3 và 4, nếu không select mà Enter sẽ được hiểu là bỏ qua, không xét yếu tố đó.
5) Chương trình sẽ căn cứ vào toàn bộ tình hình nhập liệu trên và tự đưa ra phương án tính theo 3 trường hợp mà anh đã yêu cầu.
Vbao cần bổ sung gì nữa không? Có hay không thì cũng thong thả vài hôm nhé, ssg đang hơi bận việc.
  • 0

#18 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 18 December 2007 - 07:06 AM

Chương trình nội suy cao độ theo các đường đồng mức và/hoặc các điểm tham chiếu. Cung cách hoạt động đúng như ssg đã trình bày ở bài trước. Tên lệnh: ZZ


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;
;;;This program interpolate elevation at 1 point-object
;;;from 2 equal level polylines and/or reference point-objects
;;;Elevation of each reference point-object is specified by nearest text_object
;;;Written by ssg - December 2007 - www.cadviet.com
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;

;;;--------------------------------------------------------------------
(defun mod(x y) (fix (rem x y)) ) ;;;Remainder result of divide, return INT
;;;--------------------------------------------------------------------
(defun wtxt (txt p / sty d h) ;;;Write txt at p
(setq
sty (getvar "textstyle")
d (tblsearch "style" sty)
h (cdr (assoc 40 d))
)
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p)
(if (> h 0) (cons 40 h) (assoc 40 d)) (assoc 41 d))
)
)
;;;--------------------------------------------------------------------
(defun ss2ent (ss / i Le e) ;;;Convert ss to list of ename
(setq i 0 Le nil)
(repeat (sslength ss)
(setq
e (ssname ss i)
Le (append Le (list e))
i (1+ i)
)
)
Le
)
;;;--------------------------------------------------------------------
(defun ss2Lp(ssp / Lp i e p) ;;;Convert ss of points to list of 3Dpoints
(setq i 0 Lp nil)
(repeat (sslength ssp)
(setq
e (ssname ssp i)
p (cdr (assoc 10 (entget e)))
Lp (append Lp (list p))
i (1+ i)
)
)
Lp
)
;;;--------------------------------------------------------------------
(defun aver(Ln / tot x) ;;;Average List of Number
(setq tot 0)
(foreach x Ln (setq tot (+ tot x)))
(/ tot (length Ln))
)
;;;--------------------------------------------------------------------
(defun distance_xy (p1 p2) ;;;Distance between 2 projections of p1 and p2
(setq
pp1 (list (car p1) (cadr p1) 0)
pp2 (list (car p2) (cadr p2) 0)
)
(distance pp1 pp2)
)
;;;--------------------------------------------------------------------
(defun inter2p(p p1 p2) ;;;Interpolate zp from p1, p2
(setq
d1 (distance_xy p p1)
d2 (distance_xy p p2)
z1 (caddr p1)
z2 (caddr p2)
)
(/ (+ (* d1 z2) (* d2 z1)) (+ d1 d2))
)
;;;--------------------------------------------------------------------
(defun ariang(p1 p2 p3) ;;;Arithmetic Angle between 2 vector p1p2 and p2p3
(setq
a1 (angle p2 p1)
a2 (angle p2 p3)
)
(abs (- (abs (- a1 a2)) pi))
)
;;;--------------------------------------------------------------------
(defun pair(p Lp / Lpair Lpass p1 p2 ass chk x y)
;;;Arrange list of points Lp in pairs, opposite by p. Return list of pair_list
(setq Lpair nil)
(while Lp
(setq
p1 (car Lp)
ass (lambda (x) (cons x (ariang p1 p x)))
chk (lambda (x y) (< (cdr x) (cdr y)))
Lpass (vl-sort (mapcar 'ass Lp) 'chk)
p2 (car (car Lpass))
Lpair (append Lpair (list (list p1 p2)))
Lp (vl-remove p1 Lp)
Lp (vl-remove p2 Lp)
)
)
Lpair
)
;;;--------------------------------------------------------------------
(defun getZ(p sst) ;;;Get nearest text in sst, assign to zp
(setq
Lt (ss2ent sst)
neap (lambda (x y)
(<
(distance_xy p (cdr (assoc 10 (entget x))))
(distance_xy p (cdr (assoc 10 (entget y))))
)
)
Lt (vl-sort Lt 'neap)
z (atof (cdr (assoc 1 (entget (car Lt)))))
p (subst z (caddr p) p)
)
)
;;;--------------------------------------------------------------------
(defun placp(pl p / pp) ;;;Check pl across p, different z
(vl-load-com)
(setq pp (vlax-curve-getClosestPointTo pl p))
(and (= (car p) (car pp)) (= (cadr p) (cadr pp)))
)
;;;--------------------------------------------------------------------


;;;MAIN PROGRAM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;
(defun C:ZZ(/ oldos p Ln Lpp res sspl pl1 pl2 pp1 pp2 v1 ssp sst Lp x)

;;;INPUT DATA
(setq oldos (getvar "osmode"))
(setvar "osmode" 8)
(setq
p (getpoint "\nBase point:")
Ln nil Lpp nil res nil
)
(setvar "osmode" 0)
(prompt "\nSelect 2 Equal Level Polylines or ...")
(setq sspl (ssget '((0 . "LWPOLYLINE"))))

;;;INTERPOLATE FROM EQUAL LEVEL PLINE
(if (and sspl (setq pl1 (ssname sspl 0) pl2 (ssname sspl 1))) (progn
(vl-load-com)
(setq
pp1 (vlax-curve-getClosestPointTo pl1 p)
pp2 (vlax-curve-getClosestPointTo pl2 p)
)
;;;If pline across p then write result and exit
(if (and (= (car p) (car pp1)) (= (cadr p) (cadr pp1))) (setq res (caddr pp1)))
(if (and (= (car p) (car pp2)) (= (cadr p) (cadr pp2))) (setq res (caddr pp2)))
(if res (progn
(alert "The polyline across the point")
(wtxt (rtos res) p)
(setvar "osmode" oldos)
(princ)
(exit)
))
;;;Else continue...
(setq
v1 (inter2p p pp1 pp2)
Ln (append Ln (list v1))
)
))

;;;INTERPOLATE FROM REFERENCE POINTS
(prompt "\nSelect Reference Points or ...")
(if (and (setq ssp (ssget '((0 . "POINT"))))
(setq sst (ssget "X" '((0 . "TEXT"))))
)
(progn
(setq Lp (vl-remove p (ss2Lp ssp)))
(if (/= (mod (length Lp) 2) 0)
(progn
(alert "Number of reference points must be in Even (n = 2k). Action is canceled!")
(exit)
)
(progn
(foreach x Lp (setq Lp (subst (getZ x sst) x Lp)))
(setq Lpp (pair p Lp))
(foreach x Lpp (setq Ln (append Ln (list (inter2p p (car x) (cadr x))))))
)
)
)
)

;;;WRITE RESULT
(if Ln (wtxt (rtos (aver Ln)) p))
(setvar "osmode" oldos)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;



Thuyết minh hoạt động của chương trình:
1) Nội suy theo đường đồng mức: từ điểm đang xét, kẻ 2 đường vuông góc (theo mặt bằng) với 2 đường đồng mức. Sau đó thực hiện nội suy theo công thức:
Z = (d1*Z2 + d2*z1) / (d1 + d2), không quan tâm đến 3 điểm có thẳng hàng hay không.

2) Nội suy theo các cặp điểm tham chiếu:
Công thức nội suy vẫn như trên. Yêu cầu tổng số điểm chọn, trừ điểm đang xét, phải là số chẵn. Nếu không, chương trình sẽ ra thông báo và sau đó exit.
Xem ra cũng khá dài dòng vì để lấy được dữ liệu của 1 điểm phải cần đến 2 đối tượng khác loại nhau (lấy X, Y từ point và lấy Z từ text). Trong 2 thành phần đó, chương trình dựa vào point là chính. Độ cao Z được lấy theo đối tượng text gần nhất so với point. Lưu ý: điểm chuẩn của text đối với chương trình là điểm insert của nó. Do đó, trong các vùng phức tạp, mật độ text dày đặc, có khả năng gặp phải trường hợp “râu ông nọ cắm cằm bà kia”! Nếu có thể, nên chuyển điểm insert của text về trùng (x, y) với đối tượng point mà nó biểu diễn để bảo đảm cho chương trình chạy chính xác.

3) Theo mình, các bản vẽ đã “lỡ có” rồi thì thôi. Nhưng khi lập bản vẽ mới, nên có quy ước nhất quán sẽ tạo điều kiện thuận lợi hơn cho lập trình khi cần. Chẳng hạn, cách ghi text và point, nếu bảo đảm được 1 trong 2 điều kiện sau thì chương trình này sẽ đơn giản hơn rất nhiều, và hoàn toàn không phải bận tâm đến vấn đề nêu trên:
- Các đối tượng point được vẽ đúng độ cao z (giống như các pline đồng mức).
- Các đối tượng text có điểm insert đúng tọa độ x, y của point

Vbao xem và test trong nhiều trường hợp khác nhau. Nếu có vấn đề gì thì phản hồi, mình sẽ sửa và bổ sung.
  • 0

#19 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 18 December 2007 - 09:39 PM

Chương trình nội suy cao độ theo các đường đồng mức và/hoặc các điểm tham chiếu. Cung cách hoạt động đúng như ssg đã trình bày ở bài trước. Tên lệnh: ZZ


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;
;;;This program interpolate elevation at 1 point-object
;;;from 2 equal level polylines and/or reference point-objects
;;;Elevation of each reference point-object is specified by nearest text_object
;;;Written by ssg - December 2007 - www.cadviet.com
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;

;;;--------------------------------------------------------------------
(defun mod(x y) (fix (rem x y)) ) ;;;Remainder result of divide, return INT
;;;--------------------------------------------------------------------
(defun wtxt (txt p / sty d h) ;;;Write txt at p
(setq
sty (getvar "textstyle")
d (tblsearch "style" sty)
h (cdr (assoc 40 d))
)
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p)
(if (> h 0) (cons 40 h) (assoc 40 d)) (assoc 41 d))
)
)
;;;--------------------------------------------------------------------
(defun ss2ent (ss / i Le e) ;;;Convert ss to list of ename
(setq i 0 Le nil)
(repeat (sslength ss)
(setq
e (ssname ss i)
Le (append Le (list e))
i (1+ i)
)
)
Le
)
;;;--------------------------------------------------------------------
(defun ss2Lp(ssp / Lp i e p) ;;;Convert ss of points to list of 3Dpoints
(setq i 0 Lp nil)
(repeat (sslength ssp)
(setq
e (ssname ssp i)
p (cdr (assoc 10 (entget e)))
Lp (append Lp (list p))
i (1+ i)
)
)
Lp
)
;;;--------------------------------------------------------------------
(defun aver(Ln / tot x) ;;;Average List of Number
(setq tot 0)
(foreach x Ln (setq tot (+ tot x)))
(/ tot (length Ln))
)
;;;--------------------------------------------------------------------
(defun distance_xy (p1 p2) ;;;Distance between 2 projections of p1 and p2
(setq
pp1 (list (car p1) (cadr p1) 0)
pp2 (list (car p2) (cadr p2) 0)
)
(distance pp1 pp2)
)
;;;--------------------------------------------------------------------
(defun inter2p(p p1 p2) ;;;Interpolate zp from p1, p2
(setq
d1 (distance_xy p p1)
d2 (distance_xy p p2)
z1 (caddr p1)
z2 (caddr p2)
)
(/ (+ (* d1 z2) (* d2 z1)) (+ d1 d2))
)
;;;--------------------------------------------------------------------
(defun ariang(p1 p2 p3) ;;;Arithmetic Angle between 2 vector p1p2 and p2p3
(setq
a1 (angle p2 p1)
a2 (angle p2 p3)
)
(abs (- (abs (- a1 a2)) pi))
)
;;;--------------------------------------------------------------------
(defun pair(p Lp / Lpair Lpass p1 p2 ass chk x y)
;;;Arrange list of points Lp in pairs, opposite by p. Return list of pair_list
(setq Lpair nil)
(while Lp
(setq
p1 (car Lp)
ass (lambda (x) (cons x (ariang p1 p x)))
chk (lambda (x y) (< (cdr x) (cdr y)))
Lpass (vl-sort (mapcar 'ass Lp) 'chk)
p2 (car (car Lpass))
Lpair (append Lpair (list (list p1 p2)))
Lp (vl-remove p1 Lp)
Lp (vl-remove p2 Lp)
)
)
Lpair
)
;;;--------------------------------------------------------------------
(defun getZ(p sst) ;;;Get nearest text in sst, assign to zp
(setq
Lt (ss2ent sst)
neap (lambda (x y)
(<
(distance_xy p (cdr (assoc 10 (entget x))))
(distance_xy p (cdr (assoc 10 (entget y))))
)
)
Lt (vl-sort Lt 'neap)
z (atof (cdr (assoc 1 (entget (car Lt)))))
p (subst z (caddr p) p)
)
)
;;;--------------------------------------------------------------------
(defun placp(pl p / pp) ;;;Check pl across p, different z
(vl-load-com)
(setq pp (vlax-curve-getClosestPointTo pl p))
(and (= (car p) (car pp)) (= (cadr p) (cadr pp)))
)
;;;--------------------------------------------------------------------
;;;MAIN PROGRAM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;
(defun C:ZZ(/ oldos p Ln Lpp res sspl pl1 pl2 pp1 pp2 v1 ssp sst Lp x)

;;;INPUT DATA
(setq oldos (getvar "osmode"))
(setvar "osmode" 8)
(setq
p (getpoint "\nBase point:")
Ln nil Lpp nil res nil
)
(setvar "osmode" 0)
(prompt "\nSelect 2 Equal Level Polylines or <Enter for none>...")
(setq sspl (ssget '((0 . "LWPOLYLINE"))))

;;;INTERPOLATE FROM EQUAL LEVEL PLINE
(if (and sspl (setq pl1 (ssname sspl 0) pl2 (ssname sspl 1))) (progn
(vl-load-com)
(setq
pp1 (vlax-curve-getClosestPointTo pl1 p)
pp2 (vlax-curve-getClosestPointTo pl2 p)
)
;;;If pline across p then write result and exit
(if (and (= (car p) (car pp1)) (= (cadr p) (cadr pp1))) (setq res (caddr pp1)))
(if (and (= (car p) (car pp2)) (= (cadr p) (cadr pp2))) (setq res (caddr pp2)))
(if res (progn
(alert "The polyline across the point")
(wtxt (rtos res) p)
(setvar "osmode" oldos)
(princ)
(exit)
))
;;;Else continue...
(setq
v1 (inter2p p pp1 pp2)
Ln (append Ln (list v1))
)
))

;;;INTERPOLATE FROM REFERENCE POINTS
(prompt "\nSelect Reference Points or <Enter for none>...")
(if (and (setq ssp (ssget '((0 . "POINT"))))
(setq sst (ssget "X" '((0 . "TEXT"))))
)
(progn
(setq Lp (vl-remove p (ss2Lp ssp)))
(if (/= (mod (length Lp) 2) 0)
(progn
(alert "Number of reference points must be in Even (n = 2k). Action is canceled!")
(exit)
)
(progn
(foreach x Lp (setq Lp (subst (getZ x sst) x Lp)))
(setq Lpp (pair p Lp))
(foreach x Lpp (setq Ln (append Ln (list (inter2p p (car x) (cadr x))))))
)
)
)
)

;;;WRITE RESULT
(if Ln (wtxt (rtos (aver Ln)) p))
(setvar "osmode" oldos)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;



Thuyết minh hoạt động của chương trình:
1) Nội suy theo đường đồng mức: từ điểm đang xét, kẻ 2 đường vuông góc (theo mặt bằng) với 2 đường đồng mức. Sau đó thực hiện nội suy theo công thức:
Z = (d1*Z2 + d2*z1) / (d1 + d2), không quan tâm đến 3 điểm có thẳng hàng hay không.

2) Nội suy theo các cặp điểm tham chiếu:
Công thức nội suy vẫn như trên. Yêu cầu tổng số điểm chọn, trừ điểm đang xét, phải là số chẵn. Nếu không, chương trình sẽ ra thông báo và sau đó exit.
Xem ra cũng khá dài dòng vì để lấy được dữ liệu của 1 điểm phải cần đến 2 đối tượng khác loại nhau (lấy X, Y từ point và lấy Z từ text). Trong 2 thành phần đó, chương trình dựa vào point là chính. Độ cao Z được lấy theo đối tượng text gần nhất so với point. Lưu ý: điểm chuẩn của text đối với chương trình là điểm insert của nó. Do đó, trong các vùng phức tạp, mật độ text dày đặc, có khả năng gặp phải trường hợp “râu ông nọ cắm cằm bà kia”! Nếu có thể, nên chuyển điểm insert của text về trùng (x, y) với đối tượng point mà nó biểu diễn để bảo đảm cho chương trình chạy chính xác.

3) Theo mình, các bản vẽ đã “lỡ có” rồi thì thôi. Nhưng khi lập bản vẽ mới, nên có quy ước nhất quán sẽ tạo điều kiện thuận lợi hơn cho lập trình khi cần. Chẳng hạn, cách ghi text và point, nếu bảo đảm được 1 trong 2 điều kiện sau thì chương trình này sẽ đơn giản hơn rất nhiều, và hoàn toàn không phải bận tâm đến vấn đề nêu trên:
- Các đối tượng point được vẽ đúng độ cao z (giống như các pline đồng mức).
- Các đối tượng text có điểm insert đúng tọa độ x, y của point

Vbao xem và test trong nhiều trường hợp khác nhau. Nếu có vấn đề gì thì phản hồi, mình sẽ sửa và bổ sung.


chân thành cảm ơn anh ssg, chương trình chạy rất tốt :)
  • 2

#20 kegiaumat

kegiaumat

    biết vẽ circle

  • Members
  • PipPip
  • 39 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 15 September 2009 - 09:17 AM

em cũng đi tìm cái này lâu lắm rùi mà chưa thấy.cám ơn bác ssg nhiều nhưng có một vấn đề thế này.em muốn chọn đườg đồng mức sau đó cấy điểm liên tiếp đến lúc nào mình thoát lệnh thì thôi (tại vì lúc mình cấy text vào bình đồ thì cần rất nhiều nếu cấy 1 điểm lại phải chọn ddm thì hơi lâu)
vấn đề thứ 2 là khi mình select DDM thì mình có thể chọn nhiều DDM sau đó chương trình sẻ tìm ra 2 DDM gần với điểm point mình cần cấy nhất
một lần nữa xin cảm ơn bác SSG. có jì bác mail cho em theo địa chỉ (tridungtecco2@gmail.com em là dân công trình nên cũng ít khi được lên mạng lắm đi suốt mà)
  • -2