根据给定的角度数据修补颜色渐变

问题描述 投票:0回答:1

我正在尝试修补给定角度数据的颜色渐变

数据如下:

n = [263.6909 287.9987 262.1933 199.6890 128.5683 71.1718 34.6535 15.2568 6.2683 2.4868 0.9872 0.4063 0.1793 0.0876 0.0487 0.0315 0.0241 0.0221 0.0243 0.0319 0.0495 0.0895 0.1838 0.4174 1.0159 2.5605 6.4504 15.6740 35.5053  72.6566 130.6707 201.9328];

theta=0:(2*pi/32):(2*pi*(32-1)/32);
theta(theta>pi) = theta(theta>pi)-2*pi;

我使用补丁命令

figure
hold on
patch(cos(theta), sin(theta), n, 'EdgeColor', 'none');
quiver(0,0,-4.6492,-0.9099,0.5,'k','linewidth',3);
axis equal

梯度应该垂直于偏振轴(由黑色箭头表示),但有时它会混合在一起。

下图中是我获得的以及我希望获得的

enter image description here

我强调,数据是动态模拟的一部分,其中数组

n
每次迭代都会改变,因此梯度斜率和方向必须根据给定的
n

matlab matlab-figure
1个回答
0
投票

您可以使用

atan2
计算出矢量
aUV
的方向,并将颜色设置为等于
cos(theta + aUV + pi/2)
,因为您要开始绘制与绘制圆形的位置偏移
aUV
的颜色
patch
和附加的
pi/2
使渐变垂直。

% Some setup values
N = 32;        % Number of samples in array
U = -4.6492;   % X displacement of vector
V = -0.9099;   % Y displacement of vector
% Calculate circle drawing vectors
aUV = atan2(U,V);              % Angle of UV vector
theta = linspace(0,2*pi,N);    % Angle array for drawing patch
clr = cos(theta + aUV + pi/2); % Offset cyclic colour starting from aUV+pi/2
% Plot
figure(1); clf; hold on;
patch(cos(theta), sin(theta), clr, 'EdgeColor', 'none');
quiver(0,0,U,V,0.5,'k','linewidth',3);
axis equal; colormap spring

输出:

output plot

© www.soinside.com 2019 - 2024. All rights reserved.