LineColorFunction, FillColorFunction

Функциональная окраска линии

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.

Сводные данные значения

FillColorFunction, LineColorFunctionДополнительныйФункция управления цветом (см. ниже),

Описание

Эти опции принимают функции, которые задают цвет графика в произвольных точках.

Используя FillColorType и LineColorType, пользователь может управлять цветом многих графических объектов. Установкой, обеспечивающей самое подробное (и самый сложный) управление, является Functional. В этом случае функция управления цветом должна быть обеспечена с помощью одного из LineColorFunction, FillColorFunction.

Функция управления цветом может быть списком трех или четырех выражений.

Если три выражения даны, они задают цвета RGB. Если четыре выражения даны, они задают цвета RGBA. Дополнительную информацию см. во введении на спецификациях цветов.

Выражения могут содержать идентификаторы, связанные в соответствующем объекте. Например, в plot::Function2d(sin(x), x=0..PI), функция управления цветом может относиться к x. Более официально выражения могут содержать идентификаторы, найденные в атрибутах XName, YName, ZName, UName, VName, и ParameterName из объекта графика они найдены в.

Все эти выражения, для значений в данных областях значений, должны оценить к вещественным числам в области значений. Действительные значения вне этой области значений не дают к ошибкам, они просто отсекаются.

См. также Пример 1.

В качестве альтернативы функция управления цветом может быть процедурой или функциональной средой.

Процедура (или функциональная среда) используемый в качестве функции управления цветом должна возвратить списки трех или четырех вещественных чисел в области значений. Действительные значения вне этой области значений отсекаются. (Если эта функция когда-нибудь возвращает список четырех чисел, она должна всегда делать так.) Список трех чисел интерпретирован как цвет RGB, в то время как список четырех значений интерпретирован как цвет RGBA. Дополнительную информацию см. во введении на спецификациях цветов.

Номер и значение аргументов, с которыми вызвана функция управления цветом, зависят от типа объекта. Неофициально, мы имеем:

Введите (сокращенный)Параметры
Conformal(f(z)) z, Re(f(z)), Im(f(z))флагflag = 1 или flag = 2)
Curve2d(x(u),y(u)) u, x(u), y(u)
Curve3d(x(u),y(u),z(u)) u, x(u), y(u), z(u)
Cylindrical(r(u,v),phi(u,v),z(u,v))uV, r(u,v), phi(u,v), z(u,v), x(u), y(u), z(u)
Density(f(x,y))xY, f(x,y)
plot::DodecahedronСмотрите ниже.
Function2d(f(x))x, f(x)
Function3d(f(x,y))xY, f(x,y)
plot::HexahedronСмотрите ниже.
IcosahedronСмотрите ниже.
Implicit2d(f(x,y), Contours=[c])xY, D([1],f)(x,y), D([2],f)(x,y)C
Implicit3d(f(x,y,z), Contours=[c])xYZ, D([1],f)(x,y,z), D([2],f)(x,y,z), D([3],f)(x,y,z)C
MatrixplotxYZ
OctahedronСмотрите ниже.
Polar([r(t),phi(t)])trt , phi(t)xt yt
Polygon2d([..,[xi,yi],..])xi, yii

Polygon3d([..,[xi,yi,zi],..])

xi, yizi i

Rootlocus(p(z, u))

u, Re(z), Im(z)
Spherical(r(u,v),phi(u,v),thet(u,v))uV, r(u,v), phi(u,v), thet(u,v)XYZ
Streamlines2d(v(x,y), w(x, y))xY, v(x,y), w(x,y)TLN
Surface(x(u,v),y(u,v),z(u,v))uV, x(u,v), y(u,v), z(u,v)
SurfaceSTLСмотрите ниже.
SurfaceSetСмотрите ниже.
TetrahedronСмотрите ниже.
TubeСмотрите ниже.
VectorField2d(v(x,y),w(x,y))xY, v(x,y), w(x,y)
XRotate(f(x))x, phiX, y(x,phi), z(x,phi)
ZRotate(f(t))t, phi, x(t,phi), y(t,phi), f(t)(=z(t,phi))

Кроме того, для анимированных объектов, текущее значение параметра анимации введено.

Dodecahedron, Hexahedron, Icosahedron, SurfaceSTL, SurfaceSet, и Tetrahedron создаются из треугольников; функции управления цветом вызваны однажды для каждой вершины этих треугольников и передаются количество треугольника (целочисленное количество, запускающееся в 1), координаты вершины и параметра анимации, если это используется.

Для plot::Tube, функциям управления цветом дают координаты в настоящее время посещаемой точки на центральной кривой, сопровождаемой координатами точки на поверхности, сопровождаемой параметром анимации, если таковые имеются. (Который приводит семь аргументов в целом.)

Примеры ниже показа различные среды использования функций управления цветом для некоторых типов объектов упоминаются выше.

Примеры

Пример 1

По умолчанию большинство 3D объектов в MuPAD® получает “высоту, окрашивающую”:

plot(plot::Function3d(sin(x)*y^3))

Чтобы изменить направление этого цвета, можно использовать FillColorFunction:

xmin := -5:
xmax := 5:
color := zip(RGB::Red, RGB::CornflowerBlue,
             (a, b) -> (x-xmin)/(xmax-xmin)*a
                      +(xmax-x)/(xmax-xmin)*b)

plot(plot::Function3d(sin(x)*y^3,
         FillColorFunction = color))

Пример 2

Анимированные функции управления цветом могут быть объединены со статическими объектами:

plot(
  plot::Curve2d([sin(3*x), sin(4*x + 1)], x = 0..2*PI,
                LineColorFunction = ((u, x, y, a) ->
                             [(u-a)/5, (u-a)/5, 1]),
                a = -5..6)
    )

cf := (i, x, y, z, a) -> [RGB::Red,
                          RGB::Green,
                          RGB::Blue][(floor(a*i)
                                       mod 3) + 1]:
plot(plot::Icosahedron(FillColorFunction = cf,
                       a = 0..9))

Пример 3

Функция управления цветом должна сгенерировать значения в цветовом пространстве RGB. Начиная с plot::Box не позволяет FillColorFunction, мы используем шесть (тривиальных) Surface объекты показать за пределами этого цветового пространства:

rgb := (u, v, x, y, z) -> [x, y, z]:
plot(plot::Surface(formula, u = 0..1, v = 0..1,
                   FillColorFunction = rgb)
     $ formula in [[0, u, v], [1, u, v],
                   [u, 0, v], [u, 1, v],
                   [u, v, 0], [u, v, 1]],
     plot::Box(0..1, 0..1, 0..1, Filled = FALSE,
               LineColor = RGB::Black.[0.25]),
     Scaling = Constrained, Axes = None,
     ULinesVisible = FALSE, VLinesVisible = FALSE,
     Lighting = None, CameraDirection = [4, 7, 3])

Цвета RGB являются очень техническим способом задать цвет. HSV-цветовое пространство более популярно у разработчиков, поскольку там “оттенок” (т.е. воспринятый тип цвета) не является комбинацией трех чисел, а скорее одним из чисел, составляющих цвет:

hsv := (u, v, r, phi, z) -> RGB::fromHSV([180/PI*phi, r, z]):
plot(plot::Cylindrical([z, phi, z], z = 0..1, phi = 0..2*PI,
                       FillColorFunction = hsv),
     plot::Cylindrical([r, phi, 1], r = 0..1, phi = 0..2*PI,
                       FillColorFunction = hsv),
     plot::Circle3d(1, [0, 0, 1], [0, 0, 1],
                    Color = RGB::Black.[0.25]),
     ZXRatio = 1.5, Scaling = Unconstrained,
     Axes = None, Lighting = None,
     ULinesVisible = FALSE, VLinesVisible = FALSE,
     CameraDirection = [-17, -12, 3])

Пример 4

HSV-цветовое пространство особенно подходит для быстрой окраски цилиндрический,полярный, или сферических графиков, из-за его кругового характера:

hsv := (u, v, r, phi,thet) ->
    RGB::fromHSV([180/PI*(phi+(thet+2)^3/PI^2),
                  3/4+sin(u)/4, 1]):
plot(plot::Spherical([1, u, v], u = 0..2*PI, v = 0..PI,
                     FillColorFunction = hsv))

Существуют другие примеры, где циклическая природа пригождается, также:

hsv := (x, y, z) -> RGB::fromHSV([150*z, 1, 1]):
plot(plot::Function3d(sin(x*y)*(x-y), x = -3..3, y = -3..3,
                      Submesh = [2, 2], FillColorFunction = hsv))

Следующий пример занимает много времени, чтобы вычислить. Сокращение значений установлено для Mesh результаты в более коротком расчете, в то время как более высокие значения приводят к изображению с более прекрасными деталями:

c := 0.377+0.2*I:
julia := proc(x, y)
           local i, z;
         begin
           i := 0;
           z := float(x + I*y);
           while i < 1000 and abs(z) < 4 do
             z := z^2 + c;
             i := i + 1;
           end_while;
           i;
         end_proc:
Jcol := (x, y, i) -> if i >= 1000 then
                       RGB::Black
                     else
                       RGB::fromHSV([i, 1, 3/4+i/2000])
                     end:
plot(plot::Density(julia, x = 0..0.5, y=0.25..0.75,
                   FillColorFunction = Jcol,
                   Mesh = [100,75]))

Пример 5

Другой способ получить сглаженный цветовой переход состоит в том, чтобы использовать промежуточную периодическую функцию, например, тригонометрические единицы (отметьте (1+sin(a))/2: нам нужны значения между 0 и 1):

plot(
  plot::Polar([r*surd(r, 3), r], r = -4*PI..4*PI,
               AdaptiveMesh = 2,
               LineColorFunction = [(sin(r) + 1)/2,
                                    (cos(r/2) + 1)/2,
                                    1/3],
               LineWidth = 1*unit::mm)
    )

Это также запрашивает циклические цвета в терминах времени:

plot(plot::Function3d(sin(x)+sin(y), x = -5..5, y = -5..5,
          FillColorFunction = [(x+5)/10, (y+5)/10,
                               abs(x+y+5*cos(a))/15,
                               (1+cos(x+y^2-a))/2],
          a = 0..2*PI),
     CameraDirection = [-1, -3, 3],
     Scaling = Constrained)

Алгоритмы

Анимация обработана общими рамками, не отдельными объектами. Поэтому среда также предоставляет параметр анимации к функциям управления цветом.

Смотрите также

Функции MuPAD