2011-11-23 38 views
12

試圖製作一個與平面相交的圓錐體的三維立體圖形,我選擇Mathematica中現有方法(即S.Mangano和S.Wagon的書籍)的輕微重排。下面的代碼假定顯示所謂的丹德林結構:內部和外部球體在內部與錐體相切,也與錐體相交的平面相切。同時球面到平面的切點是橢圓的焦點。圓錐圖像細化

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]] 

這裏是顯卡: Dandelin construction

的問題是近切點的兩個領域周圍的白色斑點。把上面的代碼Manipulate[...GrayLevel[z]...{z,0,1} ]我們可以easliy「刪除」斑點爲z趨於1.

  1. 任何人都可以看到不同的方法來消除白斑?我更喜歡GrayLevel[z]與z < 0.5。

  2. 我一直對圖形上較低和較高球體上的斑點略有不同的模式感興趣。你有什麼想法可以解釋這個嗎?

+0

爲漂亮的圖形+1(即使它確實有「白點」)!圓錐形部分的那些舊數學中的一些非常漂亮,包括你的問題中的丹德林構造。 – Simon

回答

5

爲什麼沒有人建議只使用內置Cone[]原始?

cone[m_, h_] := {EdgeForm[], Cone[{{0, 0, h}, {0, 0, 0}}, h/m]}; 

這工作很好(沒有白點)。此外,這不是一個黑客或解決方法。空的EdgeForm[]的目的是去除錐形底座的黑色輪廓。

enter image description here

我剛剛意識到Cone[]有一個堅實的基礎,也將包含在圖片上非常明顯。所以這不是正好版本與原來的RevolutionPlot版本相同。

6

你可能想使球一點點小:

Sphere[C1, .98 r1], Sphere[C2, .98 r2] 

這是一個黑客,但它避免了交叉點的問題。

另外,您最多可以在錐PlotPoints:

PlotPoints -> 100 

但是,這將使渲染速度較慢。

編輯:或這些的組合,以幫助速度和質量。

+1

在我的機器上'PlotPoints - > 60'就足夠了,只需要渲染的時間加倍。 –

+0

@Arnoud,謝謝!設置球體[C1,.985 r1],球體[C2,...。985 r2]'和'PlotPoints - > 100'幾乎沒有可見的白色點,但是球體[C1,.98 r1],球體[C2,.98 r2]'我不需要額外的'PlotPoints'選項。 – Artes

9

你可以使用Tube具有不同半徑構造錐:

cone[m_, h_] := {CapForm[None], Tube[{{0, 0, 0}, {0, 0, h}}, {0, h/m}]}; 
+2

有趣... –

+0

請問有人請解釋這是如何工作的?該交點似乎不基於渲染的多邊形。 –

+0

不錯的。我並不知道「Tube」的變化。它隱藏在文檔頁面的「更多信息」部分。 –