First Person view of structures in mathematica

(* 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 = HoldForm@{
  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 ----------------------------------------------------*)

The above code when evaluated gives us the following images

X轴视图侧面图顶视图

I want to have first person view of these image in the plane. I want to able to move around the the plane with the images as structures and have a chance to move like they are original views

Is there a way that can be done. Can we have a object that can be moved on the x-axis that allows to move around the x axis and could allow us to see the structures where the x axis and y axis and z axis, can be changed by the parameters?


This answer might help you to better understand concepts like ViewVector and ViewAngle . The code below lets you experiment a bit with how the position of the camera and the view angle affect the view in your particular example. The code for tab is as in the original question.

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图形

The image on the left shows an bird's eye view of the buildings where the red dot is the location of the camera and the cone the field of view.


Is this what you want?

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}]

在这里输入图像描述

链接地址: http://www.djcxy.com/p/35584.html

上一篇: 方便的方式添加内联格式化使用消息

下一篇: 数学中结构的第一人称视角