Group Abstract Group Abstract

Message Boards Message Boards

Orthogonal projection of surface

Posted 11 years ago

Hi!

Does anyone know how to build an orthogonal projection of a surface?

points = Table[{i ^ 1 , j + i, ((-1)^(i + j))}, {i, 10}, {j, 10}];
surface = Graphics3D[{BSplineSurface[points], Blue, Point /@ points}]
Show[surface /. 
  Graphics3D[gr_, opts___] :> 
   Graphics3D[
    GeometricTransformation[gr, 
     ScalingTransform[10^-3, {1, 0, 0}, {1, 1, 0}]], opts], 
 Lighting -> Automatic, ImageSize -> Full, Axes -> True, 
 AxesStyle -> Black, ViewPoint -> {-\[Infinity], 0, 0}, Boxed -> True,
  Background -> RGBColor[0.84, 0.92, 1.]
 ]

Is it possible to use transformation matrices or Projection function to build a projection? All I have now is a projection on one axis.

POSTED BY: Victoria Cheng
3 Replies

Thank you all guys, this is pretty much what I wanted.

POSTED BY: Victoria Cheng
Attachments:
POSTED BY: Shenghui Yang

As far as I know one can not get the graphics primitives out of BSplineSurface, i.e. the polygons - because BSplineSurface is seen as a graphics primitive itself. Therefore one can not project its graphics primitives. As long as you stick with BSplineSurface you can rotate the points first and then look from infinity onto the result, e.g.

Clear[points, rPoints]
points = Table[{i^1, j + i, ((-1)^(i + j))}, {i, 10}, {j, 10}];
rPoints = RotationTransform[73 \[Degree], {1., 2., .5}][#] & /@ points;
Graphics3D[{BSplineSurface[rPoints], Blue, Point /@ rPoints}, 
 ViewPoint -> {0, \[Infinity], 0}, PlotRange -> All]

quasi projection

The projection you did is simply

Graphics3D[{BSplineSurface[points], Blue, Point /@ points}, 
 ViewPoint -> {-\[Infinity], 0, 0}, PlotRange -> All]

quasi 1D

at least as long as you do not click into it!

POSTED BY: Udo Krause
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard