OrthogonalProjection

Параллельная проекция без перспективного искажения

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

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

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

НаследованныйFALSE или TRUE

Графические примитивы

ОбъектыЗначения по умолчанию OrthogonalProjection
plot::CameraFALSE

Описание

Устанавливая OrthogonalProjection = TRUE, камера использует параллельную проекцию без перспективного искажения.

По умолчанию камера использует OrthogonalProjection = FALSE. В зависимости от расстояния камеры к графической сцене (установленный атрибутом Position), сцена подвергается некоторому естественному перспективному искажению. Искажение является большим, когда камера около сцены. Это является маленьким, когда камера далеко.

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

Для технических причин, однако, вы не должны подавлять перспективное искажение путем размещения камеры сами куда-нибудь далеко через атрибут Position и превращения линзы камеры в телек lense путем устанавливания маленького значения для его вводного угла (cf. ViewingAngle). Это может привести к проблемам с алгоритмом невидимой линии, используемым 3D средством отображения. Далее, подходящий вводный угол должен быть найден экспериментально таким, что сцена заполняет разумный фрагмент области рисунка.

Используйте OrthogonalProjection = TRUE вместо этого. Масштабирование сцены сделано автоматически, чтобы заполнить область рисунка оптимально.

С OrthogonalProjection = TRUE, представление только определяется направлением вектора от FocalPoint камеры к ее Position. (Камера перемещена в бесконечность вдоль луча, данного этой “оптической осью”, с помощью бесконечно малой величины вводный угол.)

Абсолютное положение камеры в с 3 пробелами, а также его вводном углу проигнорировано.

Примеры

Пример 1

Мы смотрим на поле с длиной стороны 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:

Пример 2

Следующая камера слишком близка к сцене, чтобы сделать все части функционального графика видимыми:

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:

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

Функции MuPAD