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)) | u V , r(u,v) , phi(u,v) , z(u,v) , x(u) , y(u) , z(u) |
Density(f(x,y)) | x Y , f(x,y) |
plot::Dodecahedron | Смотрите ниже. |
Function2d(f(x)) | x , f(x) |
Function3d(f(x,y)) | x Y , f(x,y) |
plot::Hexahedron | Смотрите ниже. |
Icosahedron | Смотрите ниже. |
Implicit2d(f(x,y), Contours=[c]) | x Y , D([1],f)(x,y) , D([2],f)(x,y) C |
Implicit3d(f(x,y,z), Contours=[c]) | x Y Z , D([1],f)(x,y,z) , D([2],f)(x,y,z) , D([3],f)(x,y,z) C |
Matrixplot | x Y Z |
Octahedron | Смотрите ниже. |
Polar([r(t),phi(t)]) | t rt , phi(t) xt yt |
Polygon2d([..,[xi,yi],..]) | xi , yi i |
| xi , yi zi i |
| u , Re(z) , Im(z) |
Spherical(r(u,v),phi(u,v),thet(u,v)) | u V , r(u,v) , phi(u,v) , thet(u,v) X Y Z |
Streamlines2d(v(x,y), w(x, y)) | x Y , v(x,y) , w(x,y) T L N |
Surface(x(u,v),y(u,v),z(u,v)) | u V , x(u,v) , y(u,v) , z(u,v) |
SurfaceSTL | Смотрите ниже. |
SurfaceSet | Смотрите ниже. |
Tetrahedron | Смотрите ниже. |
Tube | Смотрите ниже. |
VectorField2d(v(x,y),w(x,y)) | x Y , v(x,y) , w(x,y) |
XRotate(f(x)) | x , phi X , 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
, функциям управления цветом дают координаты в настоящее время посещаемой точки на центральной кривой, сопровождаемой координатами точки на поверхности, сопровождаемой параметром анимации, если таковые имеются. (Который приводит семь аргументов в целом.)
Примеры ниже показа различные среды использования функций управления цветом для некоторых типов объектов упоминаются выше.
По умолчанию большинство 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))
Анимированные функции управления цветом могут быть объединены со статическими объектами:
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))
Функция управления цветом должна сгенерировать значения в цветовом пространстве 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])
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]))
Другой способ получить сглаженный цветовой переход состоит в том, чтобы использовать промежуточную периодическую функцию, например, тригонометрические единицы (отметьте (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)
Анимация обработана общими рамками, не отдельными объектами. Поэтому среда также предоставляет параметр анимации к функциям управления цветом.