2012-04-28 49 views
3
(* code to Construct structures *) 

wing = { 
(*Base Cylinders*) 
{Gray, Cylinder[{{10, 10, 10}, {10, 10, 6}}, 7]}, 
{Blue, Cylinder[{{10, 10, 6}, {10, 10, 5}}, 7]}, 
{Blue, Cylinder[{{10, 10, 5}, {10, 10, 4}}, 7]}, 
{Gray, Cylinder[{{10, 10, 4}, {10, 10, 2}}, 7]}, 

(*top cylinders*) 
{Blue, Cylinder[{{10, 10, 12}, {10, 10, 10}}, 4]}, 
{Gray, Cylinder[{{10, 10, 14}, {10, 10, 12}}, 4]}, 

(*Parallel Beamers*) 
{Gray, Cuboid[{0, 7, 12}, {20, 13, 2}]}}; 

    house = { 
    (*the house*) 
    {Darker[Red, 0.3], Cuboid[{-10, -10, 0}, {2, 3, 12}]}, 

    (*roof*) 
    {Darker[Brown, 0.4], 
    Polygon[{{-10, -10, 12}, {-4, -3, 18}, {2, -10, 12}}]}, 
    {Darker[Brown, 0.4], 
    Polygon[{{2, -10, 12}, {-4, -3, 18}, {2, 3, 12}}]}, 
    {Darker[Brown, 0.4], 
    Polygon[{{2, 3, 12}, {-4, -3, 18}, {-10, 3, 12}}]}, 
    {Darker[Brown, 0.4], 
    Polygon[{{-10, 3, 12}, {-4, -3, 18}, {-10, -10, 12}}]}, 

    (*Door*) 
    {Yellow, 
    Polygon[{{2.005, -5.25, 0}, {2.005, -5.25, 5}, {2.005, -1.75, 
    5}, {2.005, -1.75, 0}}]}, 
    (*Door Knob*) 
    {Orange, Sphere[{2.005, -2.25, 2.5}, 0.25]}, 
    (*Windows*) 
    {Lighter[Blue, 0.5], 
    Polygon[{{2.005, -9, 6}, {2.005, -9, 10}, {2.005, -5, 
    10}, {2.005, -5, 6}}]}, {Lighter[Blue, 0.5], 
    Polygon[{{2.005, -1.75, 6}, {2.005, -1.75, 10}, {2.005, 2, 
    10}, {2.005, 2, 6}}]}, 

    (*Chimney*) 
    {Gray, Cuboid[{-2, -9, 12.75}, {-5, -7, 17}]}, 

    (*Lines for the Window*) 
    {Black, Cuboid[{2.006, -9, 7.9}, {2.006, -5, 8.1}]}, 
    {Black, Cuboid[{2.006, -7.1, 6}, {2.006, -6.9, 10}]}, 
    {Black, Cuboid[{2.006, 0, 6}, {2.006, 0.2, 10}]}, 
    {Black, Cuboid[{2.006, -1.75, 7.9}, {2.006, 2, 8.1}]}, 

    (*Lawn*) 
    {Darker[Green, 0.5], 
    Polygon[{{2, -10, 0}, {2, 3, 0}, {-10, 3, 0}, {-10, 10, 0}, {2, 
    10, 0}, {10, 10, 0}, {10, -10, 0}}]}, 

    (*Pavement*) 
    {Darker[Gray, 0.5], 
    Polygon[{{2, -5.25, 0.005}, {2, -1.75, 0.005}, {10, -1.75, 
    0.005}, {10, -5.25, 0.005}}]}, 
    (*Side Windows*) 
    {Lighter[Blue, 0.5], 
    Polygon[{{1, 3.005, 2}, {1, 3.005, 5}, {-4, 3.005, 5}, {-4, 3.005, 
    2}}]}, {Lighter[Blue, 0.5], 
    Polygon[{{-5, 3.005, 7}, {-9, 3.005, 7}, {-9, 3.005, 10}, {-5, 
    3.005, 10}}]}, {Lighter[Blue, 0.5], 
    Polygon[{{0, 3.005, 7}, {0, 3.005, 11}, {-2, 3.005, 11}, {-2, 
    3.005, 7}}]}, {Lighter[Blue, 0.5], 
    Polygon[{{-6, 3.005, 2}, {-6, 3.005, 6}, {-8, 3.005, 6}, {-8, 
    3.005, 2}}]}, {Lighter[Blue, 0.5], 
    Polygon[{{1, -10.005, 2}, {1, -10.005, 5}, {-4, -10.005, 
    5}, {-4, -10.005, 2}}]}, {Lighter[Blue, 0.5], 
    Polygon[{{-5, -10.005, 7}, {-9, -10.005, 7}, {-9, -10.005, 
    10}, {-5, -10.005, 10}}]}, {Lighter[Blue, 0.5], 
    Polygon[{{0, -10.005, 7}, {0, -10.005, 11}, {-2, -10.005, 
    11}, {-2, -10.005, 7}}]}, {Lighter[Blue, 0.5], 
    Polygon[{{-6, -10.005, 2}, {-6, -10.005, 6}, {-8, -10.005, 
    6}, {-8, -10.005, 2}}]}, 


    (*Back Window*) 
    {Lighter[Blue, 0.5], 
    Polygon[{{-10.005, 1, 3}, {-10.005, 1, 9}, {-10.005, -8, 
    9}, {-10.005, -8, 3}}]}, 

    (*Lines for the Window*) 
    {Black, Cuboid[{-1.4, 3.006, 2}, {-1.6, 3.006, 5}]}, 
    {Black, Cuboid[{1, 3.006, 3.4}, {-4, 3.005, 3.6}]}, 
    {Black, Cuboid[{-6.85, 3.006, 7}, {-7.1, 3.006, 10}]}, 
    {Black, Cuboid[{-5, 3.006, 8.4}, {-9, 3.006, 8.6}]}, 
    {Black, Cuboid[{-1.4, -10.006, 2}, {-1.6, -10.006, 5}]}, 
    {Black, Cuboid[{1, -10.006, 3.4}, {-4, -10.005, 3.6}]}, 
    {Black, Cuboid[{-6.85, -10.006, 7}, {-7.1, -10.006, 10}]}, 
    {Black, Cuboid[{-5, -10.006, 8.4}, {-9, -10.006, 8.6}]}}; 

    (* Holds the constructions together *) 

    tab = [email protected]{ 
    place[wing, 2, {0, 70, -27}, 0, "Building1"], 
    place[house, 1, {170, 200, -50}, 0, "Building2"]}; 

    (* defining the function place in the above function *) 

    place[obj_, scale_, trans_, rotate_, name_] := 
    GeometricTransformation[obj, 
    ScalingTransform[scale {1, 1, 1}].TranslationTransform[ 
    trans].RotationTransform[rotate Degree, {0, 0, 1}]] 

    (* Function to show the images in a particular plane *) 

    view := Show[ 
    Graphics3D[ReleaseHold[tab], PlotRange -> Automatic, 
    ImageSize -> {500, 500}, Boxed -> True, 
    AxesLabel -> {"x", "y", "z"}, Axes -> True]]; 




    (*--------------code over ----------------------------------------------------*) 

上面的代码结构的第一人称视图评估时,为我们提供了下面的图像Mathematica中

X axis view Side View Top view

我想有在平面这些图像的第一人称视角。我想能够在图像结构中移动飞机,并有机会像原始视图一样移动

有没有办法可以做到。我们是否可以在x轴上移动一个可以围绕x轴移动的对象,并且可以让我们看到x轴和y轴以及z轴的结构可以通过参数进行更改?

+0

我想你想要'ViewPoint'选项。顺便说一下,现在有一个Mathematica特定的StackExchange:http://mathematica.stackexchange.com – Verbeia 2012-04-28 09:01:37

+0

顺便说一句,您发布的代码似乎只包含小房子,这就足够了。另外,用MarkDown“格式化”代码并不是一个好主意。在我的Mathematica安装之前,我必须清理它。 – Verbeia 2012-04-28 09:11:02

+0

您可以使用alt-left-click-mouse-movement(进/出),alt-shift-left-click-mouse-movement(旋转)和shift-left-click-mouse-运动(上/下/左/右)。但是不可能在情节内部移动POV。 – Timo 2012-04-28 10:05:49

回答

1

This answer可以帮助您更好地了解像ViewVectorViewAngle概念。下面的代码可以让您试验一下在您的特定示例中摄像机的位置和视角如何影响视图。 tab的代码与原始问题相同。

With[{xrange = {0, 180}, yrange = {150, 240}, zrange = {-50, 0}}, 
Manipulate[ 
    DynamicModule[{vv, crd}, 
    With[{gr = Graphics3D[ReleaseHold[tab], 
     PlotRange -> {xrange, yrange, zrange}, ImageSize -> {500, 500}, 
     Boxed -> True, AxesLabel -> {"x", "y", "z"}, Axes -> True], eyelevel = -48}, 

    crd = {Cos[phi] Sin[theta], Sin[theta] Sin[phi], Cos[theta]}; 
    vv = {Append[{ptx, pty}, eyelevel], Append[{ptx, pty}, eyelevel] + crd}; 

    Grid[{{Show[{gr, 
     Graphics3D[{{Red, Sphere[vv[[1]], .5]}, 
      {Opacity[.3], Cone[{vv[[1]] + 100 crd, vv[[1]]}, 100 Tan[a/2]]}}]}, 
     ImageSize -> 350], 
     Show[gr, Axes -> False, ViewVertical -> {0, 0, 1}, 
     ViewVector -> vv, ViewAngle -> a , ImageSize -> 350]}}]]], 
    {{a, 50 Degree, "View Angle"}, 10 Degree, 180 Degree}, 
    {{ptx, 100, "Camera Position x"}, Sequence @@ xrange}, 
    {{pty, 200, "Camera Position y"}, Sequence @@ yrange}, 
    {{phi, Pi, "Horizontal Angle"}, 0, 2 Pi}, 
    {{theta, Pi/2, "Vertical Angle"}, 0, Pi}]] 

Mathematica graphics

左边的图像显示了红点是摄像头和锥体的视野的位置,建筑的鸟瞰图。

1

这是你想要的吗?

Manipulate[ 
Show[Graphics3D[ReleaseHold[tab], PlotRange -> Automatic, 
    ImageSize -> {500, 500}, Boxed -> True, 
    AxesLabel -> {"x", "y", "z"}, Axes -> True, 
    ViewPoint -> {x, y, z}]], {x, -2, 2}, {y, -2, 2}, {z, -2, 2}] 

enter image description here

+0

谢谢你帮助..这看起来不错,但是我真正想要的实现是一个相机像查看内部结构。我在Youtube中遇到了一些视频,他们似乎看起来很棒,但我无法实现任何接近 – user1277399 2012-04-28 21:46:00

+0

如何在操纵上使用ViewAngle和ViewVector让它在移动时更像摄像头。 – user1277399 2012-04-29 03:23:09