I would like to project a 3-dimensional cone onto a plane and mark the intersection (which is an ellipse) with a line. I find cone2
by performing a transformation on cone1
:
cone1 = Cone[{{0, 0, 1}, {0, 0, 0}}];
transform = {{0.3, 0, 0.15}, {0, 0.35, 0}, {0.1, 0, 0.5}};
cone2 = GeometricTransformation[cone1, transform];
Now I would like to project cone2
through the origin onto the z = 1 plane. However, I cannot see a good way of directly performing this transformation in Mathematica. The best I can do is scale cone2
and then cut the graphic off at z = 1, thus:
origin = Point[{0, 0, 0}];
projcone2 = Scale[cone2, 3, {0, 0, 0}];
Graphics3D[{
{Opacity[0.25], EdgeForm[{Thick}], cone1},
{Opacity[0.6], Magenta, EdgeForm[Thick], cone2},
{Opacity[0.6], Cyan, EdgeForm[Thick], projcone2},
{PointSize[Large], origin}},
Boxed -> False, PlotRange -> 1]
This gives:
However, I would like the intersection of projcone2
and the base of cone1
to be marked with a line, just as the bases of cone1
and cone2
are. Possibly this could be achieved using this ellipse3D function. But finding the parameters that describe the ellipse in question is not entirely straightforward, and this whole method of scaling and cutting off seems like a bit of a hack anyway, so I would like to know if there is a better way.
I see that nonlinear transformation of regions is possible but have been unable to find anything for performing a nonlinear transformation on a 3D object.
The question
How can I correctly find the object projcone2
by implementing a transformation on cone2
? By correctly, I mean that projcone2
should be exactly the 3D region required that is bounded by the z = 1 plane without having to artificially cut the image off there. Then the above code {Opacity[0.6], Cyan, EdgeForm[Thick], projcone2}
would automatically display the desired intersection ellipse.