2011-06-26 8 views
7

Biorąc pod uwagę następujące elementy:Wyświetlanie wielu wykresów 2D w 3D za pomocą grafiki w programie Mathematica?

lalist = {{{{1, 1}, 1}, {{3, 3}, 1}, {{5, 5}, 1}}, 
      {{{1, 5}, 1}, {{3, 3}, 1}, {{5, 1}, 1}}} 

enter image description here

Row[{ 
    Graphics[{ 
      Opacity[0.5],Red, 
      Disk @@@ lalist[[1]]}, 
      Frame -> True], 
    Graphics[{ 
      Opacity[0.5],Blue, 
      Disk @@@ lalist[[2]]}, 
      Frame -> True]} 
    ] 

enter image description here

  • Czy to możliwe, że działki bluesa Tarcze "za" czerwonych w 3 D działki ?

poniżej nie jest to, czego potrzebuję:

enter image description here

Odpowiedz

10

Jak to?

Graphics3D[{{Texture[ 
Graphics[{Opacity[0.5], Blue, Disk @@@ lalist[[2]]}, 
    Frame -> True]], 
Polygon[{{-1, -1, -1}, {1, -1, -1}, {1, 1, -1}, {-1, 1, -1}}, 
VertexTextureCoordinates \[Rule] {{0, 0}, {1, 0}, {1, 1}, {0, 
    1}}]}, {Texture[ 
Graphics[{Opacity[0.5], Red, Disk @@@ lalist[[1]]}, 
    Frame -> True]], 
Polygon[{{-1, -1, 1}, {1, -1, 1}, {1, 1, 1}, {-1, 1, 1}}, 
VertexTextureCoordinates \[Rule] {{0, 0}, {1, 0}, {1, 1}, {0, 
    1}}]}}, Lighting \[Rule] "Neutral"] 

enter image description here

Wiele z nich z kryciem .2:

tab = Table[{Opacity \[Rule] .2, 
Texture[Graphics[{Opacity[0.5], Blue, Disk @@@ lalist[[2]]}, 
    Frame -> True]], 
Polygon[{{-1, -1, z}, {1, -1, z}, {1, 1, z}, {-1, 1, z}}, 
VertexTextureCoordinates \[Rule] {{0, 0}, {1, 0}, {1, 1}, {0, 
    1}}]}, {z, -2, 2, 1}]; 
plt = Graphics3D[{tab}, Lighting \[Rule] "Neutral"] 

enter image description here

i 400 nie wydają się być wielkim problemem, jeśli chodzi o szybkość (ci można łatwo modyfikować powyższy kod, aby go zobaczyć).

EDIT: OK, po prostu głupie, spróbuj tego

Dynamic[Graphics3D[{{Texture[#], 
    Polygon[{{-1, -1, -1}, {1, -1, -1}, {1, 1, -1}, {-1, 1, -1}}, 
    VertexTextureCoordinates \[Rule] {{0, 0}, {1, 0}, {1, 1}, {0, 
     1}}]}, {Texture[Rotate[#, \[Pi]/2]], 
    Polygon[{{-1, -1, 1}, {1, -1, 1}, {1, 1, 1}, {-1, 1, 1}}, 
    VertexTextureCoordinates \[Rule] {{0, 0}, {1, 0}, {1, 1}, {0, 
     1}}]}}, Lighting \[Rule] "Neutral"] &@Binarize[CurrentImage[]]] 

co daje

enter image description here

(czy coś takiego), obrotowe, aktualizowane w czasie rzeczywistym itp

+0

@acl, przepraszam, nie miałem, że naprawdę chcę działka 3D :) Jak mogę lepiej wyrazić moje pytanie? – 500

+0

@acl, tak, myślisz, że może obsłużyć 400 z nich :)? – 500

+0

@ 500 tylko jeden sposób, aby się dowiedzieć :) jeśli nie pytasz tutaj ... – acl

4

Używanie przezroczystych tekstur do renderowania tych okręgów w warstwach as ACL does jest dobrym rozwiązaniem, chyba że chce się współdziałać z powstałym obiektem 3D. Rendering of 3D objects that contain transparent elements is done in software whereas otherwise it would have been done in hardware:

renderujący 3D wykorzystuje dwa różne metody sortowania wielokątów. W przypadku scen graficznych, które nie zawierają przezroczystości , używany jest przyspieszony sprzętowo bufor głębiowy . W przeciwnym razie renderer używa drzewa binarnego o podziale przestrzeni do podziału i sortowania wielokątów z dowolnego punktu widzenia. Drzewo BSP jest wolniejsze , aby utworzyć i nie jest sprzętowo przyspieszane, ale zapewnia największą ogólną zdolność obsługi wielokątów.

Na moim laptopie interakcja z grafiką 3D jest niesamowicie powolna, gdy tylko zaczną pojawiać się przezroczyste obiekty.

Rozwiązaniem byłoby użycie dysków 3D zamiast półprzezroczystych płaszczyzn z dyskami 2D w nich. Ponieważ MMA nie ma 3D Disk s lub Circle s, jeśli chcesz zrobić coś takiego, musisz rzucić własną. Wersja goły byłoby coś jak:

myDisk[{x_, y_, z_}, r_] := 
[email protected][ 
       {x, y, z} + r {Cos[\[Phi]], Sin[\[Phi]], 0} // N, 
       {\[Phi], 0, 2 \[Pi], 2 \[Pi]/200} 
       ] 

Twoje warstwy byłyby następnie generowany następująco:

Graphics3D[ 
{ 
    EdgeForm[], 
    { 
    Red, 
    myDisk[{1, 1, 0.5}, 0.5], 
    myDisk[{0, 0, 0.5}, 0.5], 
    myDisk[{-1, -1, 0.5}, 0.5] 
    }, 
    { 
    Blue, 
    myDisk[{1, -1, -0.5}, 0.5], 
    myDisk[{0, 0, -0.5}, -0.5], 
    myDisk[{-1, 1, -0.5}, 0.5]} 
    } 
] 

enter image description here

+0

ah, ale moje wielokąty mają na nich moją twarz! – acl

+0

@ ACL tak, również wypróbowałem twój kod. Sprawia, że ​​wyglądają jak zbrodnicze, raczej nierozpoznawalne portrety. Po prostu świetne dla awatarów. (Czy nosisz swetry z golfem i brodę, BTW?) –

+0

w każdym razie masz rację, 'Opacity' spowalnia działanie nawet na moim macbooku z jego żałosną kartą graficzną. – acl