OrthogonalProjection
Параллельная проекция без перспективного искажения
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
Объекты | Значения по умолчанию OrthogonalProjection |
---|---|
plot::Camera | FALSE |
Установка OrthogonalProjection
= TRUE
, камера использует параллельную проекцию без перспективного искажения.
По умолчанию камера использует OrthogonalProjection
= FALSE
. В зависимости от расстояния камеры к графической сцене (установленный атрибутом Position
), сцена подвергается некоторому естественному перспективному искажению. Искажение является большим, когда камера около сцены. Это мало, когда камера далеко.
В принципе использование параллельной проекции эквивалентно размещению камеры на очень большом расстоянии от сцены, просматривая очень мощный телек lense.
Для технических причин, однако, вы не должны подавлять перспективное искажение путем размещения камеры сами куда-нибудь далеко через атрибут Position
и превращение линзы камеры в телек lense путем устанавливания маленького значения для его вводного угла (cf. ViewingAngle
). Это может привести к проблемам с алгоритмом невидимой линии, используемым 3D средством отображения. Далее, подходящий вводный угол должен быть найден экспериментально таким, что сцена заполняет разумный фрагмент области рисунка.
Используйте OrthogonalProjection
= TRUE
вместо этого. Масштабирование сцены сделано автоматически, чтобы заполнить область рисунка оптимально.
С OrthogonalProjection
= TRUE
, представление только определяется направлением вектора от FocalPoint
из камеры к ее Position
. (Камера перемещена в бесконечность вдоль луча, данного этой “оптической осью”, с помощью бесконечно малой величины вводный угол.)
Абсолютное положение камеры в с 3 пробелами, а также его вводном углу проигнорировано.
Мы смотрим на поле с длиной стороны 2 камеры использования в различных положениях. Мы удваиваем расстояние между камерой и центром поля от одной сцены до следующего. В то же время мы используем все более мощные линзы телека путем уменьшения вводного угла камеры фактором, так, чтобы поле имело приблизительно тот же размер.
В S1
, камера близко к полю. Поле искажено в большой степени.
В S2
, камера более далека. Перспективные искажения меньше.
В S3
, расстояние камеры к центру поля является приблизительно 5 раз диаметром поля. Только незначительные перспективные искажения отображаются.
В S4
, расстояние камеры является приблизительно 10 раз диаметром поля. Перспективных искажений почти не стало:
b := plot::Box(-1..1, -1..1, -1..1, Filled = FALSE, LineColor = RGB::Black): S1:= plot::Scene3d(b, plot::Camera([ 2, 1.8, 2.5], [0, 0, 0], PI/3)): S2:= plot::Scene3d(b, plot::Camera([ 4, 3.6, 5.0], [0, 0, 0], PI/6)): S3:= plot::Scene3d(b, plot::Camera([ 8, 7.2, 10.0], [0, 0, 0], PI/12)): S4:= plot::Scene3d(b, plot::Camera([16, 14.4, 20.0], [0, 0, 0], PI/24)): plot(S1, S2, S3, S4, Axes = None)
Мы подавляем искажения полностью установкой OrthogonalProjection
= TRUE
. Отметьте автоматическое масштабирование сцены:
plot(S1, S2, S3, S4, Axes = None, OrthogonalProjection = TRUE)
delete b, S1, S2, S3, S4:
Следующая камера слишком близка к сцене, чтобы сделать все части функционального графика видимыми:
f := plot::Function3d(sin(x^2 - y^2), x = -2..2, y = -2..2): camera := plot::Camera([2, 2, 2], [0, 0, 0], PI/5): plot(f, camera)
С OrthogonalProjection
= TRUE
, заданное положение и вводный угол проигнорированы. Эффект OrthogonalProjection
совпадает с размещением камеры далеко и выбором крошечного вводного угла, таким образом, что сцена заполняет область рисунка оптимально:
camera::OrthogonalProjection := TRUE: plot(f,camera)
delete f, camera: