matlab - 如何在 MatLab 图中标记线条?

标签 matlab

What my plot looks like

What the plot should look like

代码正常工作,但我试图让标签显示在(1-8)的每一行上。就像上图一样。

我读了很多帖子并尝试搜索 Matlab,但我一直无法弄清楚。

clc;clear;close all;
V_inf = 20;                         % freestream velocity
R = 1;                              % cylinder radius
n = 8;                              % number of panels
d_theta = 2*pi/n;                   % resolution of angles
alpha = 0;                          % angle of attack
theta = pi+pi/n:-d_theta:-pi+pi/n;  % angles of boundary points of panels
X = R*cos(theta);                   % X coordinates of boundary points of panels
Y = R*sin(theta);                   % Y coordinates of boundary points of panels

Phi =   zeros(n,1);                 % angle from Vinf to bottom of panel
beta =  zeros(n,1);                 % angle from Vinf to outward normal of panel
conX =  zeros(n,1);                 % X coordinates of control points
conY =  zeros(n,1);                 % Y coordinates of control points
S =     zeros(n,1);                 % panel length
for i = 1:n
    Phi(i) = -alpha + atan2((Y(i+1)-Y(i)),(X(i+1)-X(i)));             
    beta(i) = Phi(i)+pi/2;  
    if beta(i)>2*pi, beta(i)=beta(i)-2*pi; 
    elseif beta(i)<0, beta(i)=beta(i)+2*pi; end
    conX(i) = (X(i+1)+X(i))/2;                                          
    conY(i) = (Y(i+1)+Y(i))/2;                                          
    S(i) = sqrt((X(i+1)-X(i))^2 + (Y(i+1)-Y(i))^2);                     
end


close all
plot(R*cos(0:0.01:2*pi),R*sin(0:0.01:2*pi),'b', X,Y,'r',conX,conY,'g^'); 
axis equal; legend('Exact shape','Panel approximation','Control points')
xlabel('x, m'); ylabel('y, m'); title('Fig. 1 Panel layout (n = 8, R = 1m)');

最佳答案

可能使用 text() 函数沿着圆的点绘制标签就足够了。需要进行一些点的移动和翻转才能获得您想要的顺序,但除此之外,它只是沿着直径比八边形更小的圆取 8 个点。另一种方法是使用绿色三角形作为引用,但这涉及更多数学。只要您的八边形预计垂直和水平对称,就应该可以正常工作。

clc;clear;close all;
V_inf = 20;                         % freestream velocity
R = 1;                              % cylinder radius
n = 8;                              % number of panels
d_theta = 2*pi/n;                   % resolution of angles
alpha = 0;                          % angle of attack
theta = pi+pi/n:-d_theta:-pi+pi/n;  % angles of boundary points of panels
X = R*cos(theta);                   % X coordinates of boundary points of panels
Y = R*sin(theta);                   % Y coordinates of boundary points of panels

Phi =   zeros(n,1);                 % angle from Vinf to bottom of panel
beta =  zeros(n,1);                 % angle from Vinf to outward normal of panel
conX =  zeros(n,1);                 % X coordinates of control points
conY =  zeros(n,1);                 % Y coordinates of control points
S =     zeros(n,1);                 % panel length
for i = 1:n
    Phi(i) = -alpha + atan2((Y(i+1)-Y(i)),(X(i+1)-X(i)));             
    beta(i) = Phi(i)+pi/2;  
    if beta(i)>2*pi, beta(i)=beta(i)-2*pi; 
    elseif beta(i)<0, beta(i)=beta(i)+2*pi; end
    conX(i) = (X(i+1)+X(i))/2;                                          
    conY(i) = (Y(i+1)+Y(i))/2;                                          
    S(i) = sqrt((X(i+1)-X(i))^2 + (Y(i+1)-Y(i))^2);                     
end


close all
plot(R*cos(0:0.01:2*pi),R*sin(0:0.01:2*pi),'b', X,Y,'r',conX,conY,'g^'); 
axis equal; legend('Exact shape','Panel approximation','Control points')
xlabel('x, m'); ylabel('y, m'); title('Fig. 1 Panel layout (n = 8, R = 1m)');

%*************************************************************************%
%ADDING LABELS BY PLOTTING LABELS ALONG CIRCLE%
%*************************************************************************%

Radius = 0.8;
Number_Of_Data_Points = 9;
theta = linspace(0,2*pi,Number_Of_Data_Points);
X_Circle = Radius*cos(theta);
X_Circle = X_Circle(1:end-1);
Y_Circle = Radius*sin(theta);
Y_Circle = Y_Circle(1:end-1);

X_Circle = flip(circshift(X_Circle,3));
Y_Circle = flip(circshift(Y_Circle,3));

for Point_Index = 1: numel(conX)
    
    X_Displacement = X_Circle(Point_Index);
    Y_Displacement = Y_Circle(Point_Index);

    text(X_Displacement,Y_Displacement,num2str(Point_Index),'HorizontalAlignment','center','fontsize',20);
end
    

在控制点上绘图:

%*************************************************************************%
%ADDING LABELS BY PLOTTING LABELS ALONG CONTROL POINTS%
%*************************************************************************%
for Point_Index = 1: numel(conX)
    text(conX(Point_Index),conY(Point_Index),num2str(Point_Index),'HorizontalAlignment','center','fontsize',20);
end

关于matlab - 如何在 MatLab 图中标记线条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71288052/

相关文章:

matlab - 交替 1 和 -1 元素的矩阵 - MATLAB

python - 标记图像区域

matlab - 在 Matlab 中更改分组条形图中的颜色

c - 如何将 float[][] 类型数组转换为 "emxArray_real_T *x"

java - 捕获日期对象以进行进一步处理

matlab - 使用 MATLAB 和 libsvm 绘制 SVM 边距

matlab - 如何去除水平线和垂直线

matlab - 使用在 matlab/octave 中查找基于数字索引启动 circshift

c++ - 由于 undefined symbol ,无效的 MEX 文件

matlab - Matlab中递归调用函数的范围