UpVector
, UpVectorX
, UpVectorY
, UpVectorZ
, KeepUpVector
Направление камеры
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
Объекты | Значения по умолчанию |
---|---|
plot::Camera |
|
UpVector = [x, y, z]
устанавливает 3D вектор, который соответствует вертикальному направлению 2D снимка, сделанного камерой.
UpVectorX
и т.д. обозначьте координаты UpVector
.
KeepUpVector = TRUE
сохраняет UpVector
постоянный, когда камера перемещена. С KeepUpVector = FALSE
, UpVector
сохранен ортогональным к оптической оси, когда камера перемещена.
Снимок, сделанный камерой, задан атрибутами Position
(3D положение камеры) и FocalPoint
(на 3D точку камера указывают). Вектор от положения до центра является оптической осью камеры.
Как дополнительная степень свободы, камера может вращаться вокруг оптической оси. Это вращение задано путем определения 3D векторного UpVector
. В итоговом 2D снимке, сделанном камерой, этот вектор параллелен вертикальной оси, указывая вверх.
Со значением по умолчанию UpVector = [0, 0, 1]
z
- ось в 3D точках вверх в 2D изображении.
UpVector
из камеры не должен быть нуль и не должен быть параллелен оптической оси.
Значениями по умолчанию является UpVector = [0, 0, 1]
и KeepUpVector = TRUE
.
Ограничение, что UpVector
не должно быть параллельно оптической оси, приводит к разрывам, когда камера перемещается таким способом, которым нарушено это ограничение. В таком случае, KeepUpVector = FALSE
должен использоваться. См. Пример 2.
Мы просматриваем крест трех стрел камерой с обычным UpVector
обращение в z
- направление:
camera := plot::Camera([0.3, -4.0, 0.2], [0, 0, 0], PI/4, UpVector = [0, 0, 1]): plot(plot::Arrow3d([-1, 0, 0], [1, 0, 0], Color = RGB::Red), plot::Arrow3d([0, -1, 0], [0, 1, 0], Color = RGB::Green), plot::Arrow3d([0, 0, -1], [0, 0, 1], Color = RGB::Blue), camera)
Мы переопределяем UpVector
из камеры, чтобы указать в направление [1, 0, 1]
. Теперь это 3D направление становится вертикальным направлением 2D изображения:
camera::UpVector := [1, 0, 1]: plot(plot::Arrow3d([-1, 0, 0], [1, 0, 0], Color = RGB::Red), plot::Arrow3d([0, -1, 0], [0, 1, 0], Color = RGB::Green), plot::Arrow3d([0, 0, -1], [0, 0, 1], Color = RGB::Blue), camera)
delete camera:
Мы используем анимированную камеру, чтобы пролететь над Северным полюсом планеты с помощью UpVector = [0, 0, 1]
по умолчанию. С
KeepUpVector = TRUE
, мы сталкиваемся с разрывом, когда камера позиционирована точно по северу poly обращение прямо вниз. UpVector
параллельно оптической оси в этой точке:
camera := plot::Camera([4*cos(a), 0, 4*sin(a)], [0, 0, 0], PI/4, a = 0..PI, Frames = 300, UpVector = [0, 0, 1], KeepUpVector = TRUE): planet := plot::Surface([cos(u)*sin(v), sin(u)*sin(v), cos(v)], u = 0..2*PI, v = 0..PI, FillColorFunction = proc(u, v) begin [cos(u)*cos(v)^2, cos(u)*cos(v)^2, cos(u)] end_proc): font := ["sans-serif", 10, RGB::Grey80]: text1 := plot::Text3d("North", [0, 0, 1.2], TextFont = font): text2 := plot::Text3d("South", [0, 0, -1.2], TextFont = font): plot(camera, planet, text1, text2, Scaling = Constrained);
С KeepUpVector = FALSE
, ни с каким таким разрывом не сталкиваются. Однако при достижении экватора на темной стороне планеты, UpVector
обернулся: верхняя сторона изображения теперь является югом, более низкая сторона является севером:
camera::KeepUpVector := FALSE: plot(camera, planet, text1, text2, Scaling = Constrained);
delete camera, planet, font, text1, text2: