How do I put the patch in the correct position?
    8 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
I have a longitude(x), latitude(y), altitude(z) data, which is aircraft data.
I made a patch using my data. but the patch is loacted in another position and y axis is not latitude number.
I don't know how to locate it in the correct position and how to use latitude(y) data for this.
so, I want the patch to be on trajectory like first image.
for i = 1:length(Dep_33L)
     plot3(Dep_33L(i).Longitude, Dep_33L(i).Latitude, Dep_33L(i).BAlt)
        hold on   
end
yv = linspace(min(y), max(y), 30);  
for k = 1:length(yv)
    for i = 1:length(RKSI_Dep_33L)
        x(i) = Dep_33L(i).Longitude(k);
        z(i) = Dep_33L(i).BAlt(k);
    end
    xptcl = prctile(x,[2.5 97.5]);
    zpctl = prctile(z,[2.5 97.5]);
    xl(k,:) = xptcl;
    zl(k,:) = zpctl;
    patch([xptcl flip(xptcl)], [0 1 1 0]+yv(k), [[1 1]*zpctl(1) [1 1]*zpctl(2)], 'r', 'FaceAlpha',0.25)
end
plot3(xl(:,1), yv(:), zl(:,1), '-k', 'LineWidth',2)
plot3(xl(:,1), yv(:), zl(:,2), '-k', 'LineWidth',2)
plot3(xl(:,2), yv(:), zl(:,1), '-k', 'LineWidth',2)
plot3(xl(:,2), yv(:), zl(:,2), '-k', 'LineWidth',2)
xlabel('X')
ylabel('Y')
zlabel('Z')

0 commentaires
Réponse acceptée
  Star Strider
      
      
 le 27 Mai 2022
        It appears that the ‘x’ and ‘y’ axes are reversed with respect to the data and the percentile patches.  Keep the percentile patches as they are, and experiment with changing the data plot arguments so that they overlap correctly.  (Without the axis labels and the axis gridlines, it is difficult to determine what needs to be changed.)  
13 commentaires
  Star Strider
      
      
 le 28 Mai 2022
				That would likely require some sort of rotation matrix in 3 dimensions on each percentile patch.  The rotation angle can likely be calcualted from the climb angle (typically 30° if I remember correctly) with the other angles remaining unchanged, since all aircraft would be expected to maintain runway heading (actually course) until reaching pattern altitude.  They would then be vectored to their respective SID routes.  
x = rand(1,5000)*10+125;
y = randn(1,5000)*50+250;
z = randn(1,5000)*150+300;
t = linspace(0, 1, 5000);
x = x + sin(2.5*pi*t)*125;
y = y + cos(1.5*pi*t)*125;
z = z + t*cosd(30)*1E+3;
yv = linspace(min(y), max(y), 7);                           % Set 'Y' Values For The Box Locations
figure
scatter3(x,y,z,'.')
hold on
for k = 1:numel(yv)
    yrng = find(y>=0.8*yv(k) & y <=1.2*yv(k));
    xpctl = prctile(x(yrng),[2.5  97.5]);
    zpctl = prctile(z(yrng),[2.5  97.5]);
    xl(k,:) = xpctl;
    zl(k,:) = zpctl;
    hp = patch([xpctl flip(xpctl)], [0 1 1 0]+yv(k), [[1 1]*zpctl(1) [1 1]*zpctl(2)], 'r', 'FaceAlpha',0.25);
    rotate(hp,[0.5 0 1],-30)
%     vtx2 = get(hp,'Vertices')
    xd(:,k) = hp.XData;
    yd(:,k) = hp.YData;
    zd(:,k) = hp.ZData;
end
% xd
% yd
% zd
% get(hp)
plot3(xd(1,:), yd(1,:), zd(1,:), '-k', 'LineWidth',2)
plot3(xd(2,:), yd(2,:), zd(2,:), '-k', 'LineWidth',2)
plot3(xd(3,:), yd(3,:), zd(3,:), '-k', 'LineWidth',2)
plot3(xd(4,:), yd(4,:), zd(4,:), '-k', 'LineWidth',2)
hold off
xlabel('X')
ylabel('Y')
zlabel('Z')
% xlim([120 140])
% ylim([100 400])
view(45,30)
I leave the rest to you.  See the rotate documentation for details on how it works to make it work with your data.  
.
Plus de réponses (0)
Voir également
Catégories
				En savoir plus sur Polygons dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!








