Đến nội dung


Hình ảnh

Hỏi cách tạo đường đồng mức


  • Please log in to reply
52 replies to this topic

#21 redsea_tq

redsea_tq

    biết lệnh erase

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

Đã gửi 08 October 2011 - 07:31 PM

à bác là người viết phần mềm san nền main trong kithuatdothi à.hehe jo mới bít. phần mềm đó cũng dễ dùng nhưng mà cái quan trọng nhất là điều chỉnh hướng thoát nước lại không có (nhưng dù sao phần mềm đó cũng ok). mình cũng đã phát triển được một phần mềm hoàn toàn viết bằng lisp trên nền thằng land. mình thấy cũng ok phết (san nền trên mọi địa hình mọi hình thái và thoát nước thì tùy chỉnh, bản vẽ thì tùy mình hiệu chỉnh được nên cũng khá đẹp) . mình cũng chỉ bít phọt phẹt tí vba thui chứ vb for cad thì mình cũng chưa ngâm cứu. hôm nào có thời gian chắc nghe theo lời bác ngâm cứu ít, bác có tài liệu ji về vb for cad bác sharing cho thằng em ít nhé (tridungtecco2@gmai.com). à cái thằng arx cũng đã từng xem qua nhưng hoa hết cả mắt ko hỉu ji hết (chắc tại em ko bít ji về c)

Mình cũng chỉ vừa làm vừa nghiên cứu thôi vướng chỗ nào lên mạng tìm hướng giải quyết dần dần cũng có kiến thức đủ dùng. vb dùng cho cad cũng giống vba cho cad chỉ khác là bạn phải gán cái thằng thisdrawing vào một biến nào đó và dùng biến đó giải quyết toàn bộ. Còn bản main mới mình cũng đã điều chỉnh lưới tam giác theo yêu cầu người sử dụng nhưng còn nhiều vấn đề liên quan đến taluy nên mình cũng đang hoàn chỉnh thêm!
  • 0

#22 redsea_tq

redsea_tq

    biết lệnh erase

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

Đã gửi 08 October 2011 - 07:39 PM

Về việc chạy lâu mình có ý kiến thế này :
- Thường thì các giải thuật sắp xếp tìm kiếm trong dữ liệu một chiều chúng ta đã có những giải thuật chuẩn và những hàm chuẩn mà giáo trình hay ngôn ngữ lập trình cung cấp. Tuy nhiên, khi làm việc với dữ liệu 2 chiều hay 3 chiều, chúng ta ít hay chưa học đc (trong các sách dạy lập trình) hay kg được hỗi trợ các hàm hay các giải thuật này trong ngôn ngữ lập trình (cũng có thể bản thân mình chưa biết). Ví dụ : tìm điểm trong dữ liệu điểm gần điểm đã cho hay đoạn thẳng trong dữ liệu điểm gần điểm đã cho mà mình đã đề cập trên chủ để khác. Nếu chúng ta tự viết những hàm này theo giải thuật tuần tự thì nó sẽ chạy rất lâu. Do đó, để có thể cải thiện tốc độ cần tổ chức dữ liệu và giải thuật sao cho việc sắp xếp tìm kiểm điểm trong không hai hay ba chiều thật nhanh (tất nhiên trong các phần mềm lớn người ta đã làm các vđ này tuy nhiên chưa hẳn là tối ưu), mà vđ này quả kg đơn giản tý nào.
- Các bạn có thể thử viết hàm tìm kiếm điểm trong dữ liệu điểm gần điểm cung cấp theo giải thuật tuần tự sẽ thấy. Khi dữ liệu tăng lên hàng trăm ngàn điềm nó sẽ chạy rất lâu
Nếu các bạn yêu thích hay có tâm huyết về các giải thuật trong kg gian 2 hay 3 chiều chúng ta có thể tìm hiểu trao đổi thêm

Đúng như bác TrungNgaMy nói, vấn đề tìm kiếm khi số lượng điểm càng tăng thì tốc độ càng chậm, vấn đề này mình phải tự lập hàm vì ngôn ngữ có lẽ không trang bị cho mình. cái này phải tận dụng hoàn toàn những kiến thức hình học để tìm kiếm. Nếu bác Trung đã và đang nghiên cứu vấn đề này thì cùng nhau trao đổi thêm nhé!
  • 0

#23 reality

reality

    biết pan

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

Đã gửi 10 February 2012 - 04:55 PM

Theo mình nghĩ là không có thuật toán song song gì đâu . Nhanh hay chậm có thể là do ngôn ngữ viết chương trình. Bạn xem thử clip này xem sao. Thuật toán như các bạn hướng dẫn, nhưng viết bằng C, dùng con trỏ.

link download chương trình: http://www.mediafire...96/ctSanLap.rar


  • 0

#24 kegiaumat

kegiaumat

    biết vẽ circle

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

Đã gửi 12 February 2012 - 02:07 AM

hay quá bác ơi có lẽ em phải bái bác làm sư phụ mới được. Bác có tài liệu nào về C để làm cái như trên sharing cho em với ( Tridungtecco2@gmail.com) cảm ơn bác nhìu. Em chưa có một khái niệm ji về C cả nếu bác cho em tài liệu thì kiếm cái nào nó dễ dễ em tiếp thu ngu lắm :D
  • 0

#25 lethaonguyen

lethaonguyen

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 15 March 2012 - 10:21 AM

- Đúng là dùng C nhanh hơn LISP nhiều, tuy nhiên trong trường hợp không nhằm mục đích thương mại mà chỉ viết cho riêng mình dùng thì nên dùng LISP vì nó thích hợp với mọi phiên bản CAD, trong khi dùng C thì phải có song hành phiên bản của C và ObjectARX tương ứng với phiên bản của CAD và phải sửa lại chương trình rất mệt.
- LSP tuy chậm hơn C nhưng nếu biết vận dung thuật toán làm tối ưu hóa tốc độ thì cũng khá nhanh, Lisp của tôi viết xây dựng lưới tam giác cho khoảng hơn 10.000 điểm chỉ mất 30-40 giây. Tôi có một số ý đóng góp để đẩy nhanh tốc độ như sau :
+ Trong các thuật toán lặp nên sử dung hàm (Foreach) thay vì dùng (While)
+ Để tạo danh sách điểm nên dùng (Setq Lst (Cons Pnt Lst)) thay vi dùng (Setq Lst (Append Lst (List Pnt))) sau đó Reverse lại.
+ Khi xử lý các phần tử của danh sách nên tận dụng tối đa thuật toán (Mapcar (Function (Lambda (X, Y...) ()) Lst) thay vì dùng các hàm Foreach , Repeat, While.
+ Nên sử dụng triệt để các hàm của ActiveX như : Vl-xxx, Vlax-xxx để xử lý danh sách vì các hàm này bản chất được xây dựng từ C nằm trong các thư viện *.arx tốc độ xử lý nhanh hơn.


VidepClip : http://www.mediafire...914socqo2ea1tq7
  • 1

#26 lethaonguyen

lethaonguyen

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 15 March 2012 - 10:31 AM

VidepClip : http://www.mediafire...c764fulqe9xle3k
  • 0

#27 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 15 March 2012 - 10:52 AM

VidepClip :

http://www.mediafire...914socqo2ea1tq7

Bạn có thể chia sẻ lisp đó được không? Chí ít thì cũng học được ở lisp này cách làm thế nào để tăng tốc độ. Thanks!
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#28 tah533

tah533

    Chưa sử dụng CAD

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

Đã gửi 12 June 2012 - 11:19 AM

Bạn gởi Lisp xây dựng lưới tam giác đó cho mọi người tham khảo được không? Để tham khảo cách viết của bạn nhé!
Mình có lisp xây dựng lưới tam giác từ tập hợp text cao độ trong acad nhưng chưa chạy nhanh được, mình đang xem lại thuật toán.
Các bạn có thể load về tham khảo nhé!
http://www.cadviet.c...oi_tam_giac.lsp
  • 1

#29 lethaonguyen

lethaonguyen

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 21 July 2012 - 12:46 AM

Gửi bạn để tham khảo , file *.fas và bản vẽ tập hợp khoảng 7000 điểm để thử
Chúc ban vui vẻ


http://www.cadviet.c...0044_luoitg.rar
  • 2

#30 lethaonguyen

lethaonguyen

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 21 July 2012 - 12:49 AM

Xin lỗii : Lệnh là "DH" (giống như lisp của bạn), chúc vui vẻ
  • 0

#31 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 24 July 2012 - 11:24 PM

http://www.cadviet.c...3/19194_cad.dwg
Sao file này mình chạy lại vẽ lưới tam giác không có được cao độ Z bạn lethao nguyen ah.Bạn text giùm mình nhé
  • 0

#32 lethaonguyen

lethaonguyen

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 25 July 2012 - 01:30 AM

Vì các Text cao độ của bạn chỉ có giá trị cao độ nhưng thực tế cao độ trong bản vẽ của các text này bằng 0, chương trình vẽ lưới lấy giá trị cao độ các text từ mã DXF là 10 chứ không phải mã 1 nên bạn phải dùng lisp sau để số hóa cho các text của bạn trước khi dùng :

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun Sohoatext ( / picset Idx Entt PLis)
(If (Setq picset (Ssget (List (Cons 0 "*TEXT"))))
(Progn
(Setq Idx 0)
(Repeat (SSlength picset)
(Setq Entt (Entget (SSname picset Idx)))
(If (And (Or (Equal (Cdr (Assoc 0 Entt)) "TEXT") ;;Doi tuong la TEXT
(Equal (Cdr (Assoc 0 Entt)) "MTEXT") ;;Hoac doi tuong la MTEXT
)
(Numberp (Read (Cdr (Assoc 1 Entt)))) ;;La TEXT dang chu so
)
(Progn
(Setq Pnt (List (Cadr (Assoc 10 Entt)) (Caddr (Assoc 10 Entt)) (AtoF (Cdr (Assoc 1 Entt)))))
(Setq Entt (Subst (Cons 10 Pnt) (Assoc 10 Entt) Entt))
(Entmod Entt)
)
)
(Setq Idx (+ Idx 1))
)
)
)
(Princ)
)
  • 0

#33 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 25 July 2012 - 02:02 AM

Bạn gởi Lisp xây dựng lưới tam giác đó cho mọi người tham khảo được không? Để tham khảo cách viết của bạn nhé! Mình có lisp xây dựng lưới tam giác từ tập hợp text cao độ trong acad nhưng chưa chạy nhanh được, mình đang xem lại thuật toán. Các bạn có thể load về tham khảo nhé! http://www.cadviet.c...oi_tam_giac.lsp

Đúng là lisp chạy lâu thật.
Mình thấy bạn nên thay đoạn
(setq vertexlist (reverse (append (reverse vertexlist) (list P))))
thành
(setq vertexlist (cons p vertexlist))
sẽ giúp việc tạo danh sách đc nhanh hơn chút ít.
Tuy nhiên, để cải tiến bạn cần xem lại code của mình như bạn lethaonguyen đã góp ý.
Bạn cũng có thể nói rõ hơn vị trí mà code ở đó theo bạn là chạy chậm để mọi người có thể giúp bạn.
Để rút ngắn thời gian thì có nhiều cách (phần cứng, phần mềm và giải thuật), trong đó giải thuật là rất quan trọng, (như bạn lethaonguyen đã làm đc, rất hay). Nếu bạn có thể kết hợp với ý tưởng của PP chia ô (như mình đã nêu trong một chủ đề) thì bạn sẽ giảm tốc độ đáng kể.
  • 0

#34 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 25 July 2012 - 08:27 AM

Các bác thử nghiên cứu lisp tạo tam giác này xem rồi chế nó thành của mình.
Đây là thuật toán tạo tam giác của người Nga

(defun c:taotamgiac (/ I L S)
(princ (strcat "\n select points"))
(if (setq i 0
s (ssget '((0 . "POINT")))
) ;_ setq
(progn (repeat (sslength s)
(setq l (cons (cdr (assoc 10 (entget (ssname s i)))) l)
i (1+ i)
) ;_ setq
) ;_ repeat
(eea-delone-triangulate i l)
) ;_ progn
) ;_ if
) ;_ defun
(defun eea-delone-triangulate
(i1 L / A A1 A2 A3 I I2 L1 L2 L3 LP MA MI P S TI TR X1 X2 Y1 Y2)
;;*********************************************************
;;
;; Written by ElpanovEvgeniy
;; 17.10.2008
;; edit 20.05.2011
;; Program triangulate an irregular set of 3d points.
;;
;;*********************************************************
(if l
(progn
(setq ti (car (_VL-TIMES))
i 1
i1 (/ i1 100.)
i2 0
l (vl-sort (mapcar (function (lambda (p)
(list (/ (fix (* (car p) 1000)) 1000.)
(/ (fix (* (cadr p) 1000)) 1000.)
(caddr p)
) ;_ list
) ;_ lambda
) ;_ function
l
) ;_ mapcar
(function (lambda (a B) (>= (car a) (car B))))
) ;_ vl-sort
x2 (caar l)
y1 (cadar l)
y2 y1
) ;_ setq
(while l
(setq a2 (car l))
(if (<= (cadr a2) y1)
(setq y1 (cadr a2))
(if (> (cadr a2) y2)
(setq y2 (cadr a2))
)
)
(setq a (fix (caar l))
a1 (list (car l))
l (cdr l)
) ;_ setq
(while (and l (= (fix (caar l)) a))
(setq a2 (car l))
(if (<= (cadr a2) y1)
(setq y1 (cadr a2))
(if (> (cadr a2) y2)
(setq y2 (cadr a2))
) ;_ if
) ;_ if
(setq a1 (cons (car l) (vl-remove a2 a1))
l (cdr l)
) ;_ setq
) ;_ while
(foreach a a1 (setq lp (cons a lp)))
) ;_ while
(setq x1 (caar lp)
a (list (/ (+ x1 x2) 2) (/ (+ y1 y2) 2))
a1 (distance a (list x1 y1))
ma (+ (car a) a1 a1)
mi (- (car a) a1)
s (list (list ma (cadr a) 0)
(list mi (+ (cadr a) a1 a1) 0)
(list (- (car a) a1) (- (cadr a) a1 a1) 0)
) ;_ list
l (list (cons x2 (cons a (cons (+ a1 a1) s))))
ma (1- ma)
mi (1+ mi)
) ;_ setq
(while lp
(setq p (car lp)
lp (cdr lp)
l1 nil
) ;_ setq
(while l
(setq tr (car l)
l (cdr l)
) ;_ setq
(cond ((< (car tr) (car p)) (setq l2 (cons (cdddr tr) l2)))
((< (distance p (cadr tr)) (caddr tr))
(setq tr (cdddr tr)
a1 (car tr)
a2 (cadr tr)
a3 (caddr tr)
l1 (cons (list (+ (car a1) (car a2)) (+ (cadr a1) (cadr a2)) a1 a2)
(cons (list (+ (car a2) (car a3)) (+ (cadr a2) (cadr a3)) a2 a3)
(cons (list (+ (car a3) (car a1)) (+ (cadr a3) (cadr a1)) a3 a1) l1)
) ;_ cons
) ;_ cons
) ;_ setq
)
(t (setq l3 (cons tr l3)))
) ;_ cond
) ;_ while
(setq l l3
l3 nil
l1 (vl-sort l1
(function (lambda (a B)
(if (= (car a) (car B))
(<= (cadr a) (cadr B))
(< (car a) (car B))
) ;_ if
) ;_ lambda
) ;_ function
) ;_ vl-sort
) ;_ setq
(while l1
(if (and (= (caar l1) (caadr l1)) (= (cadar l1) (cadadr l1)))
(setq l1 (cddr l1))
(setq l (cons (eea-data-triangle p (cddar l1)) l)
l1 (cdr l1)
) ;_ setq
) ;_ if
) ;_ while
(if (and (< (setq i (1- i)) 1) (< i2 100))
(progn
(setvar
"MODEMACRO"
(strcat
" "
(itoa (setq i2 (1+ i2)))
" % "
(substr
"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"
1
i2
) ;_ substr
(substr "..." 1 (- 100 i2))
) ;_ strcat
) ;_ setvar
(setq i i1)
) ;_ progn
) ;_ if
) ;_ while
(foreach a l (setq l2 (cons (cdddr a) l2)))
(setq l2 (vl-remove-if-not
(function (lambda (a) (and (< mi (caadr a) ma) (< mi (caaddr a) ma))))
l2
) ;_ vl-remove-if
) ;_ setq
(foreach a l2
(entmake (list (cons 0 "3DFACE")
(cons 10 (car a))
(cons 11 (car a))
(cons 12 (cadr a))
(cons 13 (caddr a))
) ;_ list
) ;_ entmake
) ;_ foreach
) ;_ progn
) ;_ if
(setvar "MODEMACRO" "")
(princ (strcat "\n " (rtos (/ (- (car (_VL-TIMES)) ti) 1000.) 2 4) " secs."))
(princ)
) ;_ defun
(defun eea-data-triangle (P1 l / A A1 P2 P3 P4 S)
;;*********************************************************
;;
;; Written by ElpanovEvgeniy
;; 17.10.2008
;; Calculation of the centre of a circle and circle radius
;; for program triangulate
;;
;; (eea-data-triangle (getpoint)(list(getpoint)(getpoint)))
;;*********************************************************
(setq p2 (car l)
p3 (cadr l)
p4 (list (car p3) (cadr p3))
) ;_ setq
(if (not (zerop (setq s (sin (setq a (- (angle p2 p4) (angle p2 p1)))))))
(progn (setq a (polar p4
(+ -1.570796326794896 (angle p4 p1) a)
(setq a1 (/ (distance p1 p4) s 2.))
) ;_ polar
a1 (abs a1)
) ;_ setq
(list (+ (car a) a1) a a1 p1 p2 p3)
) ;_ progn
) ;_ if
) ;_ defun

  • 3



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#35 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 25 July 2012 - 10:29 AM

Vì các Text cao độ của bạn chỉ có giá trị cao độ nhưng thực tế cao độ trong bản vẽ của các text này bằng 0, chương trình vẽ lưới lấy giá trị cao độ các text từ mã DXF là 10 chứ không phải mã 1 nên bạn phải dùng lisp sau để số hóa cho các text của bạn trước khi dùng :

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun Sohoatext ( / picset Idx Entt PLis)
(If (Setq picset (Ssget (List (Cons 0 "*TEXT"))))
(Progn
(Setq Idx 0)
(Repeat (SSlength picset)
(Setq Entt (Entget (SSname picset Idx)))
(If (And (Or (Equal (Cdr (Assoc 0 Entt)) "TEXT") ;;Doi tuong la TEXT
(Equal (Cdr (Assoc 0 Entt)) "MTEXT") ;;Hoac doi tuong la MTEXT
)
(Numberp (Read (Cdr (Assoc 1 Entt)))) ;;La TEXT dang chu so
)
(Progn
(Setq Pnt (List (Cadr (Assoc 10 Entt)) (Caddr (Assoc 10 Entt)) (AtoF (Cdr (Assoc 1 Entt)))))
(Setq Entt (Subst (Cons 10 Pnt) (Assoc 10 Entt) Entt))
(Entmod Entt)
)
)
(Setq Idx (+ Idx 1))
)
)
)
(Princ)
)

Rất cảm ơn bạn.Mình đã làm được.Bạn có thể bổ sung them tính năng như sau trong lisp vẽ lưới tam giác cho mình được không:
1. Chọn text mẫu và quét, lisp sẽ lọc các đối tượng như text mẫu để vẽ lưới tam giác
2. Bổ sung tính năng đặt tên cho layer lưới tam giác khi tạo ra để quản lý ( ở đây bạn mặc định sẵn, mình có khi tạo 2 lưới tam giác trong cùng 1 bản vẽ nên càn tính năng này)
  • 0

#36 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 26 July 2012 - 01:46 AM

Rất cảm ơn bạn.Mình đã làm được.Bạn có thể bổ sung them tính năng như sau trong lisp vẽ lưới tam giác cho mình được không:
1. Chọn text mẫu và quét, lisp sẽ lọc các đối tượng như text mẫu để vẽ lưới tam giác
2. Bổ sung tính năng đặt tên cho layer lưới tam giác khi tạo ra để quản lý ( ở đây bạn mặc định sẵn, mình có khi tạo 2 lưới tam giác trong cùng 1 bản vẽ nên càn tính năng này)

Hai vđ này bạn tự làm cũng đc.
1-Đầu tiên bạn chọn các đt mình muốn bằng cách nào đó. Sau đó gọi lệnh DH, khi đc hỏi select objects: hảy chọn "p" là đc
2- Sau khi layer đc tạo bạn hãy đổi tên nó thành tên bạn muốn
Bạn cũng có thể sd cái lisp của người Nga do bạn thanhduan2407 đưa lên, mình thấy nó chạy cũng tương tự nhau, kể cả thời gian
  • 0

#37 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 26 July 2012 - 08:34 AM

Hai vđ này bạn tự làm cũng đc.
1-Đầu tiên bạn chọn các đt mình muốn bằng cách nào đó. Sau đó gọi lệnh DH, khi đc hỏi select objects: hảy chọn "p" là đc
2- Sau khi layer đc tạo bạn hãy đổi tên nó thành tên bạn muốn
Bạn cũng có thể sd cái lisp của người Nga do bạn thanhduan2407 đưa lên, mình thấy nó chạy cũng tương tự nhau, kể cả thời gian

Tks bác, em sẽ chế lại lisp của bạn thanhduan theo hướng trên.Lúc trước em không đọc kỹ bài của bạn thanhduan nen không nghĩ là chế lại được.
  • 0

#38 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 26 July 2012 - 08:53 AM

Chế là 1 kiểu nhưng bạn đọc phải hiểu thuật toán của nó. Các tạo đường đồng mức chắc bạn cũng biết thuật toán chứ? Chỉ là Line nối 2 điểm có cùng độ cao trong tam giác thôi. Xác định điểm có độ cao cho trước trên 1 đoạn thẳng thì đơn giản rồi. Mình bận ko có thời gian nên ko chế nó thành của mình, với lại mình cũng ko làm kỹ thuật nên rảnh lúc nào thấy thích thì nghịch ngợm thôi. Chờ kết quả của các bác. Khi nào mà:
- Phun điểm (point, text,...) lên bản vẽ
- Lập mạng lưới tam giác Delaunay (Mô hình TIN)
- Vẽ đường đồng mức với các thông số trong bảng (bước nhảy độ cao, layer, màu sắc các đường đồng mức....)
- Vẽ mặt cắt, tính toán khối lượng đào đắp (lưới ô vuông, lưới tam giác....)

P/s: Nếu phum điểm vào bản vẽ (dạng text chẳng hạn), các bác nghĩ thêm cách là với độ cao bao nhiêu đến bao nhiêu (chẵn) thì cho nó vào 1 màu, sau này tạo đường đồng mức nhìn cũng dễ nhận biết. Hiiii. Tuy nhiên em thấy có rất nhiều phần mềm làm việc đó rồi. Em nghĩ đây chỉ là bài toán để cho sinh viên nghiên cứu và làm đề tài khoa học hay tốt nghiệp thôi. Làm lại cái đã có thì tốn thời gian lắm. Cuộc đời có mấy tí. :D
Chúc các bác sức khoẻ
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#39 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 26 July 2012 - 09:07 AM

Chém ké tí : Lisp tạo lưới tam giác của bác EEA quá nổi tiếng ^^ Theo e được biết thì LeeMac vẫn thua Elpanov vài bậc ^^. Bác nào rảnh rỗi vào đọc các lession hướng dẫn của Elpanove về đệ quy, khá chi tiết và hay, có khi lại áp dụng được trong các trường hợp của mình
  • 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


#40 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 26 July 2012 - 09:23 AM

Sao Ketxu ko đưa đường link nói về lession hướng dẫn của Elpanove về đệ quy. Hiii. Code đơn giản nhưng thuật toán thì quá hay. Mình biết có 4 cách tạo lưới tam giác nhưng phương pháp Plane-sweep là nhanh nhất. Phương pháp quét mặt phẳng. Tưởng tượng có 1 đường thẳng quét từ trên xuống dưới, nó di chuyển đến đến đâu thì tạo được tam giác Delaunay đến đó. Thuật toán rất hay và đã được bạn mình viết trên VB. Còn khủng hơn nữa là các thầy giáo trường Mỏ Địa Chất nhảy vào làm khiến tốc độ nó khủng khiếp luôn. Nhưng mình ko có code của các thầy.
Nhưng lisp của Elpanove mình cũng thấy tuyệt vời rồi. Hiii
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn