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

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

Các bài được khuyến nghị

Bác nào có thuật toán tạo đường đồng mức từ tập hợp các cao độ text ko.

Em muốn tham khảo để viết lại băng lisp ấy mà.

Em gửi các bác 1 chương trình vẽ đường đồng mức nguồn từ diển đàn ketcau.com mà em sưu tầm được (tất nhiên là có bẻ khóa rồi và mã nguồn đóng), các bác tham khảo nhé.

Mong mọi người góp ý.

**********************************

http://www.cadviet.com/upfiles/cadlisp.rar

Tuy nhiên chương trình này còn 1 số lỗi

**********************************

:)

  • Vote tăng 1
  • Vote giảm 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
Sao không có bác nào có ý kiến ý cò nào hết vậy nhỉ

:)

Đơn giản là ngại.

 

Ví dụ trường hợp ngại của tôi:

Trong bộ cài có phần dành cho cad2002, cad2004, CAD của tôi là 2007. Cài xong chưa biết chạy có đúng không, nhưng chắc chắn là mình không cần dùng đến cho công việc. Phần các mềm có đặc điểm là dễ cài khó gỡ, ít ai muốn thử.

 

Vấn đề từ các điểm 3D nội suy ra mặt mesh để có được đường đồng mức, trên diễn đàn cũng đã bàn nhiều. Chủ yếu là sử dụng các phần mềm có sẵn làm cho nhanh và chính xác.

 

Để tạo một chương trình lisp làm việc này hơi bị cồng kềnh. Người viết phải là người am tường về lisp, về cấu trúc dữ liệu, về thuật toán hình học. Câu hỏi của bạn khó có một câu giải đáp là vì thế.

 

Nếu bạn am tường về lập trình và thuật toán hình học, tôi có một thuật giải như sau (tôi đã làm nghiên cứu khoa học về vấn đề này hồi còn là sinh viên):

1. Xây dựng mạng tam gác Delaunay với các đỉnh là các điểm đã cho. Mạng tam giác Delaunay với tính chất của nó (ngược với biểu đồ Voronoi) sẽ đảm bảo sai số ít nhất cho mặt mesh nội suy sau này. Vì nó thỏa mãn một điều kiện quan trọng: một điểm bất kỳ nằm trong 1 tam giác Delaunay, thì khoảng cách min từ nó tới các điểm đã cho luôn là (1 trong 3) đỉnh của tam giác chứa nó.

 

Để xây dựng mạng tam giác Delaunay có nhiều thuật, thuật toán tôi sử dụng đơn giản như sau:

- Tìm bao lồi của tập đỉnh trên. Và xem nó như một đa giác.

- Từ 2 đỉnh kề nhau bất kỳ của đa giác, tìm thêm một đỉnh nằm trong đa giác để tạo thành 1 tam giác thỏa mãn: có bán kính đường tròn ngoại tiếp lớn nhất nhưng không chứa bất cứ một đỉnh nào chưa xét. Thêm đỉnh mới này vào đa giác, sẽ tạo thành một đường bao mới (không lồi nữa).

- lặp đi lặp lại cho đến khi hết đỉnh.

- Các tam giác được tìm chính là mạng tam giác Delaunay.

 

2. Từ mạng tam giác Delaunay, dễ dàng có được mặt mesh nội suy phủ qua n điểm đã cho trong không gian.

3. Từ mặt mesh này, dễ dàng có được đường đồng mức bằng các phép giao mặt phẳng.

 

Chân lý thì đơn giản vậy, nhưng tổ chức để viết code thì nhì nhằng. Nghĩ lại thấy mệt.

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
Sao không có bác nào có ý kiến ý cò nào hết vậy nhỉ

:)

Mình cũng ngại như anh Hoành:

- Đã từng "ngâm cứu" cái này rồi. Kết quả: kiếm phần mềm nào có sẵn mà dùng! Thật ra mình chẳng bao giờ dùng vì không phải chuyên ngành, chỉ là thử tìm hiểu theo yêu cầu của một số bạn thôi.

- Các phần mềm vô danh, đúng là dễ cài khó gỡ (chưa chắc đã hay ho gì mà cứ làm ra vẻ). Nếu là mã nguồn mở hoặc "click and play" thì mình có thể xem và tham khảo chút ít, còn nếu phải setup thì mời vào Recycle Bin!

"Ý kiến ý cò" chân tình: hãy quên cái này đi, để thời gian nghiên cứu cái khác hiệu quả hơn!

  • Like 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
Đơn giản là ngại.

 

Ví dụ trường hợp ngại của tôi:

Trong bộ cài có phần dành cho cad2002, cad2004, CAD của tôi là 2007. Cài xong chưa biết chạy có đúng không, nhưng chắc chắn là mình không cần dùng đến cho công việc. Phần các mềm có đặc điểm là dễ cài khó gỡ, ít ai muốn thử.

 

Vấn đề từ các điểm 3D nội suy ra mặt mesh để có được đường đồng mức, trên diễn đàn cũng đã bàn nhiều. Chủ yếu là sử dụng các phần mềm có sẵn làm cho nhanh và chính xác.

 

Để tạo một chương trình lisp làm việc này hơi bị cồng kềnh. Người viết phải là người am tường về lisp, về cấu trúc dữ liệu, về thuật toán hình học. Câu hỏi của bạn khó có một câu giải đáp là vì thế.

 

Nếu bạn am tường về lập trình và thuật toán hình học, tôi có một thuật giải như sau (tôi đã làm nghiên cứu khoa học về vấn đề này hồi còn là sinh viên):

1. Xây dựng mạng tam gác Delaunay với các đỉnh là các điểm đã cho. Mạng tam giác Delaunay với tính chất của nó (ngược với biểu đồ Voronoi) sẽ đảm bảo sai số ít nhất cho mặt mesh nội suy sau này. Vì nó thỏa mãn một điều kiện quan trọng: một điểm bất kỳ nằm trong 1 tam giác Delaunay, thì khoảng cách min từ nó tới các điểm đã cho luôn là (1 trong 3) đỉnh của tam giác chứa nó.

 

Để xây dựng mạng tam giác Delaunay có nhiều thuật, thuật toán tôi sử dụng đơn giản như sau:

- Tìm bao lồi của tập đỉnh trên. Và xem nó như một đa giác.

- Từ 2 đỉnh kề nhau bất kỳ của đa giác, tìm thêm một đỉnh nằm trong đa giác để tạo thành 1 tam giác thỏa mãn: có bán kính đường tròn ngoại tiếp lớn nhất nhưng không chứa bất cứ một đỉnh nào chưa xét. Thêm đỉnh mới này vào đa giác, sẽ tạo thành một đường bao mới (không lồi nữa).

- lặp đi lặp lại cho đến khi hết đỉnh.

- Các tam giác được tìm chính là mạng tam giác Delaunay.

 

2. Từ mạng tam giác Delaunay, dễ dàng có được mặt mesh nội suy phủ qua n điểm đã cho trong không gian.

3. Từ mặt mesh này, dễ dàng có được đường đồng mức bằng các phép giao mặt phẳng.

 

Chân lý thì đơn giản vậy, nhưng tổ chức để viết code thì nhì nhằng. Nghĩ lại thấy mệt.

Cai tam giác Delaunay thi em lam duoc roi, de thu tiep nghien cuu ve phép giao mặt phẳng xem sao

thank bac Hoanh nhe

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
Cai tam giác Delaunay thi em lam duoc roi, de thu tiep nghien cuu ve phép giao mặt phẳng xem sao

thank bac Hoanh nhe

Thế thì bạn đã làm được 98% khối lượng công việc.

 

Phép giao mặt phẳng trong trường hợp này rất đơn giản. Bởi các mặt phẳng cắt mặt mesh trong san nền thường là mặt phẳng đặc biệt. VD: Các đường đồng mức là giao tuyến của mặt mesh với mặt phẳng nằm ngang, các trắc dọc là giao tuyến của mặt mesh với mặt phẳng thẳng đứng. Khi tìm giao điểm các mặt phẳng này, không cần giải bài toán không gian mà chỉ cần giải bài toán phẳng. Tức là tìm giao một tam giác (ô lưới delaunay) trên mặt bằng hoặc mặt đứng với một đường thẳng (là hình chiếu của mặt phẳng cắt). Khi đã tìm được đoạn thẳng giao điểm thì chiếu ngược trở lại sẽ có kết quả chính xác. Tập hợp các đoạn giao tuyến của mặt phẳng với lưới delaunay sẽ tạo nên giao tuyến mặt mesh với mặt phẳ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
Thế thì bạn đã làm được 98% khối lượng công việc.

 

Phép giao mặt phẳng trong trường hợp này rất đơn giản. Bởi các mặt phẳng cắt mặt mesh trong san nền thường là mặt phẳng đặc biệt. VD: Các đường đồng mức là giao tuyến của mặt mesh với mặt phẳng nằm ngang, các trắc dọc là giao tuyến của mặt mesh với mặt phẳng thẳng đứng. Khi tìm giao điểm các mặt phẳng này, không cần giải bài toán không gian mà chỉ cần giải bài toán phẳng. Tức là tìm giao một tam giác (ô lưới delaunay) trên mặt bằng hoặc mặt đứng với một đường thẳng (là hình chiếu của mặt phẳng cắt). Khi đã tìm được đoạn thẳng giao điểm thì chiếu ngược trở lại sẽ có kết quả chính xác. Tập hợp các đoạn giao tuyến của mặt phẳng với lưới delaunay sẽ tạo nên giao tuyến mặt mesh với mặt phẳng đó.

Ô hô để em thử cái.

Chúc bác 1 ngày vui vẻ

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

Nói giao mặt phẳng là nói to tát vậy thôi.

Chứ thật ra chỉ cần:

Quét qua tất cả các tam giác.

Tam giác nào có cao độ cả 3 đỉnh đều lớn hơn hoặc nhỏ hơn cao độ dường đồng mức thì bỏ qua.

Chỉ xét các tam giác vừa có đỉnh thấp vừa có đỉnh cao.

Sau đó chỉ cần nội suy 2 điểm có cao độ bằng cao độ đường đồng mức nằm trên 2 trong 3 cạnh của tam giác là đc.

Tiếp nối 2 điểm này lại.

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

Bác muốn có chương trình vẽ đường đồng mức thì sang trường XD, 3 đợt tốt nghiệp ra trường của ngành Tin học xây dựng đường đều có làm đề tài này, hiện nay mình không có đề tài này nhưng mà khi nào lấy được sẽ post lên cho bạ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
Bác nào có thuật toán tạo đường đồng mức từ tập hợp các cao độ text ko.

Em muốn tham khảo để viết lại băng lisp ấy mà.

Em gửi các bác 1 chương trình vẽ đường đồng mức nguồn từ diển đàn ketcau.com mà em sưu tầm được (tất nhiên là có bẻ khóa rồi và mã nguồn đóng), các bác tham khảo nhé.

Mong mọi người góp ý.

**********************************

<a href="http://www.cadviet.com/upfiles/cadlisp.rar" target="_blank"><a href="http://www.cadviet.com/upfiles/cadlisp.rar" target="_blank">http://www.cadviet.com/upfiles/cadlisp.rar</a></a>

Tuy nhiên chương trình này còn 1 số lỗi

**********************************

:leluoi:

Bạn là dân trắc địa, và có biết về lisp? Mình thì không rành về lisp. Có một lisp rất "đồ sộ" liên quan về tạo lưới tam giác bề mặt và vẽ đường đồng mức (mình nghĩ vậy vì nó có tên là Contour.lsp và nội dung lisp có liên quan surface và contour ). Bạn, hoặc anh em trên diễn đàn biết cách sử dụng thì chỉ cho anh em xài với.

Đây là địa chỉ của nó

http://www.koders.com/lisp/fidAAC8FBE7FE5A...A231E0C476.aspx

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

các bác ơi em tạo được cái thằng tạo lưới tam giác rùi nhưng mà tốc độ chạy chậm lắm. em nghiên cứu trên mạng nó bảo có thuật toán song song để cải thiện tốc độ (nó chỉ bảo qua qua chứ ko nêu thuật toán) bác nào bít món này chỉ bảo em cái

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

các bác ơi em tạo được cái thằng tạo lưới tam giác rùi nhưng mà tốc độ chạy chậm lắm. em nghiên cứu trên mạng nó bảo có thuật toán song song để cải thiện tốc độ (nó chỉ bảo qua qua chứ ko nêu thuật toán) bác nào bít món này chỉ bảo em cái

Mình đã đọc tài liệu nói như bạn, nó tách tập điểm ra làm 2, xử lý với từng tập rồi nối 2 tập với nhau, còn cách cụ thể thế nào thì nó không nêu. Nó hơi giống ông Ferma, "tôi đã giải được bài toán này, nhưng trong khuôn khổ tờ giấy này không thể hiện hết được".

 

Lý thuyết là vậy, nhưng để biến lý thuyết này thành thực tế thì thà ngồi chờ chương trình lâu một chút còn hơ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

hehe không bít bọn nova với bọn road plan nó dùng giải thuật thế nào nhỉ. em đau đầu món này lâu lắm rùi mà chưa giải quyết được.cảm ơn bác đã trả lời nhé. nếu có tài liệu ji món này sharing cho cho em xin với. À lúc nào bác hoành rỗi bác sang công ty chơi (em làm cùng bác lâm) để em được diện kiến bác hôm, nghe danh bác đã lâu nhưng chưa được gặp mặt bác :mellow:

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

Trong tam giác mình dùng id cho các đỉnh chứ không bê nguyên bộ point vào đỉnh đó nên tốc độ có thể nói cải thiện được khoảng 1000 lần nhưng vẫn thua xa thuật toán song song, thuật toán này khó quá nên mình không tìm hiểu về nó vì thấy đợi lâu một chút cũng được như mấy bác ở trên nói. máy mình dell cor2 2.13 chạy lưới khoảng 1000 điểm mất 10s(vậy là cũng tạm ổ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

ừ thuật toán của mình là tìm một tam giác bao các point sau đó tìm một điểm thuộc tam giác đó, điểm đó chia tam giác to thành 3 hoặc 4 tam giác rồi từ 3 ,4 tam giác đó chia thành các tam giác nhỏ khác. thuật toán này chạy khoảng dưới 1500 điểm cũng tạm ổn nhưng mà nếu dùng cho khoảng 2000 điểm trở lên thì nó treo máy (hoặc chờ rất lâu). Không bít mấy cái phần mềm thương mại của VN có dùng giải thuật song song không bít. các bác đó có tự viết hay kiếm nguồn từ đâu nhỉ.Nếu tạo được lưới tam giác mà dưới 1000 điểm thì cũng chán nhẩy chả giải quyết được ji 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

Mình vừa chạy 1756 điểm mất 1phut+7giay bạn ah, Mình viết bằng vb nên quản lý có lẽ tốt hơn lisp và đỡ "vật vã" hơn lisp. cái này mình tự nghiên cứu và tự viết.

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

mình cũng bít một ít vb những mà mình thấy trong cad cái vb nó không được dễ giải lắm (tùy thuộc vào từng đời cad và cái thằng cad 2011, 2012 thì phải cài thêm autocad vbaenabler vào nữa) nên mình chọn lisp làm ngôn ngữ của cad còn vba thì dùng cho excel. à mình thấy người ta nói VBA nó chạy nhanh hơn lisp nhưng mình có thấy thế đâu, tốc độ nó cũng gần như nhau có chăng thì chỉ chậm hơn 1 vài giây. Cái thằng lưới tam giác này mình cũng tự mày mò thuật toán trên mạng rùi tự viết đó

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

Nếu bạn dùng vba thì mới phải cài thêm còn nếu bạn dùng vb thì không phải cài thêm vba cho các đời cad>2010. nói chung vb là ngôn ngữ hướng đối tượng nên tốc độ nhanh hay chậm còn tùy vào người viết. Nói chung người ngoại đạo mà viết được phần tạo lưới tam giác đủ dùng là tốt rồi. ngày trước mình dùng lisp nhưng thấy nó không tiện lắm vì phần tạo giao diện và hướng đối tượng rất khó(hoặc có cái không thể làm được) nên mình chuyển qua visual basic6.0. Mình dùng vb+vba viết được phần mềm san nền Mainv1.38, dùng vb viết thoát nước dọc TNDV1.2 và hiện tại đang phát triển phần thiết kế nút giao cũng bằng vb. Nói chung nếu không có tg và trí lực để ngâm cứu món arx thì nên dùng vb sẽ mạnh hơn(mình nghĩ như thế)

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

à 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)

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

ừ thuật toán của mình là tìm một tam giác bao các point sau đó tìm một điểm thuộc tam giác đó, điểm đó chia tam giác to thành 3 hoặc 4 tam giác rồi từ 3 ,4 tam giác đó chia thành các tam giác nhỏ khác. thuật toán này chạy khoảng dưới 1500 điểm cũng tạm ổn nhưng mà nếu dùng cho khoảng 2000 điểm trở lên thì nó treo máy (hoặc chờ rất lâu). Không bít mấy cái phần mềm thương mại của VN có dùng giải thuật song song không bít. các bác đó có tự viết hay kiếm nguồn từ đâu nhỉ.Nếu tạo được lưới tam giác mà dưới 1000 điểm thì cũng chán nhẩy chả giải quyết được ji cả

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

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

à 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!

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

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é!

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

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.com/download/f088xuttr776w96/ctSanLap.rar

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

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

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

- Đú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

  • Vote tăng 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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×