Влияние изменений в 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, после этого изображение становится очень маленьким.]