Патч круг по цветовому градиенту - PullRequest
3 голосов
/ 10 апреля 2019

Я пытаюсь нарисовать цветовой градиент, который я хотел бы сделать равномерным вдоль оси (в случае рисунка ниже, определяемого углом pi/7)

Когда я использую команду patch, график соответствует желаемому направлению градиента, но не является равномерным вдоль него (между точками на окружности образуются всевозможные треугольники)

enter image description here

вот код

N=120;
theta = linspace(-pi,pi,N+1);
theta = theta(1:end-1);
c = exp(-6*cos(theta-pi/7));
figure(1)
patch(cos(theta),sin(theta),c)
ylabel('y'); xlabel('x')
axis equal

1 Ответ

5 голосов
/ 15 апреля 2019

Необходимо определить свойство Faces, чтобы цвета заполняли полосы перпендикулярно оси (см. Указание граней и вершин ).В противном случае MATLAB будет использовать некоторый алгоритм, чтобы смешать цвет так гладко, как он видит.

N=120;
a = pi/7;

theta = linspace(a,2*pi+a,N+1); % note that I changed the point sequence, this is just to make it easier to produce the matrix for Faces.
theta(end) = [];

ids = (1:N/2)';
faces = [ids, ids+1, N-ids, N-ids+1];

c = exp(-6*cos(a-theta))';

figure
patch('Faces', faces, 'Vertices',[cos(theta);sin(theta)]','FaceVertexCData',c, 'FaceColor', 'interp', 'EdgeColor', 'none')
ylabel('y'); xlabel('x')
axis equal

enter image description here

...