让坐标轴单位长度相同
今天画开封铁塔的模拟图,代码如下:
clc
clear
close all
load A_1986
c1 = 1:8:104; c2 = 8:8:104; C = [c1;c2]';
x = A_1986(:,1);y = A_1986(:,2);z = A_1986(:,3);
x_center = center_86(:,1);y_center = center_86(:,2);z_center = center_86(:,3);
figure(1)
H(1) = plot3(x,y,z,'bo');
for i = 1:13
line([x(C(i,1):C(i,2));x(C(i,1))],[y(C(i,1):C(i,2));y(C(i,1))],[z(C(i,1):C(i,2));z(C(i,1))])
end
hold on
H(2) = plot3(x_center,y_center,z_center,'r*');
H(3) = plot3(real_tajian_86(1),real_tajian_86(2),real_tajian_86(3),'r^');
title('开封铁塔1986年三维图')
legend(H,{'塔每层的测量点','塔的中心点','塔尖'},'Location','NorthEast');
grid on
画出来的图如下:
感觉铁塔又胖又矮。。。丑一批,发现是坐标轴单位长度不同造成的。
上网找答案,发现只要加上 axis equal 就ok,于是改之后的代码为:
clc
clear
close all
load A_1986
c1 = 1:8:104; c2 = 8:8:104; C = [c1;c2]';
x = A_1986(:,1);y = A_1986(:,2);z = A_1986(:,3);
x_center = center_86(:,1);y_center = center_86(:,2);z_center = center_86(:,3);
figure(1)
H(1) = plot3(x,y,z,'bo');
for i = 1:13
line([x(C(i,1):C(i,2));x(C(i,1))],[y(C(i,1):C(i,2));y(C(i,1))],[z(C(i,1):C(i,2));z(C(i,1))])
end
hold on
H(2) = plot3(x_center,y_center,z_center,'r*');
H(3) = plot3(real_tajian_86(1),real_tajian_86(2),real_tajian_86(3),'r^');
title('开封铁塔1986年三维图')
axis equal
legend(H,{'塔每层的测量点','塔的中心点','塔尖'},'Location','NorthEast');
grid on
画出来的图如下:
之间,还修改过一次,看到Matlab论坛有大佬说加上这段:
xtick = get(gca,'XTick');
ytick = get(gca,'YTick');
ztick = get(gca,'ZTick');
%ytick间距,并将xtick间距设为与y相同
N = (max(xtick) - min(xtick))/(ztick(2)-ztick(1));
N_ = (max(ytick) - min(ytick)) / (ztick(2) - ztick(1));
xtick = xtick(1) + (0:(N - 1))*(ztick(2)-ztick(1));
ytick = ytick(1) + (0:(N_ - 1)) * (ztick(2) - ztick(1));
set(gca,'XTick',xtick');%此时横轴和纵轴坐标刻度一致
set(gca,'YTick',ytick');
但是这段的效果是:
分析原因:
这段代码是让坐标轴单位长度在数值上相等但是视觉上却不是相等
axis equal 是让坐标轴单位长度在视觉上相等在数值上也是相等的