Влияние изменений в Viewpoint->{x,y,z} на размер графических объектов не то, что я ожидал. Как исправить?

Если вы запустите следующий фрагмент кода:

 Manipulate[
   Graphics3D[
     {Cuboid[{{-1, -1, -1}, {1, 1, 1}}], Sphere[{5, 5, 5}, 1]}, 
      ViewPoint -> {1, 1, a}, AxesOrigin -> {0,0,0}
   ], 
   {a, 1, 100}
 ]

и переместите точку обзора с (1,1,1) на (1,1,100) с помощью ползунка, и вы увидите, что через некоторое время объекты остаются фиксированными в размере.

Вопросы.

1. Когда я перемещаю точку обзора дальше от сцены, я хочу, чтобы объекты стали меньше. Как это сделать в Mathematica?

(РЕДАКТИРОВАТЬ:)

2. Каково положение "камеры" по отношению к точке обзора?

2 ответа

Решение

Смотрите ViewAngle. В разделе "Дополнительная информация" обратите внимание, что настройка по умолчанию ViewAngle -> Automatic эффективно эквивалентно ViewAngle -> All когда вы удаляете достаточно далеко.

Вам просто нужно добавить явный параметр для ViewAngle:

Manipulate[
 Graphics3D[{Cuboid[{{-1, -1, -1}, {1, 1, 1}}], Sphere[{5, 5, 5}, 1]},
   ViewPoint -> {1, 1, a}, AxesOrigin -> {0, 0, 0}, 
  ViewAngle -> 35 Degree], {a, 1, 100}]

Насколько я знаю, точка зрения камеры действительно совпадает с положением, заданным ViewPoint, Поскольку Mathematica масштабирует результат так, чтобы он соответствовал одному и тому же изображению, вы не видите особых изменений, но они есть. Перспектива значительно меняется. Попробуйте, например, отойти от полупрозрачного квадрата, и вы увидите, что чем дальше, тем больше проекция становится ортогональной проекцией:

Если вы хотите масштабировать изображение в соответствии с расстоянием, вы можете использовать ImageSize, SphericalRegion это хорошо для стабилизации изображения.

Manipulate[
 vp = {1, 1, a};
 Graphics3D[{Cuboid[{{-1, -1, -1}, {1, 1, 1}}], Sphere[{5, 5, 5}, 1]},
  ViewPoint -> vp,
  AxesOrigin -> {0, 0, 0},
  SphericalRegion -> True,
  ImageSize -> 500/Norm[vp]],
 {a, 1, 100}
 ]

[анимация сделана с некоторыми ImagePadding держать объект в центре. Я остановил анимацию при = 10, после этого изображение становится очень маленьким.]

Другие вопросы по тегам