Keep elements of an array that only fall within a given closed shape
조회 수: 6 (최근 30일)
이전 댓글 표시
Hello everyone
I have the following two vectors defined in my system:
space_a=linspace(0,168.3934962848858,500); % nm
space_b=linspace(0,250,500); % nm
In addition, I have a 500x500 matrix where each element contains a numerical value. The (1,1) element of this array corresponds to the value at space_a=0 and space_b=0, while the (500,500) element corresponds to the value at space_a=168.3934962848858 and space_b=250. If I plot my data, I have something like this:
My goal is, maintaining the fact that my matrix is a 500x500 array, only to preserve the original numerical value of those array elements that are inside the closed shape drawn on top of the figure through a solid black line. The coordinates of the four vertices of that shape are given by (first column: a-th dimension in nm, second column: b-th dimension in nm):
0*max(space_a) 0.45346624100816*max(space_b)
0.545581275830418*max(space_a) 1*max(space_b)
1*max(space_a) 0.54653375899184*max(space_b)
0.454418724169582*max(space_a) 0*max(space_b)
Any idea on how I can accomplish this while maintaining the fact that it is a 500x500 matrix, with the elements of the matrix outside the closed shape being equal to 0?
댓글 수: 0
채택된 답변
Chunru
2024년 3월 20일
space_a=linspace(0,168.3934962848858,50); % nm
space_b=linspace(0,250,50); % nm
z = peaks(50); % generate some test data
% polyshape
coord = [0*max(space_a) 0.45346624100816*max(space_b)
0.545581275830418*max(space_a) 1*max(space_b)
1*max(space_a) 0.54653375899184*max(space_b)
0.454418724169582*max(space_a) 0*max(space_b)];
pgon = polyshape(coord(:, 1), coord(:, 2));
[xx, yy] = meshgrid(space_a, space_b);
% use inpolygon to find the data
in = inpolygon(xx, yy, coord(:, 1), coord(:, 2));
zin = nan(size(z));
zin(in) = z(in);
imagesc(space_a, space_b, zin);
axis xy
hold on
plot(pgon)
댓글 수: 0
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Graph and Network Algorithms에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!