2012-07-23 14 views
5

Tôi có một âm mưu bề mặt mà tôi đang cố gắng thực hiện. x là một vectơ phần tử 11, y là một vector phần tử 300 và z là ma trận phần tử 300 * 11.Matlab: ô bề mặt không hoạt động

Khi tôi cố gắng vẽ nó như thế này:

surf(x y z) 

cốt truyện Bề mặt không hiển thị. Các trục có nhưng không có cốt truyện bề mặt. blank surface plot

Tuy nhiên, nếu vì một lý do tôi làm một âm mưu bề mặt của một tập hợp con của ma trận như thế này:

surf(x y(1:31) z(1:31,:)) 

Sau đó nó hoạt động và những âm mưu xuất hiện. working surface plot

Ngay sau khi tôi tăng số trong dấu ngoặc vuông thành 32, nó sẽ ngừng hoạt động. Nếu tôi thay đổi phạm vi từ 2:32 thì nó hoạt động, vì vậy không có gì liên quan đến dữ liệu chỉ bằng kích thước của ma trận.

Điều gì đang xảy ra ở đây? Làm thế nào để tôi sửa chữa nó?

P.S Tôi sẽ đính kèm mã nhưng tệp này dài và phức tạp một chút và nhập tệp .txt để tải vào vectơ x và y.

+0

Có văn bản màu đỏ nào trong cửa sổ lệnh khi bạn thử vẽ bằng cách sử dụng lệnh đầu tiên không? – Jonas

+0

Không, không có văn bản màu đỏ ở tất cả – Eddy

+1

có thể bạn có thể thử thay đổi thuộc tính 'Trình kết xuất' của hình ('họa sĩ',' zbuffer', 'OpenGL'): http://www.mathworks.nl/help/techdoc/ ref/figure_props.html – catchmeifyoutry

Trả lời

6

Đôi khi, nó có thể giúp thay đổi trình kết xuất hình của Matlab, về cơ bản là phần phụ trợ thực hiện bản vẽ. Các tùy chọn là painters, zbufferOpenGL.

Vì nó là một tài sản hình, bạn có thể áp dụng nó cho một con số cụ thể, ví dụ:

set(gcf(), 'Renderer', 'painters') 

hoặc cập nhật default figure properties (nếu luôn luôn cần thiết, bạn có thể đặt nó trong user-specific startup.m của bạn):

set(0, 'Renderer', 'painters') 

Tương tự như vậy, để có được trạng thái Renderer hiện nay, sử dụng get thay vì set:

get(gcf(), 'Renderer') 

Trình kết xuất khác nhau có các thuộc tính hiệu suất khác nhau (ví dụ: OpenGL trình kết xuất có thể sử dụng tăng tốc phần cứng, nếu được hỗ trợ), nhưng cũng khác nhau (theo kinh nghiệm của tôi, chụp khung bằng cách sử dụng getframe() hoạt động với một số trình kết xuất khi sử dụng đăng nhập từ xa trên máy tính, nhưng không phải tất cả). Mặc dù tôi không biết lý do chính xác cho vấn đề của bạn nhưng đó có thể là một trong những điều kỳ quặc kỳ lạ này, vì vậy hãy thử thay đổi trình kết xuất đồ họa.

Từ Renderer property documentation:

Rendering phương pháp sử dụng cho màn hình và in ấn. Chọn phương pháp được sử dụng để hiển thị đồ họa MATLAB. Các lựa chọn là:

painters - Phương pháp hiển thị gốc được MATLAB sử dụng nhanh hơn khi hình này chỉ chứa các đối tượng đồ họa đơn giản hoặc nhỏ.

- MATLAB vẽ đối tượng đồ họa nhanh hơn và chính xác hơn vì màu sắc đối tượng trên cơ sở mỗi pixel và MATLAB chỉ hiển thị những pixel hiển thị trong cảnh (do đó loại bỏ lỗi sắp xếp trước). Lưu ý rằng phương pháp này có thể tiêu thụ rất nhiều bộ nhớ hệ thống nếu MATLAB hiển thị một cảnh phức tạp.

OpenGL - OpenGL là trình kết xuất có sẵn trên nhiều hệ thống máy tính. Trình kết xuất này thường nhanh hơn các họa sĩ hoặc zbuffer và trong một số trường hợp, MATLAB có thể truy cập phần cứng đồ họa có sẵn trên một số hệ thống.

1

Xem xét thay đổi về giá trị tối thiểu/tối đa của trục dọc theo bên trái (trục y) và trên cùng (trục z). Tôi nghĩ nó vẫn còn ở đó nhưng nó rất nhỏ.

Hãy thử thiết lập các trục sau đó như thế này: axis([6E-6 8E-6 9.2E14 10E14 0.96 1.06 -1 1])

Lưu ý: E-6 có thể là E-8, tôi có thể không thực sự nói từ hình ảnh ...

này được dựa tắt mã của: axis([xmin xmax ymin ymax zmin zmax cmin cmax])