5

This is a follow up question to RevolutionPlot3D: but NOT revolving about the z axis so please check that for the context.

It seems that RevolutionAxis requires the axis of revolution to pass thru the origin. Suppose I want to use an axis of revolution that does not pass through the origin, e.g., the line $y=-1$ in the example above. What is a good way to accomplish this?

I do realize that RegionPlot3D may be appropriate here, but even with seemingly simple examples such as the one above, it can struggle:

Show[
  RegionPlot3D[1 <= Sqrt[(y + 1)^2 + z^2] <= 1 + x^2, {x, 0, 1}, 
    {y, -3, 3}, {z, -3, 3}, PlotRange -> All, PerformanceGoal -> "Quality", 
    Mesh -> False, AxesLabel -> {x, y, z}, PlotPoints -> 100, 
    ViewPoint -> {0.87, 0.44, 1.76}, ViewVertical -> {0.32, 0.67, 0.67}],
  Graphics3D[{Thickness[.01], Black, Line[{{0, -1, 0}, {1.15, -1, 0}}]}]
]

enter image description here

Bumping PlotPoints up to 200, 300, 400 doesn't alleviate the problem and gets really slow.

JohnD
  • 3,301
  • 3
  • 22
  • 42

2 Answers2

3

Just want to give yet another example of how Simon Woods's contourRegionPlot3D can produce flawless results:

Show[
 contourRegionPlot3D[
  1 <= Sqrt[(y + 1)^2 + z^2] <= 1 + x^2, {x, 0, 1}, {y, -3, 
   3}, {z, -3, 3}, Mesh -> None],
 Graphics3D[{Thickness[.01], Black, 
   Line[{{0, -1, 0}, {1.15, -1, 0}}]}]
]

Mathematica graphics

Jason B.
  • 68,381
  • 3
  • 139
  • 286
2

Generate the plot and then apply a translation:

RevolutionPlot3D[{Sin[t], t, Cos[t]}, {t, 0, 4 Pi}, RevolutionAxis -> {0, 0, 1}, 
                 PlotRange -> All] /. 
 GraphicsComplex[p_List, rest__] :> GraphicsComplex[TranslationTransform[{5, 5, 0}][p], rest]

enter image description here

Dr. belisarius
  • 115,881
  • 13
  • 203
  • 453
  • 1
    I am not sure I understand this approach. How would I use it to generate the solid of revolution in the question? Thanks. – JohnD Dec 16 '12 at 01:50