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.


