Art*_*tes 12 math geometry wolfram-mathematica image
试图制作一个漂亮的三维锥形图形与一个平面相交我选择Mathematica中现有方法的轻微重新排列(即S.Mangano和S.Wagon的书籍).假设下面的代码显示所谓的Dandelin结构:内部和外部球体在锥体内部切线,也与锥体相交的平面切线.同时球体与平面的相切点是椭圆的焦点.
Block[{r1, r2, m, h1, h2, C1, C2, M, MC1, MC2, T1, T2, cone, slope, plane},
{r1, r2} = {1.4, 3.4};
m = Tan[70.*Degree];
h1 := r1*Sqrt[1 + m^2];
h2 := r2*Sqrt[1 + m^2];
C1 := {0, 0, h1};
C2 := {0, 0, h2};
M = {0, MC1 + h1};
MC2 = MC1*(r2/r1);
MC1 = (r1*(h2 - h1))/(r1 + r2);
T1 = C1 + r1*{-Sqrt[1 - r1^2/MC1^2], 0, r1/MC1};
T2 = C2 + r2*{Sqrt[1 - r2^2/MC2^2], 0, -(r2/MC2)};
cone[m_, h_] := RevolutionPlot3D[{t, m*t}, {t, 0, h/m}, Mesh -> False][[1]];
slope = (T2[[3]] - T1[[3]])/(T2[[1]] - T1[[1]]);
plane = ParametricPlot3D[{t, u, slope*t + M[[2]]}, {t, -2*m, 12/m}, {u, -3, 3},
Boxed -> False, Axes -> False][[1]];
Graphics3D[{{Gray, Opacity[0.39], cone[m, 1.2*(h2 + r2)]},
{Opacity[0.5], Sphere[C1, r1], Sphere[C2, r2]},
{LightBlue, Opacity[0.6], plane},
PointSize[0.0175], Point[T1], Point[T2]},
Boxed -> False, Lighting -> "Neutral",
ViewPoint -> {-1.8, -2.5, 1.5}, ImageSize -> 950]]
Run Code Online (Sandbox Code Playgroud)
这是图形:

问题在于两个球体周围的白点在切点附近.把上面的代码放到Manipulate[...GrayLevel[z]...{z,0,1} ]我们可以轻松"删除"斑点,因为z倾向于1.
任何人都可以看到一种不同的方法去除白点?我更喜欢 GrayLevel[z]z <0.5.
我对图形中下部和上部球体上的斑点图案略有不同感兴趣.你有什么想法可以解释这个吗?
您可以使用Tube具有不同半径的锥体构造锥体:
cone[m_, h_] := {CapForm[None], Tube[{{0, 0, 0}, {0, 0, h}}, {0, h/m}]};
Run Code Online (Sandbox Code Playgroud)
你可能想让球体变小一些:
Sphere[C1, .98 r1], Sphere[C2, .98 r2]
Run Code Online (Sandbox Code Playgroud)
这是一个黑客,但它避免了交叉问题.
或者,您可以在锥体上向上绘制PlotPoints:
PlotPoints -> 100
Run Code Online (Sandbox Code Playgroud)
但这会使渲染速度变慢.
编辑:或这些的组合,以帮助提高速度和质量.
为什么没有人建议只使用内置Cone[]原语?
cone[m_, h_] := {EdgeForm[], Cone[{{0, 0, h}, {0, 0, 0}}, h/m]};
Run Code Online (Sandbox Code Playgroud)
这在这里工作正常(没有白点).此外,它不是一个黑客或解决方法.空的目的EdgeForm[]是去除锥形底座的黑色轮廓.

我刚刚意识到它Cone[]有一个坚实的基础,在包含的图像上也非常明显.所以这与原始版本不完全相同RevolutionPlot.
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |