Repeat coordinates (arranged on the same y and different x) over different values of y

2 次查看(过去 30 天)
Hi! I need to achieve this by knowing the 'green' coordinates ("row_c") and the repeat intervals ("val"):
I tried this way but I can only generate the first (red) line:
load val.mat
load row_c.mat
r_add = {};
for k = 1:width(val)
y_new = row_c(1,2) - val(1,k);
r = height(row_c);
repetition = repmat(y_new,r,1);
r_new = row_c;
r_new(:,2) = repetition;
r_add = [r_add;{r_new}];
end
r_add_mat = cell2mat(r_add);
figure
plot(row_c(:,1),row_c(:,2),'g.','Markersize',15);
hold on
plot(r_new(:,1),r_new(:,2),'r.','Markersize',15);
% plot(r_add_mat(:,1),r_add_mat(:,2),'m.','Markersize',10);
hold off
axis equal
set(gca, 'YDir','reverse')
EDIT: add files

采纳的回答

Voss
Voss 2023-10-28
编辑:Voss 2023-10-28
load row_c
load val
I think this is what you're going for:
r_add = [];
r = height(row_c);
r_new = row_c;
for k = 1:numel(val)
r_new(:,2) = repmat(r_new(1,2)-val(1,k), r, 1);
r_add = [r_add; r_new];
end
figure
plot(row_c(:,1),row_c(:,2),'g.','Markersize',15);
hold on
plot(r_add(:,1),r_add(:,2),'r.','Markersize',15);
hold off
axis equal
set(gca, 'YDir','reverse')
xlim([-90 -85])
ylim([104 108])
An alternative is:
[x,y] = meshgrid(row_c(:,1), row_c(1,2)-[0 cumsum(val)]);
figure
plot(x(1,:),y(1,:),'g.','Markersize',15);
hold on
plot(reshape(x(2:end,:),[],1),reshape(y(2:end,:),[],1),'r.','Markersize',15);
hold off
axis equal
set(gca, 'YDir','reverse')
xlim([-90 -85])
ylim([104 108])

更多回答(1 个)

Matt J
Matt J 2023-10-28
编辑:Matt J 2023-10-28
load row_c ; load val
x=row_c(:,1);
y0=row_c(1,2);
%%% Engine
[X,Y]=ndgrid(x, flip(y0-cumsum(val)));
scatter(X(:),Y(:),'r','filled'); hold on
scatter(X(:,end), Y(:,end),'g','filled'); hold off
set(gca, 'YDir','reverse'); axis padded
  4 个评论

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Spline Postprocessing 的更多信息

产品


版本

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by