2010-05-11 45 views
6

Tôi có một tập hợp các điểm dữ liệu mà mỗi nhóm thuộc về một nhóm (nhóm) nhất định. Tôi cần vẽ một đa giác xung quanh mỗi cụm này. Có ai biết làm thế nào để làm điều đó?Vẽ một đa giác xung quanh các nhóm dữ liệu trong MATLAB

Không quan trọng nếu tôi sử dụng hoặc không sử dụng các điểm dữ liệu thực tế để vẽ đa giác. Tôi chỉ cần chúng được bọc trong một đa giác.

Trả lời

7

Thử chức năng convhull. Nó trả về các chỉ số từ các điểm trong tập dữ liệu của bạn để xác định vỏ lồi. Bạn sẽ phải làm điều này cho mỗi cụm mà bạn vẽ.

Ví dụ:

x=rand(1,100); %#generate x and y data for your clusters 
y=rand(1,100); 
k=convhull(x,y); %#generate indices marking the outermost points 

hold on 
plot(x,y,'b.') %# plot your cluster points 
plot(x(k),y(k),'r-') %# plots only k indices, giving the convex hull 

này sẽ cung cấp cho bạn một đa giác có chỉ số trùng với giá trị ngoại biên của các cụm của bạn.

1

Tôi không chắc chắn nếu có một giải pháp được thực hiện cho điều này vì tôi không quá quen thuộc với MATLAB, tuy nhiên điều này nghe có vẻ như bạn cần một giải pháp thân lồi.

Hy vọng điều này giúp bạn đi đúng hướng.

1

convhull chỉ hoạt động nếu bạn có hình dạng lồi (giống như hình elipsoid). Nếu phân phối dữ liệu của bạn có các đường cong lõm, chẳng hạn như hình dạng chuối, sau đó convhull sẽ không hoạt động. May mắn thay, MATLAB có một chức năng để xử lý điều này: alphashape

tùy thuộc vào giá trị "alpha", bạn nhận được nhiều hoặc ít khía cạnh trong đa giác kết quả.

một khi bạn có x, y tọa độ của các khía cạnh, bạn có thể vẽ trực tiếp nhưng đa giác sẽ có mặt phẳng, hoặc:

thay vì nội suy, bạn có thể xác định một x, y, lưới z trong đó để xem dữ liệu, và hỏi, là x, y trong hình dạng alpha? Nếu có, cho nó một giá trị z = 1 và nếu không cung cấp cho nó một giá trị z = 0. sau đó chỉ cần đường viền lưới nơi z = 1.

bạn cũng có thể sử dụng impoly để vẽ đa giác bằng tay

hobbysplines trên trao đổi tập tin Matlab cũng cho phép bạn làm mịn các cạnh của một đa giác

Các vấn đề liên quan