我想在右侧翻转一个“弧”。我尝试过旋转,但是它使我的“弧形”面朝下而不是右侧,如下图所示。请查看我使用的code。预先谢谢你。
R = 8; x_c = 5; y_c = 8;
thetas = 0:pi/499:pi;
xs = x_c + R*cos(thetas);
ys = y_c + R*sin(thetas);
% Now add some random noise to make the problem a bit more challenging:
mult = 0.5;
xs = xs+mult*randn(size(xs));
ys = ys+mult*randn(size(ys));
c = linspace(1,50,500);
D = [xs' ys'];
Dx = imrotate(D, 180, 'crop');
Dy=Dx;
Dy = imrotate(Dy, 180, 'crop') ;
subplot(211)
scatter(Dx(:,1), Dx(:,2), 140, c, 'filled', 'LineWidth',1.5)
subplot(212)
scatter(Dy(:,1), Dy(:,2),[],c, 'd','LineWidth',1.5)
答案 0 :(得分:2)
您要反映Dx
的分布。反射的操作意味着将x
设为-x
。
这里Dx
的x轴是Dx(:,1)
,因此首先我们需要编写Dx(:,1) = - Dx(:,1)
。
这样做并作图时,您会看到x轴的值已移为负值。也许这对您的目的就足够了,就是这样。
如果我对您的理解正确,那还不够。现在,为了使此分布回到x轴正值,需要对其进行平移。 这意味着:
Dx(:,1) = - Dx(:,1) + some number that translated x-axis to positive values
。
您可以通过首先取分布的平均值(或质心)来选择该数字,即mean(Dx(:,1))
,这是您的值在其周围分布的值。如果仅从分布中减去均值,则最终会得到零附近的值,要将其带到正侧相同的距离,则需要减去另一次均值。
Dx(:,1) = - Dx(:,1) + 2 * mean(Dx(:,1))
读取此行表示mean(Dx)
是在反射之前计算的,因此它具有正值...
答案 1 :(得分:1)
另一种解决方案是将轴的“ XDir”属性设置为“反向”:
set(gca,'XDir','reverse')
这将翻转轴,因此它向左增加而不是向右增加。绘制的数据仍然相同,只是显示方式有所不同。这可能不是您想要的。
答案 2 :(得分:-1)
fliplr
可以使用,但不能与您的Dx
数组一起使用。 fliplr
对数据而不是图像进行操作,因此对于大小为500 x 2的数组,该函数将x值翻转为y值,反之亦然,这就是为什么要旋转而不是反射的原因
使fliplr
工作的一种方法是在绘制图像后捕获图像数据,然后翻转它:
scatter(Dx(:,1), Dx(:,2), 140, c, 'filled', 'LineWidth',1.5)
f = getframe;
flipped = fliplr(f.cdata);
imshow(flipped)